1
+ using System ;
2
+ using System . Globalization ;
3
+ using System . Linq ;
4
+ using NHibernate . Linq ;
5
+ using NUnit . Framework ;
6
+
7
+ namespace NHibernate . Test . NHSpecificTest . NH3961
8
+ {
9
+ [ TestFixture ]
10
+ public class DateParametersComparedTo : BugTestCase
11
+ {
12
+ private DateTime _testDate ;
13
+ private CultureInfo _backupCulture ;
14
+ private CultureInfo _backupUICulture ;
15
+ private readonly CultureInfo _testCulture = CultureInfo . GetCultureInfo ( "fr-FR" ) ;
16
+
17
+ protected override void OnSetUp ( )
18
+ {
19
+ using ( ISession session = OpenSession ( ) )
20
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
21
+ {
22
+ // day > 12 for ensuring a mdy/dmy mix-up would cause a failure.
23
+ _testDate = new DateTime ( 2017 , 03 , 15 ) ;
24
+ var e1 = new Entity { Name = "Bob" , NullableDateTime = _testDate , NonNullableDateTime = _testDate } ;
25
+ session . Save ( e1 ) ;
26
+
27
+ var e2 = new Entity { Name = "Sally" , NullableDateTime = _testDate . AddDays ( 1 ) , NonNullableDateTime = _testDate . AddDays ( 1 ) } ;
28
+ session . Save ( e2 ) ;
29
+
30
+ session . Flush ( ) ;
31
+ transaction . Commit ( ) ;
32
+ }
33
+
34
+ _backupCulture = CultureInfo . CurrentCulture ;
35
+ _backupUICulture = CultureInfo . CurrentUICulture ;
36
+ // "CultureInfo.CurrentCulture =": Fx 4.6 only; affect trough Thread.CurrentThread instead if in need of supporting a previous Fx.
37
+ // This test needs a culture using a dmy date format. If the test system does not support fr-FR, try find another one...
38
+ // This test assumes the SQL user language is set as English, otherwise it may not showcase the failure.
39
+ CultureInfo . CurrentCulture = _testCulture ;
40
+ CultureInfo . CurrentUICulture = _testCulture ;
41
+ }
42
+
43
+ protected override void OnTearDown ( )
44
+ {
45
+ using ( ISession session = OpenSession ( ) )
46
+ using ( ITransaction transaction = session . BeginTransaction ( ) )
47
+ {
48
+ session . Delete ( "from System.Object" ) ;
49
+
50
+ session . Flush ( ) ;
51
+ transaction . Commit ( ) ;
52
+ }
53
+ CultureInfo . CurrentCulture = _backupCulture ;
54
+ CultureInfo . CurrentUICulture = _backupUICulture ;
55
+ }
56
+
57
+ // Non-reg test case
58
+ [ Test ]
59
+ public void NonNullableMappedAsDateShouldBeCultureAgnostic ( )
60
+ {
61
+ using ( ISession session = OpenSession ( ) )
62
+ using ( session . BeginTransaction ( ) )
63
+ {
64
+ var result = session . Query < Entity > ( )
65
+ . Where ( e => e . NonNullableDateTime == _testDate . MappedAs ( NHibernateUtil . Date ) )
66
+ . ToList ( ) ;
67
+
68
+ Assert . AreEqual ( 1 , result . Count ) ;
69
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
70
+ }
71
+ }
72
+
73
+ // Non-reg test case
74
+ [ Test ]
75
+ public void NonNullableMappedAsDateShouldIgnoreTime ( )
76
+ {
77
+ using ( ISession session = OpenSession ( ) )
78
+ {
79
+ var result = session . Query < Entity > ( )
80
+ . Where ( e => e . NonNullableDateTime == _testDate . AddMinutes ( 10 ) . MappedAs ( NHibernateUtil . Date ) )
81
+ . ToList ( ) ;
82
+
83
+ Assert . AreEqual ( 1 , result . Count ) ;
84
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
85
+ }
86
+ }
87
+
88
+ // Non-reg test case
89
+ [ Test ]
90
+ public void NonNullableMappedAsDateTimeShouldBeCultureAgnostic ( )
91
+ {
92
+ using ( ISession session = OpenSession ( ) )
93
+ using ( session . BeginTransaction ( ) )
94
+ {
95
+ var result = session . Query < Entity > ( )
96
+ . Where ( e => e . NonNullableDateTime == _testDate . MappedAs ( NHibernateUtil . DateTime ) )
97
+ . ToList ( ) ;
98
+
99
+ Assert . AreEqual ( 1 , result . Count ) ;
100
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
101
+ }
102
+ }
103
+
104
+ // Non-reg test case
105
+ [ Test ]
106
+ public void NonNullableMappedAsTimestampShouldBeCultureAgnostic ( )
107
+ {
108
+ using ( ISession session = OpenSession ( ) )
109
+ using ( session . BeginTransaction ( ) )
110
+ {
111
+ var result = session . Query < Entity > ( )
112
+ . Where ( e => e . NonNullableDateTime == _testDate . MappedAs ( NHibernateUtil . Timestamp ) )
113
+ . ToList ( ) ;
114
+
115
+ Assert . AreEqual ( 1 , result . Count ) ;
116
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
117
+ }
118
+ }
119
+
120
+ // Non-reg test case
121
+ [ Test ]
122
+ public void NonNullableParameterValueShouldNotBeCachedWithMappedAsAnd ( )
123
+ {
124
+ // Dodges the query parameter formatting bug for showcasing the parameter value bug
125
+ CultureInfo . CurrentCulture = CultureInfo . GetCultureInfo ( "en-US" ) ;
126
+ CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
127
+ try
128
+ {
129
+ using ( ISession session = OpenSession ( ) )
130
+ {
131
+ var result = session . Query < Entity > ( )
132
+ . Where ( e => e . NonNullableDateTime == _testDate . MappedAs ( NHibernateUtil . DateTime ) )
133
+ . ToList ( ) ;
134
+
135
+ Assert . AreEqual ( 1 , result . Count ) ;
136
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
137
+
138
+ var testDate = _testDate . AddMinutes ( 10 ) ;
139
+ result = session . Query < Entity > ( )
140
+ . Where ( e => e . NonNullableDateTime == testDate . MappedAs ( NHibernateUtil . DateTime ) )
141
+ . ToList ( ) ;
142
+
143
+ CollectionAssert . IsEmpty ( result ) ;
144
+ }
145
+ }
146
+ finally
147
+ {
148
+ CultureInfo . CurrentCulture = _testCulture ;
149
+ CultureInfo . CurrentUICulture = _testCulture ;
150
+ }
151
+ }
152
+
153
+ // Non-reg test case
154
+ [ Test ]
155
+ public void NonNullableShouldBeCultureAgnostic ( )
156
+ {
157
+ using ( ISession session = OpenSession ( ) )
158
+ using ( session . BeginTransaction ( ) )
159
+ {
160
+ var result = session . Query < Entity > ( )
161
+ . Where ( e => e . NonNullableDateTime == _testDate )
162
+ . ToList ( ) ;
163
+
164
+ Assert . AreEqual ( 1 , result . Count ) ;
165
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
166
+ }
167
+ }
168
+
169
+ // Failing test case till NH-3961 is fixed
170
+ [ Test ]
171
+ public void NullableMappedAsDateShouldBeCultureAgnostic ( )
172
+ {
173
+ using ( ISession session = OpenSession ( ) )
174
+ using ( session . BeginTransaction ( ) )
175
+ {
176
+ var result = session . Query < Entity > ( )
177
+ . Where ( e => e . NullableDateTime == _testDate . MappedAs ( NHibernateUtil . Date ) )
178
+ . ToList ( ) ;
179
+
180
+ Assert . AreEqual ( 1 , result . Count ) ;
181
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
182
+ }
183
+ }
184
+
185
+ // Failing test case till NH-3961 is fixed
186
+ [ Test ]
187
+ public void NullableMappedAsDateShouldIgnoreTime ( )
188
+ {
189
+ var testDate = _testDate . AddMinutes ( 10 ) ;
190
+ using ( ISession session = OpenSession ( ) )
191
+ {
192
+ var result = session . Query < Entity > ( )
193
+ . Where ( e => e . NullableDateTime == testDate . MappedAs ( NHibernateUtil . Date ) )
194
+ . ToList ( ) ;
195
+
196
+ Assert . AreEqual ( 1 , result . Count ) ;
197
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
198
+ }
199
+ }
200
+
201
+ // Failing test case till NH-3961 is fixed
202
+ [ Test ]
203
+ public void NullableMappedAsDateTimeShouldBeCultureAgnostic ( )
204
+ {
205
+ using ( ISession session = OpenSession ( ) )
206
+ using ( session . BeginTransaction ( ) )
207
+ {
208
+ var result = session . Query < Entity > ( )
209
+ . Where ( e => e . NullableDateTime == _testDate . MappedAs ( NHibernateUtil . DateTime ) )
210
+ . ToList ( ) ;
211
+
212
+ Assert . AreEqual ( 1 , result . Count ) ;
213
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
214
+ }
215
+ }
216
+
217
+ // Failing test case till NH-3961 is fixed
218
+ [ Test ]
219
+ public void NullableMappedAsTimestampShouldBeCultureAgnostic ( )
220
+ {
221
+ using ( ISession session = OpenSession ( ) )
222
+ using ( session . BeginTransaction ( ) )
223
+ {
224
+ var result = session . Query < Entity > ( )
225
+ . Where ( e => e . NullableDateTime == _testDate . MappedAs ( NHibernateUtil . Timestamp ) )
226
+ . ToList ( ) ;
227
+
228
+ Assert . AreEqual ( 1 , result . Count ) ;
229
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
230
+ }
231
+ }
232
+
233
+ // Failing test case till NH-3961 is fixed
234
+ [ Test ]
235
+ public void NullableParameterValueShouldNotBeCachedWithMappedAs ( )
236
+ {
237
+ // Dodges the query parameter formatting bug for showcasing the parameter value bug
238
+ CultureInfo . CurrentCulture = CultureInfo . GetCultureInfo ( "en-US" ) ;
239
+ CultureInfo . CurrentUICulture = CultureInfo . CurrentCulture ;
240
+ try
241
+ {
242
+ using ( ISession session = OpenSession ( ) )
243
+ {
244
+ var result = session . Query < Entity > ( )
245
+ . Where ( e => e . NullableDateTime == _testDate . MappedAs ( NHibernateUtil . DateTime ) )
246
+ . ToList ( ) ;
247
+
248
+ Assert . AreEqual ( 1 , result . Count ) ;
249
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
250
+
251
+ var testDate = _testDate . AddMinutes ( 10 ) ;
252
+ result = session . Query < Entity > ( )
253
+ . Where ( e => e . NullableDateTime == testDate . MappedAs ( NHibernateUtil . DateTime ) )
254
+ . ToList ( ) ;
255
+
256
+ CollectionAssert . IsEmpty ( result ) ;
257
+ }
258
+ }
259
+ finally
260
+ {
261
+ CultureInfo . CurrentCulture = _testCulture ;
262
+ CultureInfo . CurrentUICulture = _testCulture ;
263
+ }
264
+ }
265
+
266
+ // Non-reg test case
267
+ [ Test ]
268
+ public void NullableShouldBeCultureAgnostic ( )
269
+ {
270
+ using ( ISession session = OpenSession ( ) )
271
+ using ( session . BeginTransaction ( ) )
272
+ {
273
+ var result = session . Query < Entity > ( )
274
+ . Where ( e => e . NullableDateTime == _testDate )
275
+ . ToList ( ) ;
276
+
277
+ Assert . AreEqual ( 1 , result . Count ) ;
278
+ Assert . AreEqual ( "Bob" , result [ 0 ] . Name ) ;
279
+ }
280
+ }
281
+ }
282
+ }
0 commit comments