annotate UnitTests/CS/Data/InnerTypesTest.cs @ 6:11b6da379593

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