Skip to content

Commit 35b49a7

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

File tree

6 files changed

+400
-171
lines changed

6 files changed

+400
-171
lines changed

src/NHibernate.Test/TransformTests/AliasToBeanResultTransformerFixture.cs

Lines changed: 136 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,218 @@ 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 BasePrivateFieldSimpleDTO2
94+
{
95+
#pragma warning disable CS0649
96+
private object _id;
97+
#pragma warning restore CS0649
98+
public object iD { get { return _id; } }
99+
}
100+
101+
public class PrivateInheritedFieldsSimpleDTO2 : BasePrivateFieldSimpleDTO2
102+
{
103+
#pragma warning disable CS0649
104+
private string namE;
105+
#pragma warning restore CS0649
106+
public string Name { get { return namE; } }
107+
}
108+
109+
public class NewPropertiesSimpleDTO : PrivateInheritedFieldsSimpleDTO2
110+
{
111+
public new string Name { get; set; }
112+
internal string NaMe { get; set; }
113+
114+
public object Id { get; set; }
115+
}
116+
80117
#region Overrides of TestCase
81118

82119
protected override IList Mappings
83120
{
84-
get { return new[] {"TransformTests.Simple.hbm.xml"}; }
121+
get { return new[] { "TransformTests.Simple.hbm.xml" }; }
85122
}
86123

87124
protected override string MappingsAssembly
88125
{
89126
get { return "NHibernate.Test"; }
90127
}
91128

92-
#endregion
93-
94-
[Test]
95-
public void WorkWithOutPublicParameterLessCtor()
129+
protected override void OnSetUp()
96130
{
97-
try
131+
using (var s = OpenSession())
98132
{
99-
Setup();
100-
101-
using (ISession s = OpenSession())
133+
using (s.BeginTransaction())
102134
{
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);
135+
s.Save(new Simple { Name = "Name1" });
136+
s.Save(new Simple { Name = "Name2" });
137+
s.Transaction.Commit();
108138
}
109139
}
110-
finally
111-
{
112-
Cleanup();
113-
}
114140
}
115141

116-
[Test]
117-
public void ToPublicProperties_WithoutAnyProjections()
142+
protected override void OnTearDown()
118143
{
119-
try
144+
using (var s = OpenSession())
120145
{
121-
Setup();
122-
123-
using (ISession s = OpenSession())
146+
using (s.BeginTransaction())
124147
{
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);
148+
s.Delete("from Simple");
149+
s.Transaction.Commit();
131150
}
132151
}
133-
finally
134-
{
135-
Cleanup();
136-
}
137152
}
138153

154+
#endregion
155+
139156
[Test]
140-
public void ToPrivateFields_WithoutAnyProjections()
157+
public void WorkWithOutPublicParameterLessCtor()
141158
{
142-
try
143-
{
144-
Setup();
159+
AssertCardinalityAndSomething<WithOutPublicParameterLessCtor>();
160+
}
145161

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-
}
162+
[Test]
163+
public void ToPublicProperties_WithoutAnyProjections()
164+
{
165+
AssertCardinalityNameAndId<PublicPropertiesSimpleDTO>();
160166
}
161167

162168
[Test]
163-
public void ToInheritedPublicProperties_WithoutProjections()
169+
public void ToPrivateFields_WithoutAnyProjections()
164170
{
165-
try
166-
{
167-
Setup();
171+
AssertCardinalityNameAndId<PrivateFieldsSimpleDTO>();
172+
}
168173

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-
}
174+
[Test]
175+
public void ToInheritedPublicProperties_WithoutProjections()
176+
{
177+
AssertCardinalityNameAndId<PublicInheritedPropertiesSimpleDTO>();
183178
}
184179

185180
[Test]
186181
public void ToInheritedPrivateFields_WithoutProjections()
187182
{
188-
try
189-
{
190-
Setup();
183+
AssertCardinalityNameAndId<PrivateInheritedFieldsSimpleDTO>();
184+
}
191185

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-
}
186+
[Test]
187+
public void WorkWithPublicParameterLessCtor_Fields()
188+
{
189+
AssertCardinalityAndSomething<PublicParameterLessCtor>();
207190
}
208191

