comparison UnitTests/CS/TypeBuilder/InstanceTypeAttributeTest.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
4 using NUnit.Framework;
5
6 using BLToolkit.Reflection;
7 using BLToolkit.TypeBuilder;
8
9 namespace TypeBuilder
10 {
11 [TestFixture]
12 public class InstanceTypeAttributeTest
13 {
14 public class TestClass
15 {
16 public class IntFieldInstance
17 {
18 public int Value;
19 }
20
21 public class IntPropertyInstance
22 {
23 private int _value;
24 public int Value
25 {
26 get { return _value * 2; }
27 set { _value = value; }
28 }
29 }
30
31 public class ObjFieldInstance
32 {
33 public object Value;
34 }
35
36 public class ObjPropertyInstance
37 {
38 private object _value;
39 public object Value
40 {
41 get { return _value is int? (int)_value * 3: _value; }
42 set { _value = value; }
43 }
44 }
45
46 public abstract class TestObject1
47 {
48 [InstanceType(typeof(IntFieldInstance))] public abstract int IntField { get; set; }
49 [InstanceType(typeof(IntPropertyInstance))] public abstract int IntProp { get; set; }
50 [InstanceType(typeof(ObjFieldInstance))] public abstract int ObjField { get; set; }
51 [InstanceType(typeof(ObjPropertyInstance))] public abstract int ObjProp { get; set; }
52 [InstanceType(typeof(IntFieldInstance))] public abstract DayOfWeek DowField { get; set; }
53 [InstanceType(typeof(IntPropertyInstance))] public abstract DayOfWeek DowProp { get; set; }
54 [InstanceType(typeof(ObjFieldInstance))] public abstract DateTime DateField { get; set; }
55 [InstanceType(typeof(ObjPropertyInstance))] public abstract DateTime DateProp { get; set; }
56 [InstanceType(typeof(ObjFieldInstance))] public abstract ArrayList ArrField { get; set; }
57 [InstanceType(typeof(ObjPropertyInstance))] public abstract ArrayList ArrProp { get; set; }
58 }
59
60 public static void Test()
61 {
62 TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
63
64 o.IntField = 10;
65 o.IntProp = 11;
66 o.ObjField = 12;
67 o.ObjProp = 13;
68
69 Assert.AreEqual(10, o.IntField);
70 Assert.AreEqual(22, o.IntProp);
71 Assert.AreEqual(12, o.ObjField);
72 Assert.AreEqual(39, o.ObjProp);
73
74 DateTime testDate = new DateTime(2000, 1, 1);
75
76 o.DowField = DayOfWeek.Monday;
77 o.DowProp = DayOfWeek.Sunday;
78 o.DateField = testDate;
79 o.DateProp = testDate;
80
81 Assert.AreEqual(DayOfWeek.Monday, o.DowField);
82 Assert.AreEqual(DayOfWeek.Sunday, o.DowProp);
83 Assert.AreEqual(testDate, o.DateField);
84 Assert.AreEqual(testDate, o.DateProp);
85
86 o.ArrField = new ArrayList(17);
87 o.ArrProp = new ArrayList(21);
88
89 Assert.AreEqual(17, o.ArrField.Capacity);
90 Assert.AreEqual(21, o.ArrProp. Capacity);
91 }
92 }
93
94 [Test]
95 public void InstanceClassTest()
96 {
97 TestClass.Test();
98 }
99
100 public class TestStruct
101 {
102 public struct IntFieldInstance
103 {
104 public int Value;
105 }
106
107 public struct IntPropertyInstance
108 {
109 private int _value;
110 public int Value
111 {
112 get { return _value * 2; }
113 set { _value = value; }
114 }
115 }
116
117 public struct ObjFieldInstance
118 {
119 public object Value;
120 }
121
122 public struct ObjPropertyInstance
123 {
124 private object _value;
125 public object Value
126 {
127 get { return _value is int? (int)_value * 3: _value; }
128 set { _value = value; }
129 }
130 }
131
132 public abstract class TestObject1
133 {
134 [InstanceType(typeof(IntFieldInstance))] public abstract int IntField { get; set; }
135 [InstanceType(typeof(IntPropertyInstance))] public abstract int IntProp { get; set; }
136 [InstanceType(typeof(ObjFieldInstance))] public abstract int ObjField { get; set; }
137 [InstanceType(typeof(ObjPropertyInstance))] public abstract int ObjProp { get; set; }
138 [InstanceType(typeof(IntFieldInstance))] public abstract DayOfWeek DowField { get; set; }
139 [InstanceType(typeof(IntPropertyInstance))] public abstract DayOfWeek DowProp { get; set; }
140 [InstanceType(typeof(ObjFieldInstance))] public abstract DateTime DateField { get; set; }
141 [InstanceType(typeof(ObjPropertyInstance))] public abstract DateTime DateProp { get; set; }
142 [InstanceType(typeof(ObjFieldInstance))] public abstract ArrayList ArrField { get; set; }
143 [InstanceType(typeof(ObjPropertyInstance))] public abstract ArrayList ArrProp { get; set; }
144 }
145
146 public static void Test()
147 {
148 TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
149
150 o.IntField = 10;
151 o.IntProp = 11;
152 o.ObjField = 12;
153 o.ObjProp = 13;
154
155 Assert.AreEqual(10, o.IntField);
156 Assert.AreEqual(22, o.IntProp);
157 Assert.AreEqual(12, o.ObjField);
158 Assert.AreEqual(39, o.ObjProp);
159
160 DateTime testDate = new DateTime(2000, 1, 1);
161
162 o.DowField = DayOfWeek.Monday;
163 o.DowProp = DayOfWeek.Sunday;
164 o.DateField = testDate;
165 o.DateProp = testDate;
166
167 Assert.AreEqual(DayOfWeek.Monday, o.DowField);
168 Assert.AreEqual(DayOfWeek.Sunday, o.DowProp);
169 Assert.AreEqual(testDate, o.DateField);
170 Assert.AreEqual(testDate, o.DateProp);
171
172 o.ArrField = new ArrayList(17);
173 o.ArrProp = new ArrayList(21);
174
175 Assert.AreEqual(17, o.ArrField.Capacity);
176 Assert.AreEqual(21, o.ArrProp. Capacity);
177 }
178 }
179
180 [Test]
181 public void InstanceStructTest()
182 {
183 TestStruct.Test();
184 }
185
186 public struct IntParamInstance
187 {
188 public IntParamInstance(int value)
189 {
190 Value = value;
191 }
192
193 public int Value;
194 }
195
196 public abstract class TestObject1
197 {
198 [InstanceType(typeof(IntParamInstance), 58)] public abstract int IntField { get; set; }
199 }
200
201 [Test]
202 public void ParamTest()
203 {
204 TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
205
206 Assert.AreEqual(58, o.IntField);
207 }
208
209 public class Instance2
210 {
211 public Instance2(int n)
212 {
213 _n = n;
214 }
215
216 private int _n;
217
218 private int _value;
219 public int Value
220 {
221 get { return _value * _n; }
222 set { _value = value; }
223 }
224 }
225
226 [GlobalInstanceType(typeof(int), typeof(Instance2), 3)]
227 public abstract class Object2
228 {
229 [InstanceType(typeof(Instance2), 5)]
230 public abstract int Int1 { get; set; }
231 public abstract int Int2 { get; set; }
232 public abstract short Short1 { get; set; }
233 }
234
235 [Test]
236 public void GlobalParamTest()
237 {
238 Object2 o = (Object2)TypeAccessor.CreateInstance(typeof(Object2));
239
240 o.Int1 = 5;
241 o.Int2 = 5;
242 o.Short1 = 10;
243
244 Assert.AreEqual(25, o.Int1);
245 Assert.AreEqual(15, o.Int2);
246 Assert.AreEqual(10, o.Short1);
247 }
248 }
249 }