annotate UnitTests/CS/Reflection/TypeHelperTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
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 using System.Collections.Generic;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using System.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 using BLToolkit.EditableObjects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 namespace Reflection
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class TypeHelperTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public class Attribute1 : Attribute {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 public class Attribute2 : Attribute {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 public class Attribute3 : Attribute {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public class Attribute4 : Attribute {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public class Attribute5 : Attribute2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public Attribute5(int n)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 _n = n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 int _n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public override string ToString()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 return base.ToString() + ":" + _n;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 [Attribute1]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 [Attribute5(2)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public interface IBase1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 void Method1();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 [Attribute5(1)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public interface IBase2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 void Method2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 [Attribute2]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 [Attribute5(0)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 public class Base : IBase1, IBase2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 public void Method1() {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 public void Method2() {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 [Attribute3]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 public interface IObject1 : IBase1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 [Attribute4]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 public interface IObject2 : IBase1, IBase2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 [Attribute5(2)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public class TestObject : Base, IObject2, IObject1, IBase2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 public new void Method2() {}
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public struct TestStruct<T,V>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 public T _t;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public V _v;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 public class TestObject<T> : TestObject
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 public T Method2(T value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 public V Method2<V>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 return default(V);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 public V Method3<V>(V value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 where V : IConvertible, IFormattable, new()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 return value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 public V Method3<V>(Nullable<V> value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 where V : struct, IFormattable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 return value.Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 public V Method3<V, Q>(TestStruct<Nullable<V>, Q> value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 where V : struct
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 where Q : IFormattable
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 return default(V);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 public V Method4<V, Q>(TestStruct<V, Q> value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 return default(V);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 public void GetAttributes()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 object[] attrs = new TypeHelper(typeof(TestObject)).GetAttributes();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 for (int i = 0; i < attrs.Length; i++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 object attr = attrs[i];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 Console.WriteLine("{0}: {1} {2}", i, attr, attr.GetHashCode());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 Assert.AreEqual(typeof(Attribute5), attrs[0].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 Assert.AreEqual(typeof(Attribute5), attrs[1].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 Assert.AreEqual(typeof(Attribute4), attrs[2].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 Assert.AreEqual(typeof(Attribute3), attrs[3].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 Assert.IsTrue(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 typeof(Attribute2) == attrs[4].GetType() && typeof(Attribute5) == attrs[5].GetType() ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 typeof(Attribute2) == attrs[5].GetType() && typeof(Attribute5) == attrs[4].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 Assert.IsTrue(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 typeof(Attribute1) == attrs[6].GetType() && typeof(Attribute5) == attrs[7].GetType() ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 typeof(Attribute1) == attrs[7].GetType() && typeof(Attribute5) == attrs[6].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 Assert.AreEqual(typeof(Attribute5), attrs[8].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 public void GetAttributes_ByType()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 object[] attrs = new TypeHelper(typeof(TestObject)).GetAttributes(typeof(Attribute2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 foreach (object attr in attrs)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 Console.WriteLine("{0} {1}", attr, attr.GetHashCode());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 Assert.AreEqual(typeof(Attribute5), attrs[0].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152 Assert.AreEqual(typeof(Attribute5), attrs[1].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 Assert.IsTrue(
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 typeof(Attribute2) == attrs[2].GetType() && typeof(Attribute5) == attrs[3].GetType() ||
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 typeof(Attribute2) == attrs[3].GetType() && typeof(Attribute5) == attrs[2].GetType());
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
158
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
159 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
160 public void UnderlyingTypeTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
161 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
162 Type type;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
163
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
164 type = TypeHelper.GetUnderlyingType(typeof(int?));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
165 Assert.AreEqual(typeof(int), type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
166
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
167 type = TypeHelper.GetUnderlyingType(typeof(DayOfWeek?));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
168 Assert.AreEqual(typeof(int), type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
169
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
170 type = TypeHelper.GetUnderlyingType(typeof(IComparable<int>));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
171 Assert.AreEqual(typeof(IComparable<int>), type);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
172
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
173 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
174
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
175 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
176 public void GenericsTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
177 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
178 Type testType = typeof (TestObject<int>);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
179 TypeHelper helper = new TypeHelper(testType);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
180
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
181 Assert.IsNotNull(helper.GetMethod(true, "Method2")); // Generic
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
182 Assert.IsNotNull(helper.GetMethod(false, "Method2")); // Non-generic
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
183
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
184 // TestObject<T>.Method2<V>() is a generic method
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
185 Assert.IsNotNull(helper.GetMethod(true, "Method2", Type.EmptyTypes));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
186 // TestObject.Method2() is not
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
187 Assert.IsNotNull(helper.GetMethod(false, "Method2", Type.EmptyTypes));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
188 // TestObject<T>.Method2(T value) is neither!
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
189 Assert.IsNotNull(helper.GetMethod(false, "Method2", testType.GetGenericArguments()[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
190 // typeof(int) is same as testType.GetGenericArguments()[0]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
191 Assert.IsNotNull(helper.GetMethod(false, "Method2", typeof(int)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
192 // Get TestObject<T>.Method3<V>() with constraint type hack
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
193 Assert.IsNotNull(helper.GetMethod(true, "Method3", typeof(int)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
194 // Get TestObject<T>.Method3<V>() with constraint violation will fail.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
195 Assert.IsNull (helper.GetMethod(true, "Method3", typeof(object)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
196 // Get TestObject<T>.Method3<V>() with no types will fail
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
197 Assert.IsNull (helper.GetMethod(true, "Method3", Type.EmptyTypes));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
198 // Nullable<> violates IFormattable constraint
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
199 Assert.IsNull (helper.GetMethod(true, "Method3", typeof(Nullable<>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
200 // Method4 does not define a costraint
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
201 Assert.IsNotNull(helper.GetMethod(true, "Method4", typeof(TestStruct<,>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
202
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
203 Assert.IsNotNull(helper.GetMethod(true, "Method3", typeof(Nullable<int>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
204 Assert.IsNotNull(helper.GetMethod(true, "Method3", typeof(TestStruct<Nullable<int>, int>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
205 Assert.IsNull (helper.GetMethod(true, "Method3", typeof(TestStruct<Nullable<int>, object>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
206 Assert.IsNull (helper.GetMethod(true, "Method3", typeof(TestStruct<int, int>)));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
207
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
208 Assert.AreEqual (15, helper.GetMethods( ).Length); // 15 total
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
209 Assert.AreEqual (5, helper.GetMethods(true ).Length); // 5 generic
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
210 Assert.AreEqual (10, helper.GetMethods(false).Length); // 10 non-generics
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
211
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
212 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
213
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
214 [Test, ExpectedException(typeof(AmbiguousMatchException))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
215 public void GenericsAmbiguousMatchTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
216 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
217 // There are more then one Method2 in the TestObject<T> class
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
218 new TypeHelper(typeof (TestObject<int>)).GetMethod("Method2");
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
219 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
220
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
221 public class MyArrayList : ArrayList
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
222 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
223 public new TestObject this[int i]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
224 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
225 get { return (TestObject)base[i]; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
226 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
227 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
228
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
229 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
230 public void GetListItemType()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
231 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
232 Assert.AreEqual(typeof(TestObject), TypeHelper.GetListItemType(new EditableArrayList(typeof(TestObject))));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
233 Assert.AreEqual(typeof(TestObject), TypeHelper.GetListItemType(new TestObject[0]));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
234 Assert.AreEqual(typeof(TestObject), TypeHelper.GetListItemType(new MyArrayList()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
235 Assert.AreEqual(typeof(TestObject), TypeHelper.GetListItemType(new List<TestObject>()));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
236 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
237 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
238 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
239