comparison UnitTests/CS/Mapping/MapTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:f990fcb411a9
1 using System;
2 using System.Collections;
3 using System.Collections.Generic;
4 using System.Data;
5 using System.Data.SqlTypes;
6 using System.Globalization;
7 using BLToolkit.Common;
8 using BLToolkit.Reflection;
9 using NUnit.Framework;
10
11 using BLToolkit.Mapping;
12
13 namespace Mapping
14 {
15 [TestFixture, Category("Mapping")]
16 public class MapTest : TestFixtureBase
17 {
18 #region Enum To Int
19
20 public class EnumClass
21 {
22 public enum Enum
23 {
24 Value1 = 1,
25 Value2 = 2
26 }
27
28 public Enum Value = Enum.Value1;
29 public Enum? NullableValue = Enum.Value2;
30 }
31
32 public class IntClass
33 {
34 public int Value;
35 public int? NullableValue;
36 }
37
38 [Test]
39 public void EnumToInt()
40 {
41 var list1 = new ArrayList();
42
43 list1.Add(new EnumClass());
44
45 var list2 = Map.ListToList(list1, typeof(IntClass));
46
47 Assert.AreEqual(1, ((IntClass)list2[0]).Value);
48 Assert.AreEqual(2, ((IntClass)list2[0]).NullableValue);
49 }
50
51 #endregion
52
53 #region ToEnum, FromEnum
54
55 [DefaultValue(Enum1.Value3)]
56 [MapValue(Enum1.Value2, "2")]
57 public enum Enum1
58 {
59 [MapValue("1")] Value1,
60 [NullValue] Value2,
61 [MapValue("3")] Value3
62 }
63
64 [Test]
65 public void ToEnum()
66 {
67 Assert.AreEqual(Enum1.Value1, Map.ValueToEnum("1", typeof(Enum1)));
68 Assert.AreEqual(Enum1.Value2, Map.ValueToEnum(null, typeof(Enum1)));
69 Assert.AreEqual(Enum1.Value3, Map.ValueToEnum("2727", typeof(Enum1)));
70 }
71
72 [Test]
73 public void FromEnum()
74 {
75 Assert.AreEqual("1", Map.EnumToValue(Enum1.Value1));
76 Assert.IsNull ( Map.EnumToValue(Enum1.Value2));
77 Assert.AreEqual("3", Map.EnumToValue(Enum1.Value3));
78 }
79
80 public enum Enum2 : short
81 {
82 Value1 = 1,
83 [NullValue] Value2,
84 [DefaultValue]Value3
85 }
86
87 [Test]
88 public void ToShortEnum()
89 {
90 Assert.AreEqual(Enum2.Value1, Map.ValueToEnum(1, typeof(Enum2)));
91 Assert.AreEqual(Enum2.Value2, Map.ValueToEnum(null, typeof(Enum2)));
92 Assert.AreEqual(Enum2.Value3, Map.ValueToEnum(3, typeof(Enum2)));
93 Assert.AreEqual(Enum2.Value3, Map.ValueToEnum(2727, typeof(Enum2)));
94
95 // DateTime.Now can't converted to Enum2.
96 // Expected result in this case is default value.
97 //
98 Assert.AreEqual(Enum2.Value3, Map.ValueToEnum(DateTime.Now, typeof(Enum2)));
99 }
100
101 public enum Enum3 : long
102 {
103 Value1 = 1,
104 }
105
106 [Test, ExpectedException(typeof(InvalidCastException))]
107 public void ToEnumWithIncompatibleValue()
108 {
109 // An object can't be converted to Enum3.
110 // Expected result is an exception, since Enum3 does not have
111 // a default value defined.
112 //
113 Map.ValueToEnum(new object(), typeof(Enum3));
114 }
115
116 [Test]
117 public void ToEnumWithCompatibleValue()
118 {
119 // 123 is not defined for this enum, but can be converted to.
120 // Enum3 does not have a default value defined, so just cast 123 to Enum3
121 //
122 Assert.AreEqual((Enum3)123, Map.ValueToEnum(123, typeof(Enum3)));
123
124 // DateTime.Now also can be converted to Enum3 (as ticks).
125 //
126 Map.ValueToEnum(DateTime.Now, typeof(Enum3));
127 }
128 #endregion
129
130 #region ObjectToObject
131
132 public class SourceObject
133 {
134 public int Field1 = 10;
135 public string Field2 = "20";
136 public double Field3 = 30.0;
137 }
138
139 public class Object1
140 {
141 public int Field1;
142 public int Field2;
143 public int Field3;
144 }
145
146 [Test]
147 public void ObjectToObjectOO()
148 {
149 SourceObject so = new SourceObject();
150 Object1 o = new Object1();
151
152 Map.ObjectToObject(so, o);
153
154 Assert.AreEqual(10, o.Field1);
155 Assert.AreEqual(20, o.Field2);
156 Assert.AreEqual(30, o.Field3);
157 }
158
159 [Test]
160 public void ObjectToObjectOT()
161 {
162 SourceObject so = new SourceObject();
163 Object1 o = (Object1)Map.ObjectToObject(so, typeof(Object1));
164
165 Assert.AreEqual(10, o.Field1);
166 Assert.AreEqual(20, o.Field2);
167 Assert.AreEqual(30, o.Field3);
168 }
169
170 [Test]
171 public void ObjectToObjectTO()
172 {
173 SourceObject so = new SourceObject();
174 Object1 o = Map.ObjectToObject<Object1>(so);
175
176 Assert.AreEqual(10, o.Field1);
177 Assert.AreEqual(20, o.Field2);
178 Assert.AreEqual(30, o.Field3);
179 }
180
181 public class DefaultNullType
182 {
183 [NullValue(-1)]
184 public int NullableInt;
185 }
186
187 #endregion
188
189 #region DataRowToObject
190
191 [Test]
192 public void DataRowToObjectD()
193 {
194 DataTable table = new DataTable();
195
196 table.Columns.Add("NullableInt", typeof(int));
197
198 table.Rows.Add(new object[] { DBNull.Value });
199 table.Rows.Add(new object[] { 1 });
200 table.AcceptChanges();
201
202 DefaultNullType dn = (DefaultNullType)Map.DataRowToObject(table.Rows[0], typeof(DefaultNullType));
203
204 Assert.AreEqual(-1, dn.NullableInt);
205
206 Map.DataRowToObject(table.Rows[1], DataRowVersion.Current, dn);
207
208 Assert.AreEqual(1, dn.NullableInt);
209 }
210
211 #endregion
212
213 #region ObjectToDictionary
214
215 [Test]
216 public void ObjectToDictionary()
217 {
218 SourceObject so = new SourceObject();
219 Hashtable ht = new Hashtable();
220
221 Map.ObjectToDictionary(so, ht);
222
223 Assert.AreEqual(10, ht["Field1"]);
224 Assert.AreEqual("20", ht["Field2"]);
225 Assert.AreEqual(30, ht["Field3"]);
226 }
227
228 #endregion
229
230 #region DictionaryToObject
231
232 [Test]
233 public void DictionaryToObject()
234 {
235 var so = new SourceObject();
236 var ht = Map.ObjectToDictionary(so);
237 var o1 = (Object1)Map.DictionaryToObject(ht, typeof(Object1));
238
239 Assert.AreEqual(10, o1.Field1);
240 Assert.AreEqual(20, o1.Field2);
241 Assert.AreEqual(30, o1.Field3);
242 }
243
244 #endregion
245
246 #region DataRowToDictionary
247
248 [Test]
249 public void DataRowToDictionary()
250 {
251 DataTable table = GetDataTable();
252 Hashtable hash = Map.DataRowToDictionary(table.Rows[0]);
253
254 Assert.AreEqual(table.Rows[0]["ID"], hash["ID"]);
255 Assert.AreEqual(table.Rows[0]["Name"], hash["Name"]);
256 Assert.AreEqual(table.Rows[0]["Date"], hash["Date"]);
257 }
258
259 #endregion
260
261 #region DictionaryToDataRow
262
263 [Test]
264 public void DictionaryToDataRow()
265 {
266 DataTable table1 = GetDataTable();
267 Hashtable hash = Map.DataRowToDictionary(table1.Rows[0]);
268 DataTable table2 = new DataTable();
269
270 Map.DictionaryToDataRow(hash, table2);
271
272 Assert.AreEqual(table1.Rows[0]["ID"], table2.Rows[0]["ID"]);
273 Assert.AreEqual(table1.Rows[0]["Name"], table2.Rows[0]["Name"]);
274 Assert.AreEqual(table1.Rows[0]["Date"], table2.Rows[0]["Date"]);
275 }
276
277 #endregion
278
279 #region SqlTypes
280
281 public class SqlTypeTypes
282 {
283 public class SourceObject
284 {
285 public string s1 = "123";
286 public SqlString s2 = "1234";
287 public int i1 = 123;
288 public SqlInt32 i2 = 1234;
289
290 public DateTime d1 = DateTime.Now;
291 public SqlDateTime d2 = DateTime.Now;
292 }
293
294 public class Object1
295 {
296 public SqlString s1;
297 public string s2;
298 public SqlInt32 i1;
299 public int i2;
300
301 public SqlDateTime d1;
302 public DateTime d2;
303 }
304 }
305
306 [Test]
307 public void SqlTypes()
308 {
309 SqlTypeTypes.SourceObject so = new SqlTypeTypes.SourceObject();
310 SqlTypeTypes.Object1 o = (SqlTypeTypes.Object1)Map.ObjectToObject(so, typeof(SqlTypeTypes.Object1));
311
312 Console.WriteLine(o.s1); Assert.AreEqual("123", o.s1.Value);
313 Console.WriteLine(o.s2); Assert.AreEqual("1234", o.s2);
314
315 Console.WriteLine(o.i1); Assert.IsTrue(o.i1.Value == 123);
316 Console.WriteLine(o.i2); Assert.IsTrue(o.i2 == 1234);
317
318 Console.WriteLine("{0} - {1}", so.d2, o.d2); Assert.AreEqual(o.d2, so.d2.Value);
319 //Console.WriteLine("{0} - {1}", s.d1, d.d1); Assert.IsTrue(d.d1.Value == s.d1);
320 }
321
322 #endregion
323
324 #region Arrays
325
326 public class ArrayTypes
327 {
328 public class SourceObject
329 {
330 public int[,] DimArray = new int[2, 2] { {1,2}, {3,4} };
331 public string[] StrArray = new string[] {"5","4","3","2","1"};
332 public int[] IntArray = new int[] {1,2,3,4,5};
333 public Enum1[] EnmArray = new Enum1[] {Enum1.Value1,Enum1.Value2,Enum1.Value3};
334
335 public byte[][,][][,] ComplexArray = InitComplexArray();
336 public static byte[][,][][,] InitComplexArray()
337 {
338 byte[][,][][,] ret = new byte[1][,][][,];
339 ret[0] = new byte[1,1][][,];
340 ret[0][0,0] = new byte[1][,];
341 ret[0][0,0][0] = new byte[,] { {1,2}, {3,4} };
342
343 return ret;
344 }
345 }
346
347 public class DestObject
348 {
349 public float[,] DimArray;
350 public string[] StrArray;
351 public string[] IntArray;
352 public string[] EnmArray;
353 public sbyte[][,][][,] ComplexArray;
354 }
355
356 public class IncompatibleObject
357 {
358 public int[][] DimArray;
359 }
360 }
361
362 [Test]
363 public void ArrayTypesTest()
364 {
365 ArrayTypes.SourceObject so = new ArrayTypes.SourceObject();
366 ArrayTypes.DestObject o = (ArrayTypes.DestObject)Map.ObjectToObject(so, typeof(ArrayTypes.DestObject));
367
368 Console.WriteLine(o.DimArray); Assert.AreEqual(so.DimArray[0,0], (int)o.DimArray[0,0]);
369 Console.WriteLine(o.StrArray); Assert.AreEqual(so.StrArray, o.StrArray);
370 Console.WriteLine(o.IntArray); Assert.AreEqual(so.IntArray[0].ToString(), o.IntArray[0]);
371
372 Console.WriteLine(o.ComplexArray); Assert.IsTrue(o.ComplexArray[0][0,0][0][1,1] == 4);
373 }
374
375 [Test, ExpectedException(typeof(InvalidCastException))]
376 public void IncompatibleArrayTypesTest()
377 {
378 ArrayTypes.SourceObject so = new ArrayTypes.SourceObject();
379 Map.ObjectToObject(so, typeof(ArrayTypes.IncompatibleObject));
380 }
381
382 #endregion
383
384 #region SourceListToDestList
385
386 [Test]
387 public void ListToList()
388 {
389 DataTable table = GetDataTable();
390 ArrayList list1 = Map.DataTableToList(table, typeof(TestObject));
391 ArrayList list2 = new ArrayList();
392
393 Map.ListToList(list1, list2, typeof(TestObject));
394
395 CompareLists(table, list2);
396 }
397
398 [Test]
399 public void TableToList()
400 {
401 DataTable table = GetDataTable();
402 ArrayList list = Map.DataTableToList(table, typeof(TestObject));
403
404 CompareLists(table, list);
405 }
406
407 [Test]
408 public void ListToTable1()
409 {
410 DataTable table1 = GetDataTable();
411 ArrayList list = Map.DataTableToList(table1, typeof(TestObject));
412 DataTable table2 = Map.ListToDataTable(list);
413
414 table2.AcceptChanges();
415
416 CompareLists(table1, table2);
417 }
418
419 [Test]
420 public void ListToTable2()
421 {
422 DataTable table1 = GetDataTable();
423 ArrayList list = Map.DataTableToList(table1, typeof(TestObject));
424 DataTable table2 = table1.Clone();
425
426 Map.ListToDataTable(list, table2);
427
428 table2.AcceptChanges();
429
430 CompareLists(table1, table2);
431 }
432
433 [Test]
434 public void TableToTable1()
435 {
436 DataTable table1 = GetDataTable();
437 DataTable table2 = Map.DataTableToDataTable(table1);
438
439 table2.AcceptChanges();
440
441 CompareLists(table1, table2);
442 }
443
444 [Test]
445 public void TableToTable2()
446 {
447 DataTable table1 = GetDataTable();
448 DataTable table2 = new DataTable();
449
450 Map.DataTableToDataTable(table1, table2);
451
452 table2.AcceptChanges();
453
454 CompareLists(table1, table2);
455 }
456
457 [Test]
458 public void TableToDictionary()
459 {
460 DataTable table = GetDataTable();
461 IDictionary dic = Map.DataTableToDictionary(table, new SortedList(), "ID", typeof(TestObject));
462
463 CompareLists(table, Map.ListToList(dic.Values, typeof(TestObject)));
464 }
465
466 [Test]
467 public void ListToDictionary()
468 {
469 DataTable table = GetDataTable();
470 ArrayList list = Map.DataTableToList (table, typeof(TestObject));
471 IDictionary dic = Map.ListToDictionary(list, new SortedList(), "ID", typeof(TestObject));
472
473 CompareLists(table, Map.ListToList(dic.Values, typeof(TestObject)));
474 }
475
476 [Test]
477 public void DictionaryToDictionary()
478 {
479 DataTable table = GetDataTable();
480 ArrayList list = Map.DataTableToList (table, typeof(TestObject));
481 IDictionary dic1 = Map.ListToDictionary (list, new SortedList(), "ID", typeof(TestObject));
482 IDictionary dic2 = Map.DictionaryToDictionary(dic1, new SortedList(), "@ID", typeof(TestObject));
483
484 CompareLists(table, Map.ListToList(dic2.Values, typeof(TestObject)));
485 }
486
487 #endregion
488
489 #region ObjectToDataRow
490
491 public class DataRowTestType
492 {
493 public Int32 Int32Column = 12345;
494 public String StringColumn = "string";
495 public Byte[] ByteArrayColumn = new Byte[]{1,2,3,4,5};
496 //public Byte[] ByteArrayColumn2 = null;
497 }
498
499 [Test]
500 public void ObjectToDataRowTest()
501 {
502 DataTable table = new DataTable();
503 DataRowTestType obj = new DataRowTestType();
504
505 Map.ObjectToDataRow(obj, table);
506
507 Assert.IsNotEmpty(table.Rows);
508 DataRow dr = table.Rows[0];
509
510 Assert.AreEqual(table.Columns["Int32Column"] .DataType, typeof(Int32));
511 Assert.AreEqual(table.Columns["StringColumn"] .DataType, typeof(String));
512 Assert.AreEqual(table.Columns["ByteArrayColumn"] .DataType, typeof(Byte[]));
513 //Assert.AreEqual(table.Columns["ByteArrayColumn2"].DataType, typeof(Byte[]));
514
515 Assert.AreEqual(obj.Int32Column, dr["Int32Column"]);
516 Assert.AreEqual(obj.StringColumn, dr["StringColumn"]);
517 Assert.AreEqual(obj.ByteArrayColumn, dr["ByteArrayColumn"]);
518 //Assert.AreEqual(obj.ByteArrayColumn2, dr["ByteArrayColumn2"]);
519 }
520
521 #endregion
522
523 class ObjectStr1
524 {
525 public string Field;
526 }
527
528 class ObjectDateTime1
529 {
530 public DateTime Field = DateTime.Now;
531 }
532
533 [Test]
534 public void TestConverter()
535 {
536 var prev = Convert<DateTime,string>.From;
537
538 Convert<DateTime,string>.From = str =>
539 DateTime.ParseExact(str, new[] { "yyyymmdd" }, CultureInfo.InvariantCulture, DateTimeStyles.None);
540
541 var map = Map.GetObjectMapper<List<ObjectStr1>,List<ObjectDateTime1>>();
542 var obj = map(new List<ObjectStr1> { new ObjectStr1 { Field = "20110102" } });
543
544 Assert.That(obj.Count, Is.EqualTo(1));
545 Assert.That(obj[0].Field.Year, Is.EqualTo(2011));
546
547 Convert<DateTime,string>.From = prev;
548 }
549
550 public abstract class Test
551 {
552 public abstract int Id { get; set; }
553 }
554
555 [Test]
556 public void AccessorTest()
557 {
558 var test = TypeAccessor<Test>.CreateInstance();
559 var mapper = Map.GetObjectMapper<Test,Test>();
560 var testCopy = mapper(test);
561 }
562 }
563 }