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