Mercurial > pub > bltoolkit
diff UnitTests/CS/Aspects/ClearCacheAspect.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/ClearCacheAspect.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,199 @@ +using NUnit.Framework; + +using BLToolkit.Aspects; +using BLToolkit.Reflection; +using BLToolkit.TypeBuilder; + +namespace Aspects +{ + [TestFixture] + public class ClearCacheAspect + { + public abstract class TestClass + { + int _value; + + [Cache] + public virtual int Test1() + { + return _value++; + } + + [ClearCache("Test1")] + public abstract void ClearTest1(); + + [Cache] + public virtual int Test2() + { + return _value++; + } + + [Cache] + public virtual int Test2(int i) + { + return _value++; + } + + [ClearCache("Test2")] + public abstract void ClearTest2(); + + [ClearCache("Test2", typeof(int))] + public abstract void ClearTest2a(); + + [ClearCache("Test2"), ClearCache("Test2", typeof(int))] + public abstract void ClearTest2b(); + } + + public abstract class TestClass1 + { + [ClearCache(typeof(TestClass), "Test2")] + public abstract void ClearTest(); + + [ClearCache(typeof(TestClass), "Test2", typeof(int))] + public abstract void ClearTest1(); + + protected abstract int Test(); + + [ClearCache("Test")] + public abstract void ClearTest3(); + + [ClearCache(typeof(TestClass))] + public abstract void ClearTest4(); + + [ClearCache] + public abstract void ClearTest5(); + } + + [Test] + public void Test1() + { + TestClass tc = TypeFactory.CreateInstance<TestClass>(); + + int value1 = tc.Test1(); + int value2 = tc.Test1(); + + Assert.AreEqual(value1, value2); + + tc.ClearTest1(); + + Assert.AreNotEqual(value1, tc.Test1()); + } + + [Test] + public void Test2() + { + TestClass tc = TypeFactory.CreateInstance<TestClass>(); + + tc.ClearTest2(); + + int value1 = tc.Test2(); + int value2 = tc.Test2(); + + Assert.AreEqual(value1, value2); + + tc.ClearTest2(); + + Assert.AreNotEqual(value1, tc.Test2()); + } + + [Test] + public void Test2a() + { + TestClass tc = TypeFactory.CreateInstance<TestClass>(); + + tc.ClearTest2a(); + + int value1 = tc.Test2(1); + int value2 = tc.Test2(1); + + Assert.AreEqual(value1, value2); + + tc.ClearTest2a(); + + Assert.AreNotEqual(value1, tc.Test2(1)); + } + + [Test] + public void Test2b() + { + TestClass tc = TypeFactory.CreateInstance<TestClass>(); + + tc.ClearTest2b(); + + int value1 = tc.Test2(); + int value2 = tc.Test2(); + int value3 = tc.Test2(1); + int value4 = tc.Test2(1); + + Assert.AreEqual(value1, value2); + Assert.AreEqual(value3, value4); + + tc.ClearTest2b(); + + Assert.AreNotEqual(value1, tc.Test2()); + Assert.AreNotEqual(value3, tc.Test2(1)); + } + + [Test] + public void Test3() + { + TestClass tc1 = TypeAccessor<TestClass>. CreateInstance(); + TestClass1 tc2 = TypeAccessor<TestClass1>.CreateInstance(); + + tc1.ClearTest2b(); + + int value1 = tc1.Test2(); + int value2 = tc1.Test2(); + int value3 = tc1.Test2(1); + int value4 = tc1.Test2(1); + + Assert.AreEqual(value1, value2); + Assert.AreEqual(value3, value4); + + tc2.ClearTest(); + tc2.ClearTest1(); + + Assert.AreNotEqual(value1, tc1.Test2()); + Assert.AreNotEqual(value3, tc1.Test2(1)); + } + + [Test] + public void Test4() + { + TestClass1 tc = TypeAccessor<TestClass1>.CreateInstance(); + + tc.ClearTest3(); + } + + [Test] + public void Test5() + { + TestClass tc1 = TypeAccessor<TestClass>. CreateInstance(); + TestClass1 tc2 = TypeAccessor<TestClass1>.CreateInstance(); + + tc1.ClearTest2b(); + + int value1 = tc1.Test2(); + int value2 = tc1.Test2(); + int value3 = tc1.Test2(1); + int value4 = tc1.Test2(1); + + Assert.AreEqual(value1, value2); + Assert.AreEqual(value3, value4); + + tc2.ClearTest(); + tc2.ClearTest4(); + + Assert.AreNotEqual(value1, tc1.Test2()); + Assert.AreNotEqual(value3, tc1.Test2(1)); + } + + [Test] + public void Test6() + { + TestClass1 tc = TypeAccessor<TestClass1>.CreateInstance(); + + tc.ClearTest5(); + } + } +}