1
- namespace AgileObjects . ReadableExpressions . UnitTests . StaticTranslators
1
+ namespace AgileObjects . ReadableExpressions . UnitTests . Reflection
2
2
{
3
3
using System ;
4
4
using System . Collections . Generic ;
5
+ using System . Linq ;
5
6
using System . Reflection ;
6
7
using NetStandardPolyfills ;
7
- using Translations . StaticTranslators ;
8
8
#if ! NET35
9
9
using Xunit ;
10
10
#else
@@ -17,7 +17,7 @@ public class WhenTranslatingMethodInfos
17
17
[ Fact ]
18
18
public void ShouldTranslateANullMethodInfo ( )
19
19
{
20
- var translated = DefinitionsTranslator . Translate ( default ( MethodInfo ) ) ;
20
+ var translated = default ( MethodInfo ) . ToReadableString ( ) ;
21
21
22
22
translated . ShouldBe ( "[Method not found]" ) ;
23
23
}
@@ -29,7 +29,7 @@ public void ShouldTranslateAPublicInstancePropertyGetter()
29
29
. GetPublicInstanceProperty ( nameof ( Helper . PublicInstanceProperty ) )
30
30
. GetGetter ( ) ;
31
31
32
- var translated = DefinitionsTranslator . Translate ( getter ) ;
32
+ var translated = getter . ToReadableString ( ) ;
33
33
34
34
const string EXPECTED =
35
35
"public int WhenTranslatingMethodInfos.Helper.PublicInstanceProperty { get; }" ;
@@ -44,7 +44,7 @@ public void ShouldTranslateAPublicInstancePropertySetter()
44
44
. GetPublicInstanceProperty ( nameof ( Helper . PublicInstanceProperty ) )
45
45
. GetSetter ( ) ;
46
46
47
- var translated = DefinitionsTranslator . Translate ( setter ) ;
47
+ var translated = setter . ToReadableString ( ) ;
48
48
49
49
const string EXPECTED =
50
50
"public int WhenTranslatingMethodInfos.Helper.PublicInstanceProperty { set; }" ;
@@ -59,7 +59,7 @@ public void ShouldTranslateAnInternalInstancePropertyGetter()
59
59
. GetNonPublicInstanceProperty ( nameof ( Helper . InternalInstanceProperty ) )
60
60
. GetGetter ( nonPublic : true ) ;
61
61
62
- var translated = DefinitionsTranslator . Translate ( getter ) ;
62
+ var translated = getter . ToReadableString ( ) ;
63
63
64
64
const string EXPECTED =
65
65
"internal string WhenTranslatingMethodInfos.Helper.InternalInstanceProperty { get; }" ;
@@ -74,7 +74,7 @@ public void ShouldTranslateAProtectedInstancePropertyGetter()
74
74
. GetNonPublicInstanceProperty ( "ProtectedInstanceProperty" )
75
75
. GetGetter ( nonPublic : true ) ;
76
76
77
- var translated = DefinitionsTranslator . Translate ( getter ) ;
77
+ var translated = getter . ToReadableString ( ) ;
78
78
79
79
const string EXPECTED =
80
80
"protected string WhenTranslatingMethodInfos.Helper.ProtectedInstanceProperty { get; }" ;
@@ -89,7 +89,7 @@ public void ShouldTranslateAProtectedInternalInstancePropertyGetter()
89
89
. GetNonPublicInstanceProperty ( nameof ( Helper . ProtectedInternalInstanceProperty ) )
90
90
. GetGetter ( nonPublic : true ) ;
91
91
92
- var translated = DefinitionsTranslator . Translate ( getter ) ;
92
+ var translated = getter . ToReadableString ( ) ;
93
93
94
94
const string EXPECTED =
95
95
"protected internal string WhenTranslatingMethodInfos.Helper.ProtectedInternalInstanceProperty { get; }" ;
@@ -104,7 +104,7 @@ public void ShouldTranslateAPrivateInstancePropertyGetter()
104
104
. GetNonPublicInstanceProperty ( "PrivateInstanceProperty" )
105
105
. GetGetter ( nonPublic : true ) ;
106
106
107
- var translated = DefinitionsTranslator . Translate ( getter ) ;
107
+ var translated = getter . ToReadableString ( ) ;
108
108
109
109
const string EXPECTED =
110
110
"private string WhenTranslatingMethodInfos.Helper.PrivateInstanceProperty { get; }" ;
@@ -118,7 +118,7 @@ public void ShouldTranslateAParameterlessMethodInfo()
118
118
var method = typeof ( Helper )
119
119
. GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterless ) ) ;
120
120
121
- var translated = DefinitionsTranslator . Translate ( method ) ;
121
+ var translated = method . ToReadableString ( ) ;
122
122
123
123
const string EXPECTED =
124
124
"public string WhenTranslatingMethodInfos.Helper.InstanceParameterless()" ;
@@ -132,7 +132,7 @@ public void ShouldTranslateAVirtualParameterlessMethodInfo()
132
132
var method = typeof ( Helper )
133
133
. GetPublicInstanceMethod ( nameof ( Helper . InstanceVirtualParameterless ) ) ;
134
134
135
- var translated = DefinitionsTranslator . Translate ( method ) ;
135
+ var translated = method . ToReadableString ( ) ;
136
136
137
137
const string EXPECTED =
138
138
"public virtual string WhenTranslatingMethodInfos.Helper.InstanceVirtualParameterless()" ;
@@ -147,7 +147,7 @@ public void ShouldTranslateAnAbstractInstancePropertyGetter()
147
147
. GetPublicInstanceProperty ( nameof ( AbstractHelper . PublicInstanceProperty ) )
148
148
. GetGetter ( ) ;
149
149
150
- var translated = DefinitionsTranslator . Translate ( getter ) ;
150
+ var translated = getter . ToReadableString ( ) ;
151
151
152
152
const string EXPECTED =
153
153
"public abstract int WhenTranslatingMethodInfos.AbstractHelper.PublicInstanceProperty { get; }" ;
@@ -161,7 +161,7 @@ public void ShouldTranslateAnAbstractParameterlessMethodInfo()
161
161
var method = typeof ( AbstractHelper )
162
162
. GetPublicInstanceMethod ( nameof ( AbstractHelper . InstanceAbstractParameterless ) ) ;
163
163
164
- var translated = DefinitionsTranslator . Translate ( method ) ;
164
+ var translated = method . ToReadableString ( ) ;
165
165
166
166
const string EXPECTED =
167
167
"public abstract string WhenTranslatingMethodInfos.AbstractHelper.InstanceAbstractParameterless()" ;
@@ -175,7 +175,7 @@ public void ShouldTranslateAnAbstractClassParameterlessMethodInfo()
175
175
var method = typeof ( AbstractHelper )
176
176
. GetPublicInstanceMethod ( nameof ( AbstractHelper . InstanceParameterless ) ) ;
177
177
178
- var translated = DefinitionsTranslator . Translate ( method ) ;
178
+ var translated = method . ToReadableString ( ) ;
179
179
180
180
const string EXPECTED =
181
181
"public string WhenTranslatingMethodInfos.AbstractHelper.InstanceParameterless()" ;
@@ -189,7 +189,7 @@ public void ShouldTranslateASingleParameterMethodInfo()
189
189
var method = typeof ( Helper )
190
190
. GetPublicInstanceMethod ( nameof ( Helper . InstanceOneParameter ) ) ;
191
191
192
- var translated = DefinitionsTranslator . Translate ( method ) ;
192
+ var translated = method . ToReadableString ( ) ;
193
193
194
194
const string EXPECTED =
195
195
@"public int WhenTranslatingMethodInfos.Helper.InstanceOneParameter
@@ -205,7 +205,7 @@ public void ShouldTranslateATwoParameterMethodInfo()
205
205
var method = typeof ( Helper )
206
206
. GetPublicInstanceMethod ( nameof ( Helper . InstanceTwoParameters ) ) ;
207
207
208
- var translated = DefinitionsTranslator . Translate ( method ) ;
208
+ var translated = method . ToReadableString ( ) ;
209
209
210
210
const string EXPECTED =
211
211
@"public DateTime WhenTranslatingMethodInfos.Helper.InstanceTwoParameters
@@ -222,7 +222,7 @@ public void ShouldTranslateAnOpenGenericMethodInfo()
222
222
var method = typeof ( Helper )
223
223
. GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterlessSingleGeneric ) ) ;
224
224
225
- var translated = DefinitionsTranslator . Translate ( method ) ;
225
+ var translated = method . ToReadableString ( ) ;
226
226
227
227
const string EXPECTED =
228
228
"public Type WhenTranslatingMethodInfos.Helper.InstanceParameterlessSingleGeneric<T>()" ;
@@ -237,7 +237,7 @@ public void ShouldTranslateAClosedGenericMethodInfo()
237
237
. GetPublicInstanceMethod ( nameof ( Helper . InstanceParameterlessSingleGeneric ) )
238
238
. MakeGenericMethod ( typeof ( Dictionary < , > ) ) ;
239
239
240
- var translated = DefinitionsTranslator . Translate ( method ) ;
240
+ var translated = method . ToReadableString ( ) ;
241
241
242
242
const string EXPECTED =
243
243
"public Type WhenTranslatingMethodInfos.Helper.InstanceParameterlessSingleGeneric<Dictionary<TKey, TValue>>()" ;
@@ -251,7 +251,7 @@ public void ShouldTranslateAThreeParametersTwoOpenGenericsMethodInfo()
251
251
var method = typeof ( Helper )
252
252
. GetPublicInstanceMethod ( nameof ( Helper . InstanceThreeParametersTwoGenerics ) ) ;
253
253
254
- var translated = DefinitionsTranslator . Translate ( method ) ;
254
+ var translated = method . ToReadableString ( ) ;
255
255
256
256
const string EXPECTED =
257
257
@"public void WhenTranslatingMethodInfos.Helper.InstanceThreeParametersTwoGenerics<T1, T2>
@@ -269,7 +269,7 @@ public void ShouldTranslateAnOutParameter()
269
269
var method = typeof ( Helper )
270
270
. GetPublicStaticMethod ( nameof ( Helper . StaticOutParameter ) ) ;
271
271
272
- var translated = DefinitionsTranslator . Translate ( method ) ;
272
+ var translated = method . ToReadableString ( ) ;
273
273
274
274
const string EXPECTED =
275
275
@"public static string WhenTranslatingMethodInfos.Helper.StaticOutParameter
@@ -286,7 +286,7 @@ public void ShouldTranslateARefParameter()
286
286
. GetPublicStaticMethod ( nameof ( Helper . StaticRefParameter ) )
287
287
. MakeGenericMethod ( typeof ( List < List < int > > ) ) ;
288
288
289
- var translated = DefinitionsTranslator . Translate ( method ) ;
289
+ var translated = method . ToReadableString ( ) ;
290
290
291
291
const string EXPECTED =
292
292
@"public static void WhenTranslatingMethodInfos.Helper.StaticRefParameter<List<List<int>>>
@@ -296,6 +296,31 @@ ref List<List<int>> value
296
296
translated . ShouldBe ( EXPECTED ) ;
297
297
}
298
298
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
+
299
324
#region Helper Classes
300
325
301
326
// ReSharper disable once ClassWithVirtualMembersNeverInherited.Local
0 commit comments