annotate UnitTests/CS/Aspects/CacheAspectTest.cs @ 9:1e85f66cf767 default tip

update bltoolkit
author nickolay
date Thu, 05 Apr 2018 20:53:26 +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 using BLToolkit.Aspects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4 using BLToolkit.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 namespace Aspects
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
9 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
10 [TestFixture]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
11 public class CacheAspectTest
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 [Log]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 public abstract class TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16 public static int Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 [Cache(500, false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 public virtual int Test(int i1, int i2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 return Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 [InstanceCache]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25 public virtual int InstanceTest(int i1, int i2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 return Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 TestClass t = TypeAccessor.CreateInstance<TestClass>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36 DateTime begin = DateTime.Now;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 for (TestClass.Value = 777; t.Test(2, 2) == 777; TestClass.Value++)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 continue;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41 Assert.IsTrue((DateTime.Now - begin).TotalMilliseconds >= 500);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 TestClass.Value = 1; Assert.AreEqual(1, t.Test(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 TestClass.Value = 2; Assert.AreEqual(1, t.Test(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 TestClass.Value = 3; Assert.AreEqual(3, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 CacheAspect.ClearCache(typeof(TestClass), "Test", typeof(int), typeof(int));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 TestClass.Value = 4; Assert.AreEqual(4, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 CacheAspect.ClearCache(t.GetType(), "Test", typeof(int), typeof(int));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 TestClass.Value = 5; Assert.AreEqual(5, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 CacheAspect.ClearCache();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54 TestClass.Value = 6; Assert.AreEqual(6, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 public void InstanceTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 TestClass t = TypeAccessor.CreateInstance<TestClass>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 TestClass.Value = 1; Assert.AreEqual(1, t.InstanceTest(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63 TestClass.Value = 2; Assert.AreEqual(1, t.InstanceTest(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 TestClass.Value = 3; Assert.AreEqual(3, t.InstanceTest(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65 TestClass.Value = 4;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67 t = TypeAccessor.CreateInstance<TestClass>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 Assert.AreNotEqual(1, t.InstanceTest(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 Assert.AreNotEqual(3, t.InstanceTest(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73 public class CustomCacheAspect : CacheAspect
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75 private static IDictionary _methodcache = new Hashtable();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 public static IDictionary MethodCache
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 get { return _methodcache; }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 protected override IDictionary CreateCache()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 return MethodCache;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
84 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
85 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
86
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
87 [Log]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
88 public abstract class CustomTestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
89 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
90 public static int Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
91
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
92 [Cache(typeof(CustomCacheAspect), MaxCacheTime = 500)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
93 public virtual int Test(int i1, int i2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
94 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
95 return Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
96 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
97 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
98
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
99 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
100 public void CustomCacheAspectTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
101 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
102 CustomTestClass t = (CustomTestClass)TypeAccessor.CreateInstance(typeof(CustomTestClass));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
103
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
104 CustomTestClass.Value = 1; Assert.AreEqual(1, t.Test(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
105 CustomTestClass.Value = 2; Assert.AreEqual(1, t.Test(1, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
106 CustomTestClass.Value = 3; Assert.AreEqual(3, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
107
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
108 CustomCacheAspect.MethodCache.Clear();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
109 CustomTestClass.Value = 4; Assert.AreEqual(4, t.Test(2, 1));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
110 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
111
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
112 public abstract class GenericClass<T>
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
113 where T : new()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
114 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
115 [Cache]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
116 public virtual T GetT(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
117 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
118 return new T();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
119 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
120 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
121
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
122 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
123 public void GenericClassTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
124 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
125 TypeAccessor<GenericClass<int>>. CreateInstance().GetT(0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
126 TypeAccessor<GenericClass<DateTime>>.CreateInstance().GetT(0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
127 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
128
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
129 public abstract class TestClass1
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
130 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
131 [Cache]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
132 public virtual T Get<T>()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
133 where T : new()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
134 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
135 return new T();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
136 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
137
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
138 [Cache]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
139 public virtual T Get<T>(int i)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
140 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
141 if (typeof(T) == typeof(int)) return (T)(object)10;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
142
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
143 return (T)(object)new DateTime();
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 //[Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
148 public void GenericMethodTest()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
149 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
150 var i = TypeAccessor<TestClass1>.CreateInstance().Get<int> ();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
151 var d = TypeAccessor<TestClass1>.CreateInstance().Get<DateTime>();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
152
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
153 i = TypeAccessor<TestClass1>.CreateInstance().Get<int> (0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
154 d = TypeAccessor<TestClass1>.CreateInstance().Get<DateTime>(0);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
155 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
156 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
157 }