forked from dynamicexpresso/DynamicExpresso
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathExtensionsMethodsTest.cs
133 lines (107 loc) · 3.31 KB
/
ExtensionsMethodsTest.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
using System;
using System.Linq;
using NUnit.Framework;
using System.Collections.Generic;
namespace DynamicExpresso.UnitTest
{
[TestFixture]
public class ExtensionsMethodsTest
{
[Test]
public void Invoke_extension_method()
{
var x = new MyClass();
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.SetVariable("x", x);
Assert.AreEqual(x.HelloWorld(), target.Eval("x.HelloWorld()"));
Assert.AreEqual(x.HelloWorldWithParam(DateTime.Now), target.Eval("x.HelloWorldWithParam(DateTime.Now)"));
}
[Test]
public void Invoke_generic_extension_method()
{
var x = new MyClass();
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.SetVariable("x", x);
Assert.AreEqual(x.GenericHello(), target.Eval("x.GenericHello()"));
}
[Test]
public void Invoke_generic_parameter_extension_method()
{
var x = new MyClass[0];
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.SetVariable("x", x);
Assert.AreEqual(x.GenericParamHello(), target.Eval("x.GenericParamHello()"));
}
[Test]
public void Invoke_generic_parameter_extension_method_with_2_parameters()
{
var x = new MyClass[0];
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.Reference(typeof(MyClass))
.SetVariable("x", x);
Assert.AreEqual(x.GenericWith2Params(new MyClass()), target.Eval("x.GenericWith2Params(new MyClass())"));
}
[Test]
public void Invoke_generic_with_2_parameters_and_output_extension_method()
{
var x = new Dictionary<string, MyClass>();
x.Add("i1", new MyClass());
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.SetVariable("x", x);
Assert.AreEqual(x.GenericWith2Args(), target.Eval("x.GenericWith2Args()"));
}
[Test]
public void Invoke_generic_mixed_parameter_extension_method()
{
var x = new Dictionary<string, MyClass>();
var target = new Interpreter()
.Reference(typeof(TestExtensionsMethods))
.SetVariable("x", x);
Assert.AreEqual(x.GenericMixedParamHello(), target.Eval("x.GenericMixedParamHello()"));
}
public class MyClass
{
}
}
public static class TestExtensionsMethods
{
public static string HelloWorld(this ExtensionsMethodsTest.MyClass test)
{
return "Hello Test Class";
}
public static string HelloWorldWithParam(this ExtensionsMethodsTest.MyClass test, DateTime date)
{
return "Hello Test Class " + date.Year;
}
public static string GenericHello<T>(this T test)
where T : ExtensionsMethodsTest.MyClass
{
return "Hello with generic!";
}
public static string GenericParamHello<T>(this IEnumerable<T> test)
where T : ExtensionsMethodsTest.MyClass
{
return "Hello with generic param!";
}
public static string GenericWith2Params<T>(this IEnumerable<T> test, T another)
where T : ExtensionsMethodsTest.MyClass
{
return "Hello with 2 generic param!";
}
public static string GenericMixedParamHello<T>(this IDictionary<string, T> test)
where T : ExtensionsMethodsTest.MyClass
{
return "Hello with generic param!";
}
public static T2 GenericWith2Args<T1, T2>(this IDictionary<T1, T2> test)
where T2 : ExtensionsMethodsTest.MyClass
{
return test.First().Value;
}
}
}