11using System . Collections ;
2- using System . Collections . Generic ;
2+ using System . Reflection ;
33using NHibernate . Transform ;
4+ using NHibernate . Util ;
45using NUnit . Framework ;
56
67namespace 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