1- namespace AgileObjects . ReadableExpressions . UnitTests . StaticTranslators
1+ namespace AgileObjects . ReadableExpressions . UnitTests . Reflection
22{
33 using System ;
44 using System . Collections . Generic ;
5+ using System . Linq ;
56 using System . Reflection ;
67 using NetStandardPolyfills ;
7- using Translations . StaticTranslators ;
88#if ! NET35
99 using Xunit ;
1010#else
@@ -17,7 +17,7 @@ public class WhenTranslatingMethodInfos
1717 [ Fact ]
1818 public void ShouldTranslateANullMethodInfo ( )
1919 {
20- var translated = DefinitionsTranslator . Translate ( default ( MethodInfo ) ) ;
20+ var translated = default ( MethodInfo ) . ToReadableString ( ) ;
2121
2222 translated . ShouldBe ( "[Method not found]" ) ;
2323 }
@@ -29,7 +29,7 @@ public void ShouldTranslateAPublicInstancePropertyGetter()
2929 . GetPublicInstanceProperty ( nameof ( Helper . PublicInstanceProperty ) )
3030 . GetGetter ( ) ;
3131
32- var translated = DefinitionsTranslator . Translate ( getter ) ;
32+ var translated = getter . ToReadableString ( ) ;
3333
3434 const string EXPECTED =
3535 "public int WhenTranslatingMethodInfos.Helper.PublicInstanceProperty { get; }" ;
@@ -44,7 +44,7 @@ public void ShouldTranslateAPublicInstancePropertySetter()
4444 . GetPublicInstanceProperty ( nameof ( Helper . PublicInstanceProperty ) )
4545 . GetSetter ( ) ;
4646
47- var translated = DefinitionsTranslator . Translate ( setter ) ;
47+ var translated = setter . ToReadableString ( ) ;
4848
4949 const string EXPECTED =
5050 "public int WhenTranslatingMethodInfos.Helper.PublicInstanceProperty { set; }" ;
@@ -59,7 +59,7 @@ public void ShouldTranslateAnInternalInstancePropertyGetter()
5959 . GetNonPublicInstanceProperty ( nameof ( Helper . InternalInstanceProperty ) )
6060 . GetGetter ( nonPublic : true ) ;
6161
62- var translated = DefinitionsTranslator . Translate ( getter ) ;
62+ var translated = getter . ToReadableString ( ) ;
6363
6464 const string EXPECTED =
6565 "internal string WhenTranslatingMethodInfos.Helper.InternalInstanceProperty { get; }" ;
@@ -74,7 +74,7 @@ public void ShouldTranslateAProtectedInstancePropertyGetter()
7474 . GetNonPublicInstanceProperty ( "ProtectedInstanceProperty" )
7575 . GetGetter ( nonPublic : true ) ;
7676
77- var translated = DefinitionsTranslator . Translate ( getter ) ;
77+ var translated = getter . ToReadableString ( ) ;
7878
7979 const string EXPECTED =
8080 "protected string WhenTranslatingMethodInfos.Helper.ProtectedInstanceProperty { get; }" ;
@@ -89,7 +89,7 @@ public void ShouldTranslateAProtectedInternalInstancePropertyGetter()
8989 . GetNonPublicInstanceProperty ( nameof ( Helper . ProtectedInternalInstanceProperty ) )
9090 . GetGetter ( nonPublic : true ) ;
9191
92- var translated = DefinitionsTranslator . Translate ( getter ) ;
92+ var translated = getter . ToReadableString ( ) ;
9393
9494 const string EXPECTED =
9595 "protected internal string WhenTranslatingMethodInfos.Helper.ProtectedInternalInstanceProperty { get; }" ;
@@ -104,7 +104,7 @@ public void ShouldTranslateAPrivateInstancePropertyGetter()
104104 . GetNonPublicInstanceProperty ( "PrivateInstanceProperty" )
105105 . GetGetter ( nonPublic : true ) ;
106106
107- var translated = DefinitionsTranslator . Translate ( getter ) ;
107+ var translated = getter . ToReadableString ( ) ;
108108
109109 const string EXPECTED =
110110 "private string WhenTranslatingMethodInfos.Helper.PrivateInstanceProperty { get; }" ;
@@ -118,7 +118,7 @@ public void ShouldTranslateAParameterlessMethodInfo()
118118 var method = typeof ( Helper )
119119 . GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterless ) ) ;
120120
121- var translated = DefinitionsTranslator . Translate ( method ) ;
121+ var translated = method . ToReadableString ( ) ;
122122
123123 const string EXPECTED =
124124"public string WhenTranslatingMethodInfos.Helper.InstanceParameterless()" ;
@@ -132,7 +132,7 @@ public void ShouldTranslateAVirtualParameterlessMethodInfo()
132132 var method = typeof ( Helper )
133133 . GetPublicInstanceMethod ( nameof ( Helper . InstanceVirtualParameterless ) ) ;
134134
135- var translated = DefinitionsTranslator . Translate ( method ) ;
135+ var translated = method . ToReadableString ( ) ;
136136
137137 const string EXPECTED =
138138 "public virtual string WhenTranslatingMethodInfos.Helper.InstanceVirtualParameterless()" ;
@@ -147,7 +147,7 @@ public void ShouldTranslateAnAbstractInstancePropertyGetter()
147147 . GetPublicInstanceProperty ( nameof ( AbstractHelper . PublicInstanceProperty ) )
148148 . GetGetter ( ) ;
149149
150- var translated = DefinitionsTranslator . Translate ( getter ) ;
150+ var translated = getter . ToReadableString ( ) ;
151151
152152 const string EXPECTED =
153153 "public abstract int WhenTranslatingMethodInfos.AbstractHelper.PublicInstanceProperty { get; }" ;
@@ -161,7 +161,7 @@ public void ShouldTranslateAnAbstractParameterlessMethodInfo()
161161 var method = typeof ( AbstractHelper )
162162 . GetPublicInstanceMethod ( nameof ( AbstractHelper . InstanceAbstractParameterless ) ) ;
163163
164- var translated = DefinitionsTranslator . Translate ( method ) ;
164+ var translated = method . ToReadableString ( ) ;
165165
166166 const string EXPECTED =
167167 "public abstract string WhenTranslatingMethodInfos.AbstractHelper.InstanceAbstractParameterless()" ;
@@ -175,7 +175,7 @@ public void ShouldTranslateAnAbstractClassParameterlessMethodInfo()
175175 var method = typeof ( AbstractHelper )
176176 . GetPublicInstanceMethod ( nameof ( AbstractHelper . InstanceParameterless ) ) ;
177177
178- var translated = DefinitionsTranslator . Translate ( method ) ;
178+ var translated = method . ToReadableString ( ) ;
179179
180180 const string EXPECTED =
181181 "public string WhenTranslatingMethodInfos.AbstractHelper.InstanceParameterless()" ;
@@ -189,7 +189,7 @@ public void ShouldTranslateASingleParameterMethodInfo()
189189 var method = typeof ( Helper )
190190 . GetPublicInstanceMethod ( nameof ( Helper . InstanceOneParameter ) ) ;
191191
192- var translated = DefinitionsTranslator . Translate ( method ) ;
192+ var translated = method . ToReadableString ( ) ;
193193
194194 const string EXPECTED =
195195@"public int WhenTranslatingMethodInfos.Helper.InstanceOneParameter
@@ -205,7 +205,7 @@ public void ShouldTranslateATwoParameterMethodInfo()
205205 var method = typeof ( Helper )
206206 . GetPublicInstanceMethod ( nameof ( Helper . InstanceTwoParameters ) ) ;
207207
208- var translated = DefinitionsTranslator . Translate ( method ) ;
208+ var translated = method . ToReadableString ( ) ;
209209
210210 const string EXPECTED =
211211@"public DateTime WhenTranslatingMethodInfos.Helper.InstanceTwoParameters
@@ -222,7 +222,7 @@ public void ShouldTranslateAnOpenGenericMethodInfo()
222222 var method = typeof ( Helper )
223223 . GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterlessSingleGeneric ) ) ;
224224
225- var translated = DefinitionsTranslator . Translate ( method ) ;
225+ var translated = method . ToReadableString ( ) ;
226226
227227 const string EXPECTED =
228228"public Type WhenTranslatingMethodInfos.Helper.InstanceParameterlessSingleGeneric<T>()" ;
@@ -237,7 +237,7 @@ public void ShouldTranslateAClosedGenericMethodInfo()
237237 . GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterlessSingleGeneric ) )
238238 . MakeGenericMethod ( typeof ( Dictionary < , > ) ) ;
239239
240- var translated = DefinitionsTranslator . Translate ( method ) ;
240+ var translated = method . ToReadableString ( ) ;
241241
242242 const string EXPECTED =
243243"public Type WhenTranslatingMethodInfos.Helper.InstanceParameterlessSingleGeneric<Dictionary<TKey, TValue>>()" ;
@@ -251,7 +251,7 @@ public void ShouldTranslateAThreeParametersTwoOpenGenericsMethodInfo()
251251 var method = typeof ( Helper )
252252 . GetPublicInstanceMethod ( nameof ( Helper . InstanceThreeParametersTwoGenerics ) ) ;
253253
254- var translated = DefinitionsTranslator . Translate ( method ) ;
254+ var translated = method . ToReadableString ( ) ;
255255
256256 const string EXPECTED =
257257@"public void WhenTranslatingMethodInfos.Helper.InstanceThreeParametersTwoGenerics<T1, T2>
@@ -269,7 +269,7 @@ public void ShouldTranslateAnOutParameter()
269269 var method = typeof ( Helper )
270270 . GetPublicStaticMethod ( nameof ( Helper . StaticOutParameter ) ) ;
271271
272- var translated = DefinitionsTranslator . Translate ( method ) ;
272+ var translated = method . ToReadableString ( ) ;
273273
274274 const string EXPECTED =
275275@"public static string WhenTranslatingMethodInfos.Helper.StaticOutParameter
@@ -286,7 +286,7 @@ public void ShouldTranslateARefParameter()
286286 . GetPublicStaticMethod ( nameof ( Helper . StaticRefParameter ) )
287287 . MakeGenericMethod ( typeof ( List < List < int > > ) ) ;
288288
289- var translated = DefinitionsTranslator . Translate ( method ) ;
289+ var translated = method . ToReadableString ( ) ;
290290
291291 const string EXPECTED =
292292@"public static void WhenTranslatingMethodInfos.Helper.StaticRefParameter<List<List<int>>>
@@ -296,6 +296,31 @@ ref List<List<int>> value
296296 translated . ShouldBe ( EXPECTED ) ;
297297 }
298298
299+ // See https://github.com/agileobjects/ReadableExpressions/issues/61
300+ [ Fact ]
301+ public void ShouldTranslateAnOpenGenericQueryableExtensionMethod ( )
302+ {
303+ var method = typeof ( Queryable )
304+ . GetPublicStaticMethods ( "SelectMany" )
305+ . First ( m =>
306+ m . GetParameters ( ) . Length == 3 &&
307+ m . GetParameters ( ) [ 1 ]
308+ . ParameterType
309+ . GetGenericTypeArguments ( ) [ 0 ]
310+ . GetGenericTypeArguments ( ) . Length == 3 ) ;
311+
312+ var translated = method . ToReadableString ( ) ;
313+
314+ const string EXPECTED = @"
315+ public static IQueryable<TResult> Queryable.SelectMany<TSource, TCollection, TResult>
316+ (
317+ IQueryable<TSource> source,
318+ Expression<Func<TSource, int, IEnumerable<TCollection>>> collectionSelector,
319+ Expression<Func<TSource, TCollection, TResult>> resultSelector
320+ )" ;
321+ translated . ShouldBe ( EXPECTED . TrimStart ( ) ) ;
322+ }
323+
299324 #region Helper Classes
300325
301326 // ReSharper disable once ClassWithVirtualMembersNeverInherited.Local
0 commit comments