annotate UnitTests/CS/TypeBuilder/LazyInstanceAttributeTest.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.Collections;
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.TypeBuilder;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 namespace TypeBuilder
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 public class LazyInstanceAttributeTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public abstract class AbstractObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public AbstractObject(InitContext init)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 if (init.MemberParameters != null && init.MemberParameters.Length == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 Field = (int)init.MemberParameters[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 Field = 77;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 public int Field;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 public class InnerObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public InnerObject(InitContext init)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 if (init.MemberParameters != null && init.MemberParameters.Length == 1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 Field = (int)init.MemberParameters[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 else
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 Field = 44;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 public int Field;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public class TestField
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 public TestField()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 Value = 10;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 public TestField(int p1, float p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 Value = p1 + (int)p2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 public TestField(TestField p1)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 Value = 77;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public int Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 public abstract class TestObject1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public abstract ArrayList List { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 public abstract string Str { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 public abstract string this[int i] { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 public abstract TestField Field { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public abstract InnerObject InnerObject { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 [LazyInstance]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 public abstract AbstractObject AbstractObject { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 public void NoParamTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 Assert.IsNotNull(o.List);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 Assert.AreEqual("", o.Str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 Assert.AreEqual(10, o.Field.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 Assert.AreEqual(44, o.InnerObject.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 [AttributeUsage(AttributeTargets.Property)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public class TestParameterAttribute : ParameterAttribute
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 public TestParameterAttribute()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 : base(new TestField())
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 public abstract class TestObject2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 [LazyInstance, Parameter(10)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 public abstract ArrayList List { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 [LazyInstance, Parameter("test")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 public abstract string Str { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 [LazyInstance, Parameter(20)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 public abstract string this[int i] { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 [LazyInstance, Parameter(20, 30)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 public abstract TestField Field1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 [LazyInstance, TestParameter]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 public abstract TestField Field2 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 [LazyInstance, Parameter(55)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 public abstract InnerObject InnerObject { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 [LazyInstance, Parameter(88)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 public abstract AbstractObject AbstractObject { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 public void ParamTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 TestObject2 o = (TestObject2)TypeAccessor.CreateInstance(typeof(TestObject2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 Assert.AreEqual(10, o.List.Capacity);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 Assert.AreEqual("test", o.Str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 Assert.AreEqual(50, o.Field1.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 Assert.AreEqual(77, o.Field2.Value);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 Assert.AreEqual(55, o.InnerObject.Field);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 [LazyInstances]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 public abstract class TestObject3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 public abstract string Str1 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 [LazyInstance(false), Parameter("")]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 public abstract string Str2 { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 public void LazyInstancesTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 TestObject3 o = (TestObject3)TypeAccessor.CreateInstance(typeof(TestObject3));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 Assert.AreEqual("", o.Str1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 Assert.AreEqual("", o.Str2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 o.Str1 = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 o.Str2 = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 Assert.AreEqual("", o.Str1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 Assert.AreEqual(null, o.Str2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 [LazyInstances(false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 public abstract class TestObject4 : TestObject3
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166 public void LazyInstancesFalseTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 TestObject4 o = (TestObject4)TypeAccessor.CreateInstance(typeof(TestObject4));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 Assert.AreEqual("", o.Str1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 Assert.AreEqual("", o.Str2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 o.Str1 = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174 o.Str2 = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 Assert.AreEqual(null, o.Str1);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 Assert.AreEqual(null, o.Str2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180 [LazyInstances(typeof(string))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 public abstract class TestObject5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183 public abstract string Str { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 public abstract ArrayList List { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 public void LazyInstancesTypeTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 TestObject5 o = (TestObject5)TypeAccessor.CreateInstance(typeof(TestObject5));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 Assert.IsNotNull(o.Str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Assert.IsNotNull(o.List);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 o.Str = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 o.List = null;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 Assert.IsNotNull(o.Str);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 Assert.AreEqual (null, o.List);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202 }