Skip to content

Commit f6dced9

Browse files
NH-3693 - case sensitive resolver with fallback to case insensitive.
1 parent e77130f commit f6dced9

File tree

2 files changed

+300
-160
lines changed

2 files changed

+300
-160
lines changed

src/NHibernate.Test/TransformTests/AliasToBeanResultTransformerFixture.cs

Lines changed: 128 additions & 136 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
using System.Collections;
2-
using System.Collections.Generic;
2+
using System.Reflection;
33
using NHibernate.Transform;
44
using NUnit.Framework;
55

@@ -11,7 +11,7 @@ public class AliasToBeanResultTransformerFixture : TestCase
1111
public class WithOutPublicParameterLessCtor
1212
{
1313
private string something;
14-
protected WithOutPublicParameterLessCtor() {}
14+
protected WithOutPublicParameterLessCtor() { }
1515

1616
public WithOutPublicParameterLessCtor(string something)
1717
{
@@ -48,8 +48,10 @@ public class PublicPropertiesSimpleDTO
4848

4949
public class PrivateFieldsSimpleDTO
5050
{
51+
#pragma warning disable CS0649
5152
private object id;
5253
private string name;
54+
#pragma warning restore CS0649
5355

5456
public object Id { get { return id; } }
5557
public string Name { get { return name; } }
@@ -67,220 +69,210 @@ public class PublicInheritedPropertiesSimpleDTO : BasePublicPropsSimpleDTO
6769

6870
public class BasePrivateFieldSimpleDTO
6971
{
72+
#pragma warning disable CS0649
7073
private object id;
74+
#pragma warning restore CS0649
7175
public object Id { get { return id; } }
7276
}
7377

7478
public class PrivateInheritedFieldsSimpleDTO : BasePrivateFieldSimpleDTO
7579
{
80+
#pragma warning disable CS0649
7681
private string name;
82+
#pragma warning restore CS0649
7783
public string Name { get { return name; } }
7884
}
7985

86+
public class PropertiesInsensitivelyDuplicated
87+
{
88+
public object Id { get; set; }
89+
public string NaMe { get; set; }
90+
public string NamE { get; set; }
91+
}
92+
93+
public class PrivateInheritedFieldsSimpleDTO2 : BasePrivateFieldSimpleDTO
94+
{
95+
#pragma warning disable CS0649
96+
private string namE;
97+
#pragma warning restore CS0649
98+
public string Name { get { return namE; } }
99+
}
100+
101+
public class NewPropertiesSimpleDTO : PrivateInheritedFieldsSimpleDTO2
102+
{
103+
public new string Name { get; set; }
104+
internal string NaMe { get; set; }
105+
106+
public object iD { get; set; }
107+
}
108+
80109
#region Overrides of TestCase
81110

82111
protected override IList Mappings
83112
{
84-
get { return new[] {"TransformTests.Simple.hbm.xml"}; }
113+
get { return new[] { "TransformTests.Simple.hbm.xml" }; }
85114
}
86115

87116
protected override string MappingsAssembly
88117
{
89118
get { return "NHibernate.Test"; }
90119
}
91120

92-
#endregion
93-
94-
[Test]
95-
public void WorkWithOutPublicParameterLessCtor()
121+
protected override void OnSetUp()
96122
{
97-
try
123+
using (var s = OpenSession())
98124
{
99-
Setup();
100-
101-
using (ISession s = OpenSession())
125+
using (s.BeginTransaction())
102126
{
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);
127+
s.Save(new Simple { Name = "Name1" });
128+
s.Save(new Simple { Name = "Name2" });
129+
s.Transaction.Commit();
108130
}
109131
}
110-
finally
111-
{
112-
Cleanup();
113-
}
114132
}
115133

116-
[Test]
117-
public void ToPublicProperties_WithoutAnyProjections()
134+
protected override void OnTearDown()
118135
{
119-
try
136+
using (var s = OpenSession())
120137
{
121-
Setup();
122-
123-
using (ISession s = OpenSession())
138+
using (s.BeginTransaction())
124139
{
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);
140+
s.Delete("from Simple");
141+
s.Transaction.Commit();
131142
}
132143
}
133-
finally
134-
{
135-
Cleanup();
136-
}
137144
}
138145

146+
#endregion
147+
139148
[Test]
140-
public void ToPrivateFields_WithoutAnyProjections()
149+
public void WorkWithOutPublicParameterLessCtor()
141150
{
142-
try
143-
{
144-
Setup();
151+
AssertCardinalityAndSomething<WithOutPublicParameterLessCtor>();
152+
}
145153

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-
}
154+
[Test]
155+
public void ToPublicProperties_WithoutAnyProjections()
156+
{
157+
AssertCardinalityNameAndId<PublicPropertiesSimpleDTO>();
160158
}
161159

162160
[Test]
163-
public void ToInheritedPublicProperties_WithoutProjections()
161+
public void ToPrivateFields_WithoutAnyProjections()
164162
{
165-
try
166-
{
167-
Setup();
163+
AssertCardinalityNameAndId<PrivateFieldsSimpleDTO>();
164+
}
168165

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-
}
166+
[Test]
167+
public void ToInheritedPublicProperties_WithoutProjections()
168+
{
169+
AssertCardinalityNameAndId<PublicInheritedPropertiesSimpleDTO>();
183170
}
184171

185172
[Test]
186173
public void ToInheritedPrivateFields_WithoutProjections()
187174
{
188-
try
189-
{
190-
Setup();
175+
AssertCardinalityNameAndId<PrivateInheritedFieldsSimpleDTO>();
176+
}
191177

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-
}
178+
[Test]
179+
public void WorkWithPublicParameterLessCtor_Fields()
180+
{
181+
AssertCardinalityAndSomething<PublicParameterLessCtor>();
207182
}
208183

209184
[Test]
210-
public void WorkWithPublicParameterLessCtor()
185+
public void WorkWithPublicParameterLessCtor_Properties()
211186
{
212-
try
213-
{
214-
Setup();
187+
AssertCardinalityAndSomething<PublicParameterLessCtor>("select s.Name as Something from Simple s");
188+
}
215189

216-
var queryString = "select s.Name as something from Simple s";
217-
AssertAreWorking(queryString); // working for field access
190+
[Test]
191+
public void WorksWithStruct()
192+
{
193+
AssertCardinalityAndSomething<TestStruct>();
194+
}
218195

219-
queryString = "select s.Name as Something from Simple s";
220-
AssertAreWorking(queryString); // working for property access
221-
}
222-
finally
196+
[Test]
197+
public void WorksWithNewProperty()
198+
{
199+
AssertCardinalityNameAndId<NewPropertiesSimpleDTO>();
200+
}
201+
202+
[Test]
203+
public void WorksWithManyCandidates()
204+
{
205+
using (var s = OpenSession())
223206
{
224-
Cleanup();
207+
var transformer = Transformers.AliasToBean<NewPropertiesSimpleDTO>();
208+
var l = s.CreateSQLQuery("select id as ID, Name as NamE from Simple")
209+
.SetResultTransformer(transformer)
210+
.List<NewPropertiesSimpleDTO>();
211+
Assert.That(l.Count, Is.EqualTo(2));
212+
Assert.That(l, Has.All.Not.Null);
213+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name1"));
214+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name2"));
215+
Assert.That(l, Has.All.Property("iD").Not.Null);
216+
Assert.That(l, Has.All.Property("Id").Null);
217+
Assert.That(l, Has.All.Property("NaMe").Null);
225218
}
226219
}
227220

228221
[Test]
229-
public void WorksWithStruct()
222+
public void ToPropertiesInsensitivelyDuplicated_WithoutAnyProjections()
230223
{
231-
try
224+
using (var s = OpenSession())
232225
{
233-
Setup();
234-
235-
IList<TestStruct> result;
236-
using (ISession s = OpenSession())
226+
var transformer = Transformers.AliasToBean<PropertiesInsensitivelyDuplicated>();
227+
Assert.Throws<AmbiguousMatchException>(() =>
237228
{
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();
229+
s.CreateSQLQuery("select * from Simple")
230+
.SetResultTransformer(transformer)
231+
.List<PropertiesInsensitivelyDuplicated>();
232+
});
247233
}
248234
}
249235

250-
private void AssertAreWorking(string queryString)
236+
private void AssertCardinalityNameAndId<T>(string queryString = "select * from Simple")
251237
{
252-
using (ISession s = OpenSession())
238+
using (var s = OpenSession())
253239
{
254-
IList<PublicParameterLessCtor> l =
255-
s.CreateSQLQuery(queryString).SetResultTransformer(
256-
Transformers.AliasToBean<PublicParameterLessCtor>()).List<PublicParameterLessCtor>();
240+
var transformer = Transformers.AliasToBean<T>();
241+
var l = s.CreateSQLQuery(queryString)
242+
.SetResultTransformer(transformer)
243+
.List<T>();
257244
Assert.That(l.Count, Is.EqualTo(2));
258245
Assert.That(l, Has.All.Not.Null);
246+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name1"));
247+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name2"));
248+
Assert.That(l, Has.All.Property("Id").Not.Null);
259249
}
260250
}
261251

262-
private void Cleanup()
252+
private void AssertCardinalityAndSomething<T>(string queryString = "select s.Name as something from Simple s")
263253
{
264-
using (ISession s = OpenSession())
254+
using (var s = OpenSession())
265255
{
266-
using (s.BeginTransaction())
267-
{
268-
s.Delete("from Simple");
269-
s.Transaction.Commit();
270-
}
256+
var transformer = Transformers.AliasToBean<T>();
257+
var l = s.CreateSQLQuery(queryString)
258+
.SetResultTransformer(transformer)
259+
.List<T>();
260+
Assert.That(l.Count, Is.EqualTo(2));
261+
Assert.That(l, Has.All.Not.Null);
262+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name1"));
263+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name2"));
271264
}
272265
}
273266

274-
private void Setup()
267+
private void AssertParameterLessCtorAreWorking(string queryString)
275268
{
276-
using (ISession s = OpenSession())
269+
using (var s = OpenSession())
277270
{
278-
using (s.BeginTransaction())
279-
{
280-
s.Save(new Simple {Name = "Name1"});
281-
s.Save(new Simple {Name = "Name2"});
282-
s.Transaction.Commit();
283-
}
271+
var l =
272+
s.CreateSQLQuery(queryString).SetResultTransformer(
273+
Transformers.AliasToBean<PublicParameterLessCtor>()).List<PublicParameterLessCtor>();
274+
Assert.That(l.Count, Is.EqualTo(2));
275+
Assert.That(l, Has.All.Not.Null);
284276
}
285277
}
286278
}

0 commit comments

Comments
 (0)