0
|
1 using NUnit.Framework;
|
|
2
|
|
3 using BLToolkit.Aspects;
|
|
4 using BLToolkit.Reflection;
|
|
5 using BLToolkit.TypeBuilder;
|
|
6
|
|
7 namespace Aspects
|
|
8 {
|
|
9 [TestFixture]
|
|
10 public class ClearCacheAspect
|
|
11 {
|
|
12 public abstract class TestClass
|
|
13 {
|
|
14 int _value;
|
|
15
|
|
16 [Cache]
|
|
17 public virtual int Test1()
|
|
18 {
|
|
19 return _value++;
|
|
20 }
|
|
21
|
|
22 [ClearCache("Test1")]
|
|
23 public abstract void ClearTest1();
|
|
24
|
|
25 [Cache]
|
|
26 public virtual int Test2()
|
|
27 {
|
|
28 return _value++;
|
|
29 }
|
|
30
|
|
31 [Cache]
|
|
32 public virtual int Test2(int i)
|
|
33 {
|
|
34 return _value++;
|
|
35 }
|
|
36
|
|
37 [ClearCache("Test2")]
|
|
38 public abstract void ClearTest2();
|
|
39
|
|
40 [ClearCache("Test2", typeof(int))]
|
|
41 public abstract void ClearTest2a();
|
|
42
|
|
43 [ClearCache("Test2"), ClearCache("Test2", typeof(int))]
|
|
44 public abstract void ClearTest2b();
|
|
45 }
|
|
46
|
|
47 public abstract class TestClass1
|
|
48 {
|
|
49 [ClearCache(typeof(TestClass), "Test2")]
|
|
50 public abstract void ClearTest();
|
|
51
|
|
52 [ClearCache(typeof(TestClass), "Test2", typeof(int))]
|
|
53 public abstract void ClearTest1();
|
|
54
|
|
55 protected abstract int Test();
|
|
56
|
|
57 [ClearCache("Test")]
|
|
58 public abstract void ClearTest3();
|
|
59
|
|
60 [ClearCache(typeof(TestClass))]
|
|
61 public abstract void ClearTest4();
|
|
62
|
|
63 [ClearCache]
|
|
64 public abstract void ClearTest5();
|
|
65 }
|
|
66
|
|
67 [Test]
|
|
68 public void Test1()
|
|
69 {
|
|
70 TestClass tc = TypeFactory.CreateInstance<TestClass>();
|
|
71
|
|
72 int value1 = tc.Test1();
|
|
73 int value2 = tc.Test1();
|
|
74
|
|
75 Assert.AreEqual(value1, value2);
|
|
76
|
|
77 tc.ClearTest1();
|
|
78
|
|
79 Assert.AreNotEqual(value1, tc.Test1());
|
|
80 }
|
|
81
|
|
82 [Test]
|
|
83 public void Test2()
|
|
84 {
|
|
85 TestClass tc = TypeFactory.CreateInstance<TestClass>();
|
|
86
|
|
87 tc.ClearTest2();
|
|
88
|
|
89 int value1 = tc.Test2();
|
|
90 int value2 = tc.Test2();
|
|
91
|
|
92 Assert.AreEqual(value1, value2);
|
|
93
|
|
94 tc.ClearTest2();
|
|
95
|
|
96 Assert.AreNotEqual(value1, tc.Test2());
|
|
97 }
|
|
98
|
|
99 [Test]
|
|
100 public void Test2a()
|
|
101 {
|
|
102 TestClass tc = TypeFactory.CreateInstance<TestClass>();
|
|
103
|
|
104 tc.ClearTest2a();
|
|
105
|
|
106 int value1 = tc.Test2(1);
|
|
107 int value2 = tc.Test2(1);
|
|
108
|
|
109 Assert.AreEqual(value1, value2);
|
|
110
|
|
111 tc.ClearTest2a();
|
|
112
|
|
113 Assert.AreNotEqual(value1, tc.Test2(1));
|
|
114 }
|
|
115
|
|
116 [Test]
|
|
117 public void Test2b()
|
|
118 {
|
|
119 TestClass tc = TypeFactory.CreateInstance<TestClass>();
|
|
120
|
|
121 tc.ClearTest2b();
|
|
122
|
|
123 int value1 = tc.Test2();
|
|
124 int value2 = tc.Test2();
|
|
125 int value3 = tc.Test2(1);
|
|
126 int value4 = tc.Test2(1);
|
|
127
|
|
128 Assert.AreEqual(value1, value2);
|
|
129 Assert.AreEqual(value3, value4);
|
|
130
|
|
131 tc.ClearTest2b();
|
|
132
|
|
133 Assert.AreNotEqual(value1, tc.Test2());
|
|
134 Assert.AreNotEqual(value3, tc.Test2(1));
|
|
135 }
|
|
136
|
|
137 [Test]
|
|
138 public void Test3()
|
|
139 {
|
|
140 TestClass tc1 = TypeAccessor<TestClass>. CreateInstance();
|
|
141 TestClass1 tc2 = TypeAccessor<TestClass1>.CreateInstance();
|
|
142
|
|
143 tc1.ClearTest2b();
|
|
144
|
|
145 int value1 = tc1.Test2();
|
|
146 int value2 = tc1.Test2();
|
|
147 int value3 = tc1.Test2(1);
|
|
148 int value4 = tc1.Test2(1);
|
|
149
|
|
150 Assert.AreEqual(value1, value2);
|
|
151 Assert.AreEqual(value3, value4);
|
|
152
|
|
153 tc2.ClearTest();
|
|
154 tc2.ClearTest1();
|
|
155
|
|
156 Assert.AreNotEqual(value1, tc1.Test2());
|
|
157 Assert.AreNotEqual(value3, tc1.Test2(1));
|
|
158 }
|
|
159
|
|
160 [Test]
|
|
161 public void Test4()
|
|
162 {
|
|
163 TestClass1 tc = TypeAccessor<TestClass1>.CreateInstance();
|
|
164
|
|
165 tc.ClearTest3();
|
|
166 }
|
|
167
|
|
168 [Test]
|
|
169 public void Test5()
|
|
170 {
|
|
171 TestClass tc1 = TypeAccessor<TestClass>. CreateInstance();
|
|
172 TestClass1 tc2 = TypeAccessor<TestClass1>.CreateInstance();
|
|
173
|
|
174 tc1.ClearTest2b();
|
|
175
|
|
176 int value1 = tc1.Test2();
|
|
177 int value2 = tc1.Test2();
|
|
178 int value3 = tc1.Test2(1);
|
|
179 int value4 = tc1.Test2(1);
|
|
180
|
|
181 Assert.AreEqual(value1, value2);
|
|
182 Assert.AreEqual(value3, value4);
|
|
183
|
|
184 tc2.ClearTest();
|
|
185 tc2.ClearTest4();
|
|
186
|
|
187 Assert.AreNotEqual(value1, tc1.Test2());
|
|
188 Assert.AreNotEqual(value3, tc1.Test2(1));
|
|
189 }
|
|
190
|
|
191 [Test]
|
|
192 public void Test6()
|
|
193 {
|
|
194 TestClass1 tc = TypeAccessor<TestClass1>.CreateInstance();
|
|
195
|
|
196 tc.ClearTest5();
|
|
197 }
|
|
198 }
|
|
199 }
|