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