annotate UnitTests/CS/TypeBuilder/GetSetValueAttributeTest.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.Reflection;
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 GetSetValueAttributeTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public class Value
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public Value(int value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 IntValue = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 [SetValue, GetValue] public int IntValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 public Value(float value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 FloatValue = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 [SetValue, GetValue] public float FloatValue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30 public Value(string value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 StrValue = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 object _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 [SetValue, GetValue]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 public string StrValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 get { return (string)_value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 set { _value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 public Value(DayOfWeek value)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46 DayValue = value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 [SetValue, GetValue]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 public DayOfWeek DayValue
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 get { return (DayOfWeek)_value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 set { _value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 public abstract class TestObject1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 [InstanceType(typeof(Value), 55)] public abstract int IntValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 [InstanceType(typeof(Value), (float)16)] public abstract float FloatValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61 [InstanceType(typeof(Value), "test1")] public abstract string StrValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 [InstanceType(typeof(Value), DayOfWeek.Saturday)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 public abstract DayOfWeek DayValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 Assert.AreEqual(55, o.IntValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 o.IntValue += 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 Assert.AreEqual(56, o.IntValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 Assert.AreEqual(16, o.FloatValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 o.FloatValue += 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 Assert.AreEqual(17, o.FloatValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 Assert.AreEqual("test1", o.StrValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 o.StrValue = "test2";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 Assert.AreEqual("test2", o.StrValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 Assert.AreEqual(DayOfWeek.Saturday, o.DayValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 o.DayValue = DayOfWeek.Thursday;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86 Assert.AreEqual(DayOfWeek.Thursday, o.DayValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 public struct ValueBox<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91 public ValueBox(InitContext ctx)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 _value = (T)ctx.MemberParameters[0];
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 private T _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98 [GetValue] public T GetValue() { return _value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 [SetValue] public void SetValue(T value) { _value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 public struct ValueBox2<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 private T _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 [GetValue] public T GetValue([Parent] TestObject2 parent) { return _value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107 [SetValue] public void SetValue(T value, [Parent] object parent) { _value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 public struct ValueBox3<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 private T _value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 [GetValue] public T GetValue([Parent] object parent, [PropertyInfo] PropertyInfo pi) { return _value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 [SetValue] public void SetValue(T value, [PropertyInfo] PropertyInfo pi) { _value = value; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 public abstract class TestObject2
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 [InstanceType(typeof(ValueBox<int>), 27)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121 public abstract int IntValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 [InstanceType(typeof(ValueBox2<float>))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public abstract float FloatValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 [InstanceType(typeof(ValueBox3<string>))]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 public abstract string StrValue { get; set; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 public void MethodTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 TestObject2 o = TypeAccessor.CreateInstance<TestObject2>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 Assert.AreEqual(27, o.IntValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 o.IntValue += 8;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 Assert.AreEqual(35, o.IntValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137 o.FloatValue = 0.1f;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 o.FloatValue *= 2.0f;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 Assert.AreEqual(0.2f, o.FloatValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 o.StrValue = "foo";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142 o.StrValue += "Bar";
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 Assert.AreEqual("fooBar", o.StrValue);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
144 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
145
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
146 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
147 }