@@ -722,6 +722,40 @@ public void ShouldSplitLongChainedMethodsOntoMultipleLines()
722722 Assert . Equal ( EXPECTED . TrimStart ( ) , translated ) ;
723723 }
724724
725+ [ Fact ]
726+ public void ShouldTranslateAComplexMethodArgument ( )
727+ {
728+ var intVariable = Expression . Variable ( typeof ( int ) , "intValue" ) ;
729+ var dictionaryVariable = Expression . Variable ( typeof ( Dictionary < string , int > ) , "dictionary_String_IntValues" ) ;
730+ var tryGetValueMethod = dictionaryVariable . Type . GetPublicInstanceMethod ( "TryGetValue" , 2 ) ;
731+ var key = Expression . Constant ( "NumberThatIWantToGet" ) ;
732+ var tryGetValueCall = Expression . Call ( dictionaryVariable , tryGetValueMethod , key , intVariable ) ;
733+
734+ var defaultInt = Expression . Default ( typeof ( int ) ) ;
735+ var valueOrDefault = Expression . Condition ( tryGetValueCall , intVariable , defaultInt ) ;
736+ var valueOrDefaultBlock = Expression . Block ( new [ ] { intVariable } , valueOrDefault ) ;
737+
738+ var helperCtor = typeof ( HelperClass ) . GetPublicInstanceConstructors ( ) . First ( ) ;
739+ var helper = Expression . New ( helperCtor , defaultInt , defaultInt , defaultInt ) ;
740+ var intsMethod = helper . Type . GetPublicInstanceMethod ( nameof ( HelperClass . GiveMeSomeInts ) ) ;
741+ var methodCall = Expression . Call ( helper , intsMethod , defaultInt , valueOrDefaultBlock , defaultInt ) ;
742+
743+ var translated = methodCall . ToReadableString ( ) ;
744+
745+ const string EXPECTED = @"
746+ new HelperClass(default(int), default(int), default(int)).GiveMeSomeInts(
747+ default(int),
748+ {
749+ int intValue;
750+ return dictionary_String_IntValues.TryGetValue(""NumberThatIWantToGet"", out intValue)
751+ ? intValue
752+ : default(int);
753+ },
754+ default(int))" ;
755+
756+ Assert . Equal ( EXPECTED . TrimStart ( ) , translated ) ;
757+ }
758+
725759 [ Fact ]
726760 public void ShouldTranslateNullToNull ( )
727761 {
0 commit comments