annotate HowTo/Aspects/ClearCacheAspect.cs @ 4:f757da6161a1

!bug 100 + 2h fixed gregression
author cin
date Sun, 24 Aug 2014 17:57:42 +0400
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
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
3 using NUnit.Framework;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
4
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
5 using BLToolkit.Aspects;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
6 using BLToolkit.Reflection;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
7
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
8 namespace HowTo.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 ClearCacheAspect
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
12 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
13 public /*[a]*/abstract/*[/a]*/ class TestClass
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
14 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
15 public static int Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
16
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
17 // This is a method we will cache. Cached return value depends on input parameters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
18 // We will change the 'Value' field outside of the class and see how it affects the result.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
19 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
20 [/*[a]*/Cache/*[/a]*/(MaxCacheTime=500, IsWeak=false)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
21 public /*[a]*/virtual/*[/a]*/ int CachedMethod(int p1, int p2)
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
22 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
23 return Value;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
24 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
25
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
26 // This method clears the CachedMethod cache.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
27 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
28 [/*[a]*/ClearCache/*[/a]*/(/*[a]*/"CachedMethod"/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
29 public abstract void ClearCache();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
30
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
31 // The CachedMethod is specified by name and parameters.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
32 // Also you can use declaring method type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
33 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
34 [/*[a]*/ClearCache/*[/a]*/(/*[a]*/"CachedMethod"/*[/a]*/, /*[a]*/typeof(int), typeof(int)/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
35 public abstract void ClearCache2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
36
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
37 // This method clears all caches for provided type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
38 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
39 [/*[a]*/ClearCache/*[/a]*/(/*[a]*/typeof(TestClass)/*[/a]*/)]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
40 public abstract void ClearAll();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
41
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
42 // This method clears all caches for current type.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
43 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
44 [/*[a]*/ClearCache/*[/a]*/]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
45 public abstract void ClearAll2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
46
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
47 public static TestClass CreateInstance()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
48 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
49 // Use TypeAccessor to create an instance of an abstract class.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
50 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
51 return /*[a]*/TypeAccessor/*[/a]*/<TestClass>.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
52 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
53 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
54
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
55 [Test]
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
56 public void Test()
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
57 {
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
58 TestClass tc = TypeAccessor<TestClass>.CreateInstance();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
59
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
60 TestClass.Value = 1;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
61
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
62 int value1 = tc.CachedMethod(1, 2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
63
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
64 TestClass.Value = 2;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
65
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
66 int value2 = tc.CachedMethod(1, 2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
67
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
68 // The cached values are equal.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
69 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
70 Assert.AreEqual(value1, value2);
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
71
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
72 tc.ClearCache();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
73
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
74 TestClass.Value = 3;
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
75
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
76 // Previous and returned values are not equal.
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
77 //
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
78 Assert.AreNotEqual(value1, tc.CachedMethod(1, 2));
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
79
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
80 tc.ClearCache2();
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
81 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
82 }
f990fcb411a9 Копия текущей версии из github
cin
parents:
diff changeset
83 }