1
1
using System . Collections ;
2
- using System . Collections . Generic ;
2
+ using System . Reflection ;
3
3
using NHibernate . Transform ;
4
+ using NHibernate . Util ;
4
5
using NUnit . Framework ;
5
6
6
7
namespace NHibernate . Test . TransformTests
@@ -11,7 +12,7 @@ public class AliasToBeanResultTransformerFixture : TestCase
11
12
public class WithOutPublicParameterLessCtor
12
13
{
13
14
private string something ;
14
- protected WithOutPublicParameterLessCtor ( ) { }
15
+ protected WithOutPublicParameterLessCtor ( ) { }
15
16
16
17
public WithOutPublicParameterLessCtor ( string something )
17
18
{
@@ -48,8 +49,10 @@ public class PublicPropertiesSimpleDTO
48
49
49
50
public class PrivateFieldsSimpleDTO
50
51
{
52
+ #pragma warning disable CS0649
51
53
private object id ;
52
54
private string name ;
55
+ #pragma warning restore CS0649
53
56
54
57
public object Id { get { return id ; } }
55
58
public string Name { get { return name ; } }
@@ -67,221 +70,227 @@ public class PublicInheritedPropertiesSimpleDTO : BasePublicPropsSimpleDTO
67
70
68
71
public class BasePrivateFieldSimpleDTO
69
72
{
73
+ #pragma warning disable CS0649
70
74
private object id ;
75
+ #pragma warning restore CS0649
71
76
public object Id { get { return id ; } }
72
77
}
73
78
74
79
public class PrivateInheritedFieldsSimpleDTO : BasePrivateFieldSimpleDTO
75
80
{
81
+ #pragma warning disable CS0649
76
82
private string name ;
83
+ #pragma warning restore CS0649
77
84
public string Name { get { return name ; } }
78
85
}
79
86
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
+
80
118
#region Overrides of TestCase
81
119
82
120
protected override IList Mappings
83
121
{
84
- get { return new [ ] { "TransformTests.Simple.hbm.xml" } ; }
122
+ get { return new [ ] { "TransformTests.Simple.hbm.xml" } ; }
85
123
}
86
124
87
125
protected override string MappingsAssembly
88
126
{
89
127
get { return "NHibernate.Test" ; }
90
128
}
91
129
92
- #endregion
93
-
94
- [ Test ]
95
- public void WorkWithOutPublicParameterLessCtor ( )
130
+ protected override void OnSetUp ( )
96
131
{
97
- try
132
+ using ( var s = OpenSession ( ) )
98
133
{
99
- Setup ( ) ;
100
-
101
- using ( ISession s = OpenSession ( ) )
134
+ using ( s . BeginTransaction ( ) )
102
135
{
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 ( ) ;
108
139
}
109
140
}
110
- finally
111
- {
112
- Cleanup ( ) ;
113
- }
114
141
}
115
142
116
- [ Test ]
117
- public void ToPublicProperties_WithoutAnyProjections ( )
143
+ protected override void OnTearDown ( )
118
144
{
119
- try
145
+ using ( var s = OpenSession ( ) )
120
146
{
121
- Setup ( ) ;
122
-
123
- using ( ISession s = OpenSession ( ) )
147
+ using ( s . BeginTransaction ( ) )
124
148
{
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 ( ) ;
131
151
}
132
152
}
133
- finally
134
- {
135
- Cleanup ( ) ;
136
- }
137
153
}
138
154
155
+ #endregion
156
+
139
157
[ Test ]
140
- public void ToPrivateFields_WithoutAnyProjections ( )
158
+ public void WorkWithOutPublicParameterLessCtor ( )
141
159
{
142
- try
143
- {
144
- Setup ( ) ;
160
+ AssertCardinalityAndSomething < WithOutPublicParameterLessCtor > ( ) ;
161
+ }
145
162
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 > ( ) ;
160
167
}
161
168
162
169
[ Test ]
163
- public void ToInheritedPublicProperties_WithoutProjections ( )
170
+ public void ToPrivateFields_WithoutAnyProjections ( )
164
171
{
165
- try
166
- {
167
- Setup ( ) ;
172
+ AssertCardinalityNameAndId < PrivateFieldsSimpleDTO > ( ) ;
173
+ }
168
174
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 > ( ) ;
183
179
}
184
180
185
181
[ Test ]
186
182
public void ToInheritedPrivateFields_WithoutProjections ( )
187
183
{
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 > ( ) ;
207
185
}
208
186
209
187
[ Test ]
210
- public void WorkWithPublicParameterLessCtor ( )
188
+ public void WorkWithPublicParameterLessCtor_Fields ( )
211
189
{
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
+ }
218
192
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" ) ;
226
197
}
227
198
228
199
[ Test ]
229
200
public void WorksWithStruct ( )
230
201
{
231
- try
232
- {
233
- Setup ( ) ;
202
+ AssertCardinalityAndSomething < TestStruct > ( ) ;
203
+ }
234
204
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 > ( ) ;
248
209
}
249
210
250
- private void AssertAreWorking ( string queryString )
211
+ [ Test ]
212
+ public void WorksWithManyCandidates ( )
251
213
{
252
- using ( ISession s = OpenSession ( ) )
214
+ using ( var s = OpenSession ( ) )
253
215
{
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 > ( ) ;
257
220
Assert . That ( l . Count , Is . EqualTo ( 2 ) ) ;
258
221
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 ) ;
259
227
}
260
228
}
261
229
262
- private void Cleanup ( )
230
+ [ Test ]
231
+ public void ToPropertiesInsensitivelyDuplicated_WithoutAnyProjections ( )
263
232
{
264
- using ( ISession s = OpenSession ( ) )
233
+ using ( var s = OpenSession ( ) )
265
234
{
266
- using ( s . BeginTransaction ( ) )
235
+ var transformer = Transformers . AliasToBean < PropertiesInsensitivelyDuplicated > ( ) ;
236
+ Assert . Throws < AmbiguousMatchException > ( ( ) =>
267
237
{
268
- s . Delete ( "from Simple" ) ;
269
- s . Transaction . Commit ( ) ;
270
- }
238
+ s . CreateSQLQuery ( "select * from Simple" )
239
+ . SetResultTransformer ( transformer )
240
+ . List < PropertiesInsensitivelyDuplicated > ( ) ;
241
+ } ) ;
271
242
}
272
243
}
273
244
274
- private void Setup ( )
245
+ [ Test ]
246
+ public void Serialization ( )
275
247
{
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 ( ) )
277
258
{
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 ) ;
284
269
}
285
270
}
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
+ }
286
295
}
287
296
}
0 commit comments