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