diff UnitTests/CS/Aspects/CacheAspectTest.cs @ 0:f990fcb411a9

Копия текущей версии из github
author cin
date Thu, 27 Mar 2014 21:46:09 +0400
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/UnitTests/CS/Aspects/CacheAspectTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,157 @@
+using System;
+using System.Collections;
+using BLToolkit.Aspects;
+using BLToolkit.Reflection;
+
+using NUnit.Framework;
+
+namespace Aspects
+{
+	[TestFixture]
+	public class CacheAspectTest
+	{
+		[Log]
+		public abstract class TestClass
+		{
+			public static int Value;
+
+			[Cache(500, false)]
+			public virtual int Test(int i1, int i2)
+			{
+				return Value;
+			}
+
+			[InstanceCache]
+			public virtual int InstanceTest(int i1, int i2)
+			{
+				return Value;
+			}
+		}
+
+		[Test]
+		public void Test()
+		{
+			TestClass t = TypeAccessor.CreateInstance<TestClass>();
+
+			DateTime begin = DateTime.Now;
+
+			for (TestClass.Value = 777; t.Test(2, 2) == 777; TestClass.Value++)
+				continue;
+
+			Assert.IsTrue((DateTime.Now - begin).TotalMilliseconds >= 500);
+
+			TestClass.Value = 1; Assert.AreEqual(1, t.Test(1, 1));
+			TestClass.Value = 2; Assert.AreEqual(1, t.Test(1, 1));
+			TestClass.Value = 3; Assert.AreEqual(3, t.Test(2, 1));
+
+			CacheAspect.ClearCache(typeof(TestClass), "Test", typeof(int), typeof(int));
+			TestClass.Value = 4; Assert.AreEqual(4, t.Test(2, 1));
+
+			CacheAspect.ClearCache(t.GetType(), "Test", typeof(int), typeof(int));
+			TestClass.Value = 5; Assert.AreEqual(5, t.Test(2, 1));
+
+			CacheAspect.ClearCache();
+			TestClass.Value = 6; Assert.AreEqual(6, t.Test(2, 1));
+		}
+
+		[Test]
+		public void InstanceTest()
+		{
+			TestClass t = TypeAccessor.CreateInstance<TestClass>();
+
+			TestClass.Value = 1; Assert.AreEqual(1, t.InstanceTest(1, 1));
+			TestClass.Value = 2; Assert.AreEqual(1, t.InstanceTest(1, 1));
+			TestClass.Value = 3; Assert.AreEqual(3, t.InstanceTest(2, 1));
+			TestClass.Value = 4;
+
+			t = TypeAccessor.CreateInstance<TestClass>();
+
+			Assert.AreNotEqual(1, t.InstanceTest(1, 1));
+			Assert.AreNotEqual(3, t.InstanceTest(2, 1));
+		}
+
+		public class CustomCacheAspect : CacheAspect
+		{
+			private static IDictionary _methodcache = new Hashtable();
+			public  static IDictionary  MethodCache
+			{
+				get { return _methodcache; }
+			}
+
+			protected override IDictionary CreateCache()
+			{
+				return MethodCache;
+			}
+		}
+
+		[Log]
+		public abstract class CustomTestClass
+		{
+			public static int Value;
+
+			[Cache(typeof(CustomCacheAspect), MaxCacheTime = 500)]
+			public virtual int Test(int i1, int i2)
+			{
+				return Value;
+			}
+		}
+
+		[Test]
+		public void CustomCacheAspectTest()
+		{
+			CustomTestClass t = (CustomTestClass)TypeAccessor.CreateInstance(typeof(CustomTestClass));
+
+			CustomTestClass.Value = 1; Assert.AreEqual(1, t.Test(1, 1));
+			CustomTestClass.Value = 2; Assert.AreEqual(1, t.Test(1, 1));
+			CustomTestClass.Value = 3; Assert.AreEqual(3, t.Test(2, 1));
+
+			CustomCacheAspect.MethodCache.Clear();
+			CustomTestClass.Value = 4; Assert.AreEqual(4, t.Test(2, 1));
+		}
+
+		public abstract class GenericClass<T>
+			where T : new()
+		{
+			[Cache]
+			public virtual T GetT(int i)
+			{
+				return new T();
+			}
+		}
+
+		[Test]
+		public void GenericClassTest()
+		{
+			TypeAccessor<GenericClass<int>>.     CreateInstance().GetT(0);
+			TypeAccessor<GenericClass<DateTime>>.CreateInstance().GetT(0);
+		}
+
+		public abstract class TestClass1
+		{
+			[Cache]
+			public virtual T Get<T>()
+				where T : new()
+			{
+				return new T();
+			}
+
+			[Cache]
+			public virtual T Get<T>(int i)
+			{
+				if (typeof(T) == typeof(int)) return (T)(object)10;
+
+				return (T)(object)new DateTime();
+			}
+		}
+
+		//[Test]
+		public void GenericMethodTest()
+		{
+			var i = TypeAccessor<TestClass1>.CreateInstance().Get<int>     ();
+			var d = TypeAccessor<TestClass1>.CreateInstance().Get<DateTime>();
+
+			i = TypeAccessor<TestClass1>.CreateInstance().Get<int>     (0);
+			d = TypeAccessor<TestClass1>.CreateInstance().Get<DateTime>(0);
+		}
+	}
+}