Skip to content

Commit 64f004d

Browse files
NH-3961: test cases.
1 parent e5cf3e4 commit 64f004d

File tree

4 files changed

+308
-0
lines changed

4 files changed

+308
-0
lines changed
Lines changed: 282 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,282 @@
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+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
using System;
2+
3+
namespace NHibernate.Test.NHSpecificTest.NH3961
4+
{
5+
public class Entity
6+
{
7+
public virtual Guid Id { get; set; }
8+
public virtual string Name { get; set; }
9+
public virtual DateTime NonNullableDateTime { get; set; }
10+
public virtual DateTime? NullableDateTime { get; set; }
11+
}
12+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<?xml version="1.0" encoding="utf-8" ?>
2+
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH3961">
3+
4+
<class name="Entity">
5+
<id name="Id" generator="guid.comb" />
6+
<property name="Name" />
7+
<property name="NonNullableDateTime" type="timestamp" />
8+
<property name="NullableDateTime" type="timestamp" />
9+
</class>
10+
11+
</hibernate-mapping>

src/NHibernate.Test/NHibernate.Test.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -737,6 +737,8 @@
737737
<Compile Include="NHSpecificTest\EntityWithUserTypeCanHaveLinqGenerators\Fixture.cs" />
738738
<Compile Include="NHSpecificTest\EntityWithUserTypeCanHaveLinqGenerators\FooExample.cs" />
739739
<Compile Include="NHSpecificTest\EntityWithUserTypeCanHaveLinqGenerators\IExample.cs" />
740+
<Compile Include="NHSpecificTest\NH3961\Entity.cs" />
741+
<Compile Include="NHSpecificTest\NH3961\DateParametersComparedTo.cs" />
740742
<Compile Include="NHSpecificTest\NH3950\Entity.cs" />
741743
<Compile Include="NHSpecificTest\NH3950\Fixture.cs" />
742744
<Compile Include="NHSpecificTest\NH3952\Entity.cs" />
@@ -3208,6 +3210,7 @@
32083210
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
32093211
</ItemGroup>
32103212
<ItemGroup>
3213+
<EmbeddedResource Include="NHSpecificTest\NH3961\Mappings.hbm.xml" />
32113214
<EmbeddedResource Include="NHSpecificTest\NH3950\Mappings.hbm.xml" />
32123215
<EmbeddedResource Include="NHSpecificTest\NH3952\Mappings.hbm.xml" />
32133216
<EmbeddedResource Include="NHSpecificTest\NH2204\Mappings.hbm.xml" />

0 commit comments

Comments
 (0)