comparison UnitTests/CS/Data/InnerTypesTest.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.Data;
3
4 using NUnit.Framework;
5
6 using BLToolkit.Reflection;
7 using BLToolkit.Data;
8 using BLToolkit.Mapping;
9
10 #pragma warning disable 0252
11
12 namespace Data
13 {
14 [TestFixture]
15 public class InnerTypesTest
16 {
17 public class TypeMapper: MemberMapper
18 {
19 public override object GetValue(object o)
20 {
21 var value = (Type)MemberAccessor.GetValue(o);
22 return (null != value && MapMemberInfo.NullValue != value)? value.FullName: null;
23 }
24
25 public override void SetValue(object o, object value)
26 {
27 MemberAccessor.SetValue(o, (null != value)?
28 Type.GetType((string)value, true, true): MapMemberInfo.NullValue);
29 }
30 }
31
32 public class First
33 {
34 public string Name;
35 }
36
37 public abstract class Last
38 {
39 public string Name;
40 public abstract string Suffix { get; set; }
41
42 // Inner type of the inner type
43 //
44 [MapField("FirstName", "Name")]
45 public abstract First First { get; set; }
46
47 // This reference type field will be ignored
48 //
49 public Type Type;
50 }
51
52 [MapField("FirstName", "First.Name")]
53 [MapField("LastName", "Last.Name")]
54 [MapField("LastSuffix", "Last.Suffix")]
55 [MapField("LastFirstName", "Last.First.Name")]
56 public abstract class Person
57 {
58 [MapField("PersonID")]
59 public int ID;
60 public First First = new First();
61 public abstract Last Last { get; set; }
62 public string Name;
63 [MemberMapper(typeof(TypeMapper))]
64 public Type Type;
65 }
66
67 public abstract class Person2
68 {
69 [MapField("PersonID")]
70 public int ID;
71
72 [MapField("FirstName", "Name")]
73 public First First = new First();
74
75 [MapField(Format="Last{0}")]
76 public abstract Last Last { get; set; }
77
78 public string Name;
79 public string Type;
80 }
81
82 [Test]
83 public void MapFieldTest()
84 {
85 var p = (Person)TypeAccessor.CreateInstance(typeof(Person));
86
87 p.ID = 12345;
88 p.First.Name = "Crazy";
89 p.Last.Name = "Frog";
90 p.Last.Suffix = "Jr";
91 p.Last.Type = typeof(DbManager);
92 p.Last.First.Name = "Crazy Frog";
93 p.Name = "Froggy";
94 p.Type = typeof(DbManager);
95
96 var p2 = (Person2)Map.ObjectToObject(p, typeof(Person2));
97
98 Assert.AreEqual(p.ID, p2.ID);
99 Assert.AreEqual(p.First.Name, p2.First.Name);
100 Assert.AreEqual(p.Last.Name, p2.Last.Name);
101 Assert.AreEqual(p.Last.Suffix, p2.Last.Suffix);
102 Assert.AreEqual(p.Last.First.Name, p2.Last.First.Name);
103 Assert.AreEqual(p.Name, p2.Name);
104 Assert.AreEqual(p.Type.FullName, p2.Type);
105
106 // The 'Last.Type' field should be ignored by mapping process.
107 //
108 Assert.IsNull(p2.Last.Type);
109 }
110
111 [Test]
112 public void CreateParametersTest()
113 {
114 IDbDataParameter[] parameters;
115 var p = (Person)TypeAccessor.CreateInstance(typeof(Person));
116 p.ID = 12345;
117 p.First.Name = "Crazy";
118 p.Last.Name = "Frog";
119 p.Name = "Froggy";
120 p.Type = typeof(DbManager);
121
122 using (var db = new DbManager())
123 {
124 parameters = db.CreateParameters(p);
125 }
126
127 Assert.IsNotNull(parameters);
128 Assert.AreEqual(7, parameters.Length);
129
130 foreach (var parameter in parameters)
131 Console.WriteLine("{0}: {1}", parameter.ParameterName, parameter.Value);
132 }
133
134 public abstract class Template2
135 {
136 public abstract int ID { get; set; }
137 public abstract string DisplayName { get; set; }
138 }
139
140 [MapField("TPL_ID", "tpl.ID")]
141 [MapField("TPL_DisplayName", "tpl.DisplayName")]
142 public abstract class Template1
143 {
144 public abstract int ID { get; set; }
145 public abstract string DisplayName { get; set; }
146
147 public abstract Template2 tpl { get; set; }
148 }
149
150 [Test]
151 public void TemplateTest()
152 {
153 using (var db = new DbManager())
154 {
155 var cmd = @"
156 SELECT
157 1 as ID,
158 '2' as DisplayName,
159 3 as TPL_ID,
160 '4' as TPL_DisplayName";
161 #if ORACLE || FIREBIRD
162 cmd += " FROM dual";
163 #endif
164 var list = db
165 .SetCommand(cmd)
166 .ExecuteList(typeof(Template1));
167
168 Assert.IsNotNull(list);
169 }
170 }
171 }
172 }