diff UnitTests/CS/Aspects/MixinAspectTest.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/MixinAspectTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,104 @@
+using System;
+using System.ComponentModel;
+using System.Data.SqlTypes;
+
+using NUnit.Framework;
+
+using BLToolkit.Aspects;
+using BLToolkit.ComponentModel;
+using BLToolkit.Reflection;
+
+namespace Aspects
+{
+	[TestFixture]
+	public class MixinAspectTest
+	{
+		public interface ITestInterface
+		{
+			int    Test1(ref int    value);
+			object Test2(ref object value);
+
+			int    Test3(string p);
+			int    Test4(double p);
+			int    Test5 { get; }
+			int    Test6 { get; }
+		}
+
+		public class TestInterfaceImpl : ITestInterface, INullable
+		{
+			int    ITestInterface.Test1(ref int    value) { return value; }
+			object ITestInterface.Test2(ref object value) { return value; }
+
+			int    ITestInterface.Test3(string p) { return 10; }
+			int    ITestInterface.Test4(double p) { return 20; }
+
+			int    ITestInterface.Test5 { get { return 30; } }
+			int    ITestInterface.Test6 { get { return 40; } }
+
+			bool   INullable.IsNull     { get { return true; } }
+		}
+
+		[Mixin(typeof(ICustomTypeDescriptor), "_typeDescriptor")]
+		[Mixin(typeof(ITestInterface),        "TestInterface", "'{0}.{1}' is null.")]
+		[Mixin(typeof(INullable),             "TestInterface", "'{0}.{1}' is null.")]
+		public abstract class TestClass
+		{
+			public TestClass()
+			{
+				_typeDescriptor = new CustomTypeDescriptorImpl(GetType());
+			}
+
+			protected object _typeDescriptor;
+
+			private ITestInterface _testInterface;
+			public  ITestInterface  TestInterface
+			{
+				get
+				{
+					if (_testInterface == null)
+						_testInterface = new TestInterfaceImpl();
+					return _testInterface;
+				}
+			}
+
+			public string Code = "code";
+
+			[MixinOverride]
+			protected int Test3(string p) { return 15; }
+			[MixinOverride(typeof(IDisposable))]
+			protected int Test4(double p) { return 25; }
+
+			protected int Test5 { [MixinOverride] get { return 35; } }
+		}
+
+		[Test]
+		public void Test1()
+		{
+			TestClass             tc = (TestClass)TypeAccessor.CreateInstance(typeof(TestClass));
+			ICustomTypeDescriptor td = (ICustomTypeDescriptor)tc;
+
+			PropertyDescriptorCollection col = td.GetProperties();
+
+			Assert.AreNotEqual(0, col.Count);
+		}
+
+		[Test]
+		public void Test2()
+		{
+			TestClass      tc = (TestClass)TypeAccessor.CreateInstance(typeof(TestClass));
+			ITestInterface ti = (ITestInterface)tc;
+			INullable      tn = (INullable)tc;
+
+			int    n = 10;
+			object o = new object();
+
+			Assert.AreEqual(10, ti.Test1(ref n));
+			Assert.AreSame (o,  ti.Test2(ref o));
+			Assert.AreEqual(15, ti.Test3(null));
+			Assert.AreEqual(20, ti.Test4(0));
+			Assert.AreEqual(35, ti.Test5);
+			Assert.AreEqual(40, ti.Test6);
+			Assert.That(tn.IsNull, Is.True);
+		}
+	}
+}