1
1
using System ;
2
- using System . Linq ;
3
2
using System . Threading . Tasks ;
4
3
using Moq ;
5
4
using Xunit ;
@@ -8,13 +7,21 @@ namespace LazyProxy.Tests
8
7
{
9
8
public class LazyProxyBuilderTests
10
9
{
11
- public class TestArgument { }
10
+ public interface IBaseArgument { }
11
+
12
+ public abstract class BaseArgument : IBaseArgument { }
13
+
14
+ public abstract class BaseArgument2 { }
15
+
16
+ public struct TestArgument : IBaseArgument { }
12
17
13
18
// ReSharper disable once MemberCanBePrivate.Global
14
- public class TestArgument2 { }
19
+ public class TestArgument2 : BaseArgument { }
15
20
16
21
// ReSharper disable once MemberCanBePrivate.Global
17
- public class TestArgument3 { }
22
+ public class TestArgument3 : BaseArgument { }
23
+
24
+ public class TestArgument4 : BaseArgument2 , IBaseArgument { }
18
25
19
26
private class TestException : Exception { }
20
27
@@ -37,14 +44,21 @@ public interface ITestService : IParentTestService
37
44
string MethodWithDefaultValue ( string arg = "arg" ) ;
38
45
string MethodWithOutValue ( out string arg ) ;
39
46
string MethodWithRefValue ( ref TestArgument arg ) ;
40
- string GenericMethod < T1 , T2 > ( string arg ) ;
47
+ string GenericMethod < T1 , T2 , T3 > ( string arg )
48
+ where T1 : class , IBaseArgument , new ( )
49
+ where T2 : struct
50
+ where T3 : BaseArgument2 , IBaseArgument ;
41
51
}
42
52
43
53
// ReSharper disable once MemberCanBePrivate.Global
44
54
public interface IGenericTestService < T , in TIn , out TOut >
55
+ where T : class , IBaseArgument , new ( )
56
+ where TIn : struct
57
+ where TOut : BaseArgument2 , IBaseArgument
45
58
{
46
59
TOut Method1 ( T arg1 , TIn arg2 ) ;
47
60
T Method2 ( T arg1 , TIn arg2 ) ;
61
+ T GenericMethod < T1 , T2 > ( TIn arg ) ;
48
62
}
49
63
50
64
// ReSharper disable once UnusedMember.Global
@@ -55,7 +69,7 @@ public void ProxyMustImplementInterface()
55
69
{
56
70
var proxyType = LazyProxyBuilder . BuildLazyProxyType < ITestService > ( ) ;
57
71
58
- Assert . True ( proxyType . GetInterfaces ( ) . Contains ( typeof ( ITestService ) ) ) ;
72
+ Assert . Contains ( typeof ( ITestService ) , proxyType . GetInterfaces ( ) ) ;
59
73
}
60
74
61
75
[ Fact ]
@@ -211,12 +225,14 @@ public void GenericMethodsMustBeProxied()
211
225
{
212
226
var mock = new Mock < ITestService > ( MockBehavior . Strict ) ;
213
227
214
- mock . Setup ( s => s . GenericMethod < TestArgument , TestException > ( arg ) ) . Returns ( expectedResult ) ;
228
+ mock
229
+ . Setup ( s => s . GenericMethod < TestArgument2 , TestArgument , TestArgument4 > ( arg ) )
230
+ . Returns ( expectedResult ) ;
215
231
216
232
return mock . Object ;
217
233
} ) ;
218
234
219
- var actualResult = proxy . GenericMethod < TestArgument , TestException > ( arg ) ;
235
+ var actualResult = proxy . GenericMethod < TestArgument2 , TestArgument , TestArgument4 > ( arg ) ;
220
236
221
237
Assert . Equal ( expectedResult , actualResult ) ;
222
238
}
@@ -325,14 +341,14 @@ public void ExceptionsFromServiceMustBeThrown()
325
341
[ Fact ]
326
342
public void GenericInterfacesMustBeProxied ( )
327
343
{
328
- var arg1 = new TestArgument ( ) ;
329
- var arg2 = new TestArgument2 ( ) ;
330
- var expectedResult1 = new TestArgument3 ( ) ;
331
- var expectedResult2 = new TestArgument ( ) ;
344
+ var arg1 = new TestArgument2 ( ) ;
345
+ var arg2 = new TestArgument ( ) ;
346
+ var expectedResult1 = new TestArgument4 ( ) ;
347
+ var expectedResult2 = new TestArgument2 ( ) ;
332
348
333
349
var proxy = LazyProxyBuilder . CreateLazyProxyInstance ( ( ) =>
334
350
{
335
- var mock = new Mock < IGenericTestService < TestArgument , TestArgument2 , TestArgument3 > > ( MockBehavior . Strict ) ;
351
+ var mock = new Mock < IGenericTestService < TestArgument2 , TestArgument , TestArgument4 > > ( MockBehavior . Strict ) ;
336
352
337
353
mock . Setup ( s => s . Method1 ( arg1 , arg2 ) ) . Returns ( expectedResult1 ) ;
338
354
mock . Setup ( s => s . Method2 ( arg1 , arg2 ) ) . Returns ( expectedResult2 ) ;
@@ -352,8 +368,10 @@ public void GenericInterfaceWithDifferentTypeParametersMustBeCreatedWithoutExcep
352
368
{
353
369
var exception = Record . Exception ( ( ) =>
354
370
{
355
- LazyProxyBuilder . BuildLazyProxyType < IGenericTestService < TestArgument , TestArgument2 , TestArgument3 > > ( ) ;
356
- LazyProxyBuilder . BuildLazyProxyType < IGenericTestService < TestArgument3 , TestArgument , TestArgument2 > > ( ) ;
371
+ LazyProxyBuilder . BuildLazyProxyType ( typeof ( IGenericTestService < , , > ) ) ;
372
+ LazyProxyBuilder . BuildLazyProxyType < IGenericTestService < TestArgument2 , TestArgument , TestArgument4 > > ( ) ;
373
+ LazyProxyBuilder . BuildLazyProxyType < IGenericTestService < TestArgument3 , TestArgument , TestArgument4 > > ( ) ;
374
+
357
375
} ) ;
358
376
359
377
Assert . Null ( exception ) ;
0 commit comments