209192
[Test]
210-
public void WorkWithPublicParameterLessCtor()
193+
public void WorkWithPublicParameterLessCtor_Properties()
211194
{
212-
try
213-
{
214-
Setup();
195+
AssertCardinalityAndSomething<PublicParameterLessCtor>("select s.Name as Something from Simple s");
196+
}
215197

216-
var queryString = "select s.Name as something from Simple s";
217-
AssertAreWorking(queryString); // working for field access
198+
[Test]
199+
public void WorksWithStruct()
200+
{
201+
AssertCardinalityAndSomething<TestStruct>();
202+
}
218203

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

228229
[Test]
229-
public void WorksWithStruct()
230+
public void ToPropertiesInsensitivelyDuplicated_WithoutAnyProjections()
230231
{
231-
try
232+
using (var s = OpenSession())
232233
{
233-
Setup();
234-
235-
IList<TestStruct> result;
236-
using (ISession s = OpenSession())
234+
var transformer = Transformers.AliasToBean<PropertiesInsensitivelyDuplicated>();
235+
Assert.Throws<AmbiguousMatchException>(() =>
237236
{
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();
237+
s.CreateSQLQuery("select * from Simple")
238+
.SetResultTransformer(transformer)
239+
.List<PropertiesInsensitivelyDuplicated>();
240+
});
247241
}
248242
}
249243

250-
private void AssertAreWorking(string queryString)
244+
private void AssertCardinalityNameAndId<T>(string queryString = "select * from Simple")
251245
{
252-
using (ISession s = OpenSession())
246+
using (var s = OpenSession())
253247
{
254-
IList<PublicParameterLessCtor> l =
255-
s.CreateSQLQuery(queryString).SetResultTransformer(
256-
Transformers.AliasToBean<PublicParameterLessCtor>()).List<PublicParameterLessCtor>();
248+
var transformer = Transformers.AliasToBean<T>();
249+
var l = s.CreateSQLQuery(queryString)
250+
.SetResultTransformer(transformer)
251+
.List<T>();
257252
Assert.That(l.Count, Is.EqualTo(2));
258253
Assert.That(l, Has.All.Not.Null);
254+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name1"));
255+
Assert.That(l, Has.Some.Property("Name").EqualTo("Name2"));
256+
Assert.That(l, Has.All.Property("Id").Not.Null);
259257
}
260258
}
261259

262-
private void Cleanup()
260+
private void AssertCardinalityAndSomething<T>(string queryString = "select s.Name as something from Simple s")
263261
{
264-
using (ISession s = OpenSession())
262+
using (var s = OpenSession())
265263
{
266-
using (s.BeginTransaction())
267-
{
268-
s.Delete("from Simple");
269-
s.Transaction.Commit();
270-
}
264+
var transformer = Transformers.AliasToBean<T>();
265+
var l = s.CreateSQLQuery(queryString)
266+
.SetResultTransformer(transformer)
267+
.List<T>();
268+
Assert.That(l.Count, Is.EqualTo(2));
269+
Assert.That(l, Has.All.Not.Null);
270+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name1"));
271+
Assert.That(l, Has.Some.Property("Something").EqualTo("Name2"));
271272
}
272273
}
273274

274-
private void Setup()
275+
private void AssertParameterLessCtorAreWorking(string queryString)
275276
{
276-
using (ISession s = OpenSession())
277+
using (var s = OpenSession())
277278
{
278-
using (s.BeginTransaction())
279-
{
280-
s.Save(new Simple {Name = "Name1"});
281-
s.Save(new Simple {Name = "Name2"});
282-
s.Transaction.Commit();
283-
}
279+
var l =
280+
s.CreateSQLQuery(queryString).SetResultTransformer(
281+
Transformers.AliasToBean<PublicParameterLessCtor>()).List<PublicParameterLessCtor>();
282+
Assert.That(l.Count, Is.EqualTo(2));
283+
Assert.That(l, Has.All.Not.Null);
284284
}
285285
}
286286
}

0 commit comments

Comments
 (0)