1
1
using System ;
2
+ using System . Collections ;
2
3
using System . Collections . Generic ;
3
4
using System . Globalization ;
4
5
using System . Linq ;
6
+ using System . Linq . Expressions ;
5
7
using System . Text ;
6
8
using System . Threading . Tasks ;
7
9
using NFluent ;
@@ -23,6 +25,19 @@ public class Order
23
25
{
24
26
}
25
27
28
+ class DataClass1
29
+ {
30
+ public bool IsTrue ;
31
+ public string Name ;
32
+ }
33
+ class DataClass2
34
+ {
35
+ public bool ISTrue ;
36
+ public bool IsTrue ;
37
+ public string Name ;
38
+ }
39
+
40
+
26
41
[ Fact ]
27
42
public void Comparer_OrderBy_And_ThenBy ( )
28
43
{
@@ -75,5 +90,92 @@ public void Comparer_GroupBy()
75
90
Check . That ( check2 . Count ) . IsEqualTo ( check2_V2 . Count ( ) ) ;
76
91
Check . That ( check3 . Count ) . IsEqualTo ( check3_V2 . Count ( ) ) ;
77
92
}
93
+
94
+ [ Fact ]
95
+ public void Comparer_Parameter_1 ( )
96
+ {
97
+
98
+ bool isTrue = false ;
99
+ var abc = new List < DataClass1 > ( ) { new DataClass1 ( ) { IsTrue = true , Name = "1" } } ;
100
+ var x = new List < ParameterExpression > ( ) ;
101
+ x . Add ( Expression . Parameter ( isTrue . GetType ( ) , "isTrue" ) ) ;
102
+ x . Add ( Expression . Parameter ( abc . GetType ( ) , "abc" ) ) ;
103
+
104
+ var config = new ParsingConfig ( ) ;
105
+ string query = "abc.Where(IsTrue == true)" ;
106
+ config . IsCaseSensitive = true ;
107
+ var e = DynamicExpressionParser . ParseLambda ( config , x . ToArray ( ) , null , query ) ;
108
+ Delegate del = e . Compile ( ) ;
109
+ var result = ( ( IEnumerable ) del . DynamicInvoke ( isTrue , abc ) ) . GetEnumerator ( ) ;
110
+ result . MoveNext ( ) ;
111
+ var t = result . Current ;
112
+ Check . That ( t ) . IsNotNull ( ) ;
113
+ }
114
+ [ Fact ]
115
+ public void Comparer_Parameter_2 ( )
116
+ {
117
+
118
+ bool isTrue = false ;
119
+ var abc = new List < DataClass1 > ( ) { new DataClass1 ( ) { IsTrue = true , Name = "1" } } ;
120
+ var x = new List < ParameterExpression > ( ) ;
121
+ x . Add ( Expression . Parameter ( isTrue . GetType ( ) , "isTrue" ) ) ;
122
+ x . Add ( Expression . Parameter ( abc . GetType ( ) , "abc" ) ) ;
123
+
124
+ var config = new ParsingConfig ( ) ;
125
+ string query = "abc.Where(IsTrue == true)" ;
126
+ var e = DynamicExpressionParser . ParseLambda ( config , x . ToArray ( ) , null , query ) ;
127
+ Delegate del = e . Compile ( ) ;
128
+ var result = ( ( IEnumerable ) del . DynamicInvoke ( isTrue , abc ) ) . GetEnumerator ( ) ;
129
+ result . MoveNext ( ) ;
130
+ var t = result . Current ;
131
+ Check . That ( t ) . IsNull ( ) ;
132
+ }
133
+ [ Fact ]
134
+ public void Comparer_Property_1 ( )
135
+ {
136
+
137
+ bool isTrue = true ;
138
+ var abc = new List < DataClass2 > ( ) { new DataClass2 ( ) { IsTrue = true , Name = "1" } } ;
139
+ var x = new List < ParameterExpression > ( ) ;
140
+ x . Add ( Expression . Parameter ( abc . GetType ( ) , "abc" ) ) ;
141
+
142
+ var config = new ParsingConfig ( ) ;
143
+ string query = "abc.Where(IsTrue == true)" ;
144
+ config . IsCaseSensitive = true ;
145
+ var e = DynamicExpressionParser . ParseLambda ( config , x . ToArray ( ) , null , query ) ;
146
+ Delegate del = e . Compile ( ) ;
147
+ var result = ( ( IEnumerable ) del . DynamicInvoke ( abc ) ) . GetEnumerator ( ) ;
148
+ result . MoveNext ( ) ;
149
+ var t = result . Current ;
150
+ Check . That ( t ) . IsNotNull ( ) ;
151
+ }
152
+ [ Fact ]
153
+ public void Comparer_Property_2 ( )
154
+ {
155
+
156
+ bool isTrue = true ;
157
+ var abc = new List < DataClass2 > ( ) { new DataClass2 ( ) { IsTrue = true , Name = "1" } } ;
158
+ var x = new List < ParameterExpression > ( ) ;
159
+ x . Add ( Expression . Parameter ( abc . GetType ( ) , "abc" ) ) ;
160
+
161
+ var config = new ParsingConfig ( ) ;
162
+ string query = "abc.Where(IsTrue == true)" ;
163
+ object t = null ;
164
+ try
165
+ {
166
+ var e = DynamicExpressionParser . ParseLambda ( config , x . ToArray ( ) , null , query ) ;
167
+ Delegate del = e . Compile ( ) ;
168
+ var result = ( ( IEnumerable ) del . DynamicInvoke ( abc ) ) . GetEnumerator ( ) ;
169
+ result . MoveNext ( ) ;
170
+ t = result . Current ;
171
+
172
+
173
+ }
174
+ catch ( Exception exception )
175
+ {
176
+ return ;
177
+ }
178
+ Check . That ( t ) . IsNull ( ) ;
179
+ }
78
180
}
79
181
}
0 commit comments