Skip to content

Commit 792186f

Browse files
NH-3693 - case sensitive resolver with fallback to case insensitive.
1 parent cc9ff7d commit 792186f

File tree

5 files changed

+379
-220
lines changed

5 files changed

+379
-220
lines changed
Lines changed: 149 additions & 140 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
using System.Collections;
2-
using System.Collections.Generic;
2+
using System.Reflection;
33
using NHibernate.Transform;
4+
using NHibernate.Util;
45
using NUnit.Framework;
56

67
namespace NHibernate.Test.TransformTests
@@ -11,7 +12,7 @@ public class AliasToBeanResultTransformerFixture : TestCase
1112
public class WithOutPublicParameterLessCtor
1213
{
1314
private string something;
14-
protected WithOutPublicParameterLessCtor() {}
15+
protected WithOutPublicParameterLessCtor() { }
1516

1617
public WithOutPublicParameterLessCtor(string something)
1718
{
@@ -48,8 +49,10 @@ public class PublicPropertiesSimpleDTO
4849

4950
public class PrivateFieldsSimpleDTO
5051
{
52+
#pragma warning disable CS0649
5153
private object id;
5254
private string name;
55+
#pragma warning restore CS0649
5356

5457
public object Id { get { return id; } }
5558
public string Name { get { return name; } }
@@ -67,221 +70,227 @@ public class PublicInheritedPropertiesSimpleDTO : BasePublicPropsSimpleDTO
6770

6871
public class BasePrivateFieldSimpleDTO
6972
{
73+
#pragma warning disable CS0649
7074
private object id;
75+
#pragma warning restore CS0649
7176
public object Id { get { return id; } }
7277
}
7378

7479
public class PrivateInheritedFieldsSimpleDTO : BasePrivateFieldSimpleDTO
7580
{
81+
#pragma warning disable CS0649
7682
private string name;
83+
#pragma warning restore CS0649
7784
public string Name { get { return name; } }
7885
}
7986

87+
public class PropertiesInsensitivelyDuplicated
88+
{
89+
public object Id { get; set; }
90+
public string NaMe { get; set; }
91+
public string NamE { get; set; }
92+
}
93+
94+
public class BasePrivateFieldSimpleDTO2
95+
{
96+
#pragma warning disable CS0649
97+
private object _id;
98+
#pragma warning restore CS0649
99+
public object iD => _id;
100+
}
101+
102+
public class PrivateInheritedFieldsSimpleDTO2 : BasePrivateFieldSimpleDTO2
103+
{
104+
#pragma warning disable CS0649
105+
private string namE;
106+
#pragma warning restore CS0649
107+
public string Name { get { return namE; } }
108+
}
109+
110+
public class NewPropertiesSimpleDTO : PrivateInheritedFieldsSimpleDTO2
111+
{
112+
public new string Name { get; set; }
113+
internal string NaMe { get; set; }
114+
115+
public object Id { get; set; }
116+
}
117+
80118
#region Overrides of TestCase
81119

82120
protected override IList Mappings
83121
{
84-
get { return new[] {"TransformTests.Simple.hbm.xml"}; }
122+
get { return new[] { "TransformTests.Simple.hbm.xml" }; }
85123
}
86124

87125
protected override string MappingsAssembly
88126
{
89127
get { return "NHibernate.Test"; }
90128
}
91129

92-
#endregion
93-
94-
[Test]
95-
public void WorkWithOutPublicParameterLessCtor()
130+
protected override void OnSetUp()
96131
{
97-
try
132+
using (var s = OpenSession())
98133
{
99-
Setup();
100-
101-
using (ISession s = OpenSession())
134+
using (s.BeginTransaction())
102135
{
103-
IList<WithOutPublicParameterLessCtor> l =
104-
s.CreateSQLQuery("select s.Name as something from Simple s").SetResultTransformer(
105-
Transformers.AliasToBean<WithOutPublicParameterLessCtor>()).List<WithOutPublicParameterLessCtor>();
106-
Assert.That(l.Count, Is.EqualTo(2));
107-
Assert.That(l, Has.All.Not.Null);
136+
s.Save(new Simple { Name = "Name1" });
137+
s.Save(new Simple { Name = "Name2" });
138+
s.Transaction.Commit();
108139
}
109140
}
110-
finally
111-
{
112-
Cleanup();
113-
}
114141
}
115142

116-
[Test]
117-
public void ToPublicProperties_WithoutAnyProjections()
143+
protected override void OnTearDown()
118144
{
119-
try
145+
using (var s = OpenSession())
120146
{
121-
Setup();
122-
123-
using (ISession s = OpenSession())
147+
using (s.BeginTransaction())
124148
{
125-
var transformer = Transformers.AliasToBean<PublicPropertiesSimpleDTO>();
126-
IList<PublicPropertiesSimpleDTO> l = s.CreateSQLQuery("select * from Simple")
127-
.SetResultTransformer(transformer)
128-
.List<PublicPropertiesSimpleDTO>();
129-
Assert.That(l.Count, Is.EqualTo(2));
130-
Assert.That(l, Has.All.Not.Null);
149+
s.Delete("from Simple");
150+
s.Transaction.Commit();
131151
}
132152
}
133-
finally
134-
{
135-
Cleanup();
136-
}
137153
}
138154

155+
#endregion
156+
139157
[Test]
140-
public void ToPrivateFields_WithoutAnyProjections()
158+
public void WorkWithOutPublicParameterLessCtor()
141159
{
142-
try
143-
{
144-
Setup();
160+
AssertCardinalityAndSomething<WithOutPublicParameterLessCtor>();
161+
}
145162

146-
using (ISession s = OpenSession())
147-
{
148-
var transformer = Transformers.AliasToBean<PrivateFieldsSimpleDTO>();
149-
IList<PrivateFieldsSimpleDTO> l = s.CreateSQLQuery("select * from Simple")
150-
.SetResultTransformer(transformer)
151-
.List<PrivateFieldsSimpleDTO>();
152-
Assert.That(l.Count, Is.EqualTo(2));
153-
Assert.That(l, Has.All.Not.Null);
154-
}
155-
}
156-
finally
157-
{
158-
Cleanup();
159-
}
163+
[Test]
164+
public void ToPublicProperties_WithoutAnyProjections()
165+
{
166+
AssertCardinalityNameAndId<PublicPropertiesSimpleDTO>();
160167
}
161168

162169
[Test]
163-
public void ToInheritedPublicProperties_WithoutProjections()
170+
public void ToPrivateFields_WithoutAnyProjections()
164171
{
165-
try
166-
{
167-
Setup();
172+
AssertCardinalityNameAndId<PrivateFieldsSimpleDTO>();
173+
}
168174

169-
using (ISession s = OpenSession())
170-
{
171-
var transformer = Transformers.AliasToBean<PublicInheritedPropertiesSimpleDTO>();
172-
IList<PublicInheritedPropertiesSimpleDTO> l = s.CreateSQLQuery("select * from Simple")
173-
.SetResultTransformer(transformer)
174-
.List<PublicInheritedPropertiesSimpleDTO>();
175-
Assert.That(l.Count, Is.EqualTo(2));
176-
Assert.That(l, Has.All.Not.Null);
177-
}
178-
}
179-
finally
180-
{
181-
Cleanup();
182-
}
175+
[Test]
176+
public void ToInheritedPublicProperties_WithoutProjections()
177+
{
178+
AssertCardinalityNameAndId<PublicInheritedPropertiesSimpleDTO>();
183179
}
184180

185181
[Test]
186182
public void ToInheritedPrivateFields_WithoutProjections()
187183
{
188-
try
189-
{
190-
Setup();
191-
192-
using (ISession s = OpenSession())
193-
{
194-
var transformer = Transformers.AliasToBean<PrivateInheritedFieldsSimpleDTO>();
195-
IList<PrivateInheritedFieldsSimpleDTO> l = s.CreateSQLQuery("select * from Simple")
196-
.SetResultTransformer(transformer)
197-
.List<PrivateInheritedFieldsSimpleDTO>();
198-
Assert.That(l.Count, Is.EqualTo(2));
199-
Assert.That(l, Has.All.Not.Null);
200-
Assert.That(l, Has.All.Property("Id").Not.Null);
201-
}
202-
}
203-
finally
204-
{
205-
Cleanup();
206-
}
184+
AssertCardinalityNameAndId<PrivateInheritedFieldsSimpleDTO>();
207185
}
208186

209187
[Test]
210-
public void WorkWithPublicParameterLessCtor()
188+
public void WorkWithPublicParameterLessCtor_Fields()
211189
{
212-
try
213-
{
214-
Setup();
215-
216-
var queryString = "select s.Name as something from Simple s";
217-
AssertAreWorking(queryString); // working for field access
190+
AssertCardinalityAndSomething<PublicParameterLessCtor>();
191+
}
218192

219-
queryString = "select s.Name as Something from Simple s";
220-
AssertAreWorking(queryString); // working for property access
221-
}
222-
finally
223-
{
224-
Cleanup();
225-
}
193+
[Test]
194+
public void WorkWithPublicParameterLessCtor_Properties()
195+
{
196+
AssertCardinalityAndSomething<PublicParameterLessCtor>("select s.Name as Something from Simple s");
226197
}
227198

228199
[Test]
229200
public void WorksWithStruct()
230201
{
231-
try
232-
{
233-
Setup();
202+
AssertCardinalityAndSomething<TestStruct>();
203+
}
234204

235-
IList<TestStruct> result;
236-
using (ISession s = OpenSession())
237-
{
238-
result = s.CreateSQLQuery("select s.Name as something from Simple s")
239-
.SetResultTransformer(Transformers.AliasToBean<TestStruct>())
240-
.List<TestStruct>();
241-
}
242-
Assert.AreEqual(2, result.Count);
243-
}
244-
finally
245-
{
246-
Cleanup();
247-
}
205+
[Test]
206+
public void WorksWithNewProperty()
207+
{
208+
AssertCardinalityNameAndId<NewPropertiesSimpleDTO>();
248209
}
249210

250-
private void AssertAreWorking(string queryString)
211+
[Test]
212+
public void WorksWithManyCandidates()
251213
{
252-
using (ISession s = OpenSession())
214+
using (var s = OpenSession())
253215
{
254-
IList<PublicParameterLessCtor> l =
255-
s.CreateSQLQuery(queryString).SetResultTransformer(
256-
Transformers.AliasToBean<PublicParameterLessCtor>()).List<PublicParameterLessCtor>();
216+
var transformer = Transformers.AliasToBean<NewPropertiesSimpleDTO>();
217+
var l = s.CreateSQLQuery("select id as ID, Name as NamE from Simple")
218+
.SetResultTransformer(transformer)
219+
.List<NewPropertiesSimpleDTO>();
257220
Assert.That(l.Count, Is.EqualTo(2));
258221
Assert.That(l, Has.All.Not.Null);
222+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name1"));
223+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name2"));
224+
Assert.That(l, Has.All.Property("Id").Not.Null);
225+
Assert.That(l, Has.All.Property("iD").Null);
226+
Assert.That(l, Has.All.Property("NaMe").Null);
259227
}
260228
}
261229

262-
private void Cleanup()
230+
[Test]
231+
public void ToPropertiesInsensitivelyDuplicated_WithoutAnyProjections()
263232
{
264-
using (ISession s = OpenSession())
233+
using (var s = OpenSession())
265234
{
266-
using (s.BeginTransaction())
235+
var transformer = Transformers.AliasToBean<PropertiesInsensitivelyDuplicated>();
236+
Assert.Throws<AmbiguousMatchException>(() =>
267237
{
268-
s.Delete("from Simple");
269-
s.Transaction.Commit();
270-
}
238+
s.CreateSQLQuery("select * from Simple")
239+
.SetResultTransformer(transformer)
240+
.List<PropertiesInsensitivelyDuplicated>();
241+
});
271242
}
272243
}
273244

274-
private void Setup()
245+
[Test]
246+
public void Serialization()
275247
{
276-
using (ISession s = OpenSession())
248+
AssertSerialization<PublicPropertiesSimpleDTO>();
249+
AssertSerialization<PrivateFieldsSimpleDTO>();
250+
AssertSerialization<PublicInheritedPropertiesSimpleDTO>();
251+
AssertSerialization<PrivateInheritedFieldsSimpleDTO>();
252+
AssertSerialization<NewPropertiesSimpleDTO>();
253+
}
254+
255+
private void AssertCardinalityNameAndId<T>(IResultTransformer transformer = null)
256+
{
257+
using (var s = OpenSession())
277258
{
278-
using (s.BeginTransaction())
279-
{
280-
s.Save(new Simple {Name = "Name1"});
281-
s.Save(new Simple {Name = "Name2"});
282-
s.Transaction.Commit();
283-
}
259+
transformer = transformer ?? Transformers.AliasToBean<T>();
260+
var l = s.CreateSQLQuery("select * from Simple")
261+
.SetResultTransformer(transformer)
262+
.List<T>();
263+
var testClass = typeof(T).Name;
264+
Assert.That(l.Count, Is.EqualTo(2), testClass);
265+
Assert.That(l, Has.All.Not.Null, testClass);
266+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name1"), testClass);
267+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name2"), testClass);
268+
Assert.That(l, Has.All.Property("Id").Not.Null, testClass);
284269
}
285270
}
271+
272+
private void AssertCardinalityAndSomething<T>(string queryString = "select s.Name as something from Simple s")
273+
{
274+
using (var s = OpenSession())
275+
{
276+
var transformer = Transformers.AliasToBean<T>();
277+
var l = s.CreateSQLQuery(queryString)
278+
.SetResultTransformer(transformer)
279+
.List<T>();
280+
var testClass = typeof(T).Name;
281+
Assert.That(l.Count, Is.EqualTo(2), testClass);
282+
Assert.That(l, Has.All.Not.Null, testClass);
283+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name1"), testClass);
284+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name2"), testClass);
285+
}
286+
}
287+
288+
private void AssertSerialization<T>()
289+
{
290+
var transformer = Transformers.AliasToBean<T>();
291+
var bytes = SerializationHelper.Serialize(transformer);
292+
transformer = (IResultTransformer)SerializationHelper.Deserialize(bytes);
293+
AssertCardinalityNameAndId<T>(transformer: transformer);
294+
}
286295
}
287296
}

0 commit comments

Comments
 (0)