diff UnitTests/CS/TypeBuilder/InstanceTypeAttributeTest.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/TypeBuilder/InstanceTypeAttributeTest.cs	Thu Mar 27 21:46:09 2014 +0400
@@ -0,0 +1,249 @@
+using System;
+using System.Collections;
+
+using NUnit.Framework;
+
+using BLToolkit.Reflection;
+using BLToolkit.TypeBuilder;
+
+namespace TypeBuilder
+{
+	[TestFixture]
+	public class InstanceTypeAttributeTest
+	{
+		public class TestClass
+		{
+			public class IntFieldInstance
+			{
+				public int Value;
+			}
+
+			public class IntPropertyInstance
+			{
+				private int _value;
+				public  int  Value
+				{
+					get { return _value * 2; }
+					set { _value = value; }
+				}
+			}
+
+			public class ObjFieldInstance
+			{
+				public object Value;
+			}
+
+			public class ObjPropertyInstance
+			{
+				private object _value;
+				public  object  Value
+				{
+					get { return _value is int? (int)_value * 3: _value; }
+					set { _value = value; }
+				}
+			}
+
+			public abstract class TestObject1
+			{
+				[InstanceType(typeof(IntFieldInstance))]    public abstract int       IntField  { get; set; }
+				[InstanceType(typeof(IntPropertyInstance))] public abstract int       IntProp   { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract int       ObjField  { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract int       ObjProp   { get; set; }
+				[InstanceType(typeof(IntFieldInstance))]    public abstract DayOfWeek DowField  { get; set; }
+				[InstanceType(typeof(IntPropertyInstance))] public abstract DayOfWeek DowProp   { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract DateTime  DateField { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract DateTime  DateProp  { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract ArrayList ArrField  { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract ArrayList ArrProp   { get; set; }
+			}
+
+			public static void Test()
+			{
+				TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
+
+				o.IntField = 10;
+				o.IntProp  = 11;
+				o.ObjField = 12;
+				o.ObjProp  = 13;
+
+				Assert.AreEqual(10, o.IntField);
+				Assert.AreEqual(22, o.IntProp);
+				Assert.AreEqual(12, o.ObjField);
+				Assert.AreEqual(39, o.ObjProp);
+
+				DateTime  testDate  = new DateTime(2000, 1, 1);
+
+				o.DowField  = DayOfWeek.Monday;
+				o.DowProp   = DayOfWeek.Sunday;
+				o.DateField = testDate;
+				o.DateProp  = testDate;
+
+				Assert.AreEqual(DayOfWeek.Monday, o.DowField);
+				Assert.AreEqual(DayOfWeek.Sunday, o.DowProp);
+				Assert.AreEqual(testDate,         o.DateField);
+				Assert.AreEqual(testDate,         o.DateProp);
+
+				o.ArrField = new ArrayList(17);
+				o.ArrProp  = new ArrayList(21);
+
+				Assert.AreEqual(17, o.ArrField.Capacity);
+				Assert.AreEqual(21, o.ArrProp. Capacity);
+			}
+		}
+
+		[Test]
+		public void InstanceClassTest()
+		{
+			TestClass.Test();
+		}
+
+		public class TestStruct
+		{
+			public struct IntFieldInstance
+			{
+				public int Value;
+			}
+
+			public struct IntPropertyInstance
+			{
+				private int _value;
+				public  int  Value
+				{
+					get { return _value * 2; }
+					set { _value = value; }
+				}
+			}
+
+			public struct ObjFieldInstance
+			{
+				public object Value;
+			}
+
+			public struct ObjPropertyInstance
+			{
+				private object _value;
+				public  object  Value
+				{
+					get { return _value is int? (int)_value * 3: _value; }
+					set { _value = value; }
+				}
+			}
+
+			public abstract class TestObject1
+			{
+				[InstanceType(typeof(IntFieldInstance))]    public abstract int       IntField  { get; set; }
+				[InstanceType(typeof(IntPropertyInstance))] public abstract int       IntProp   { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract int       ObjField  { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract int       ObjProp   { get; set; }
+				[InstanceType(typeof(IntFieldInstance))]    public abstract DayOfWeek DowField  { get; set; }
+				[InstanceType(typeof(IntPropertyInstance))] public abstract DayOfWeek DowProp   { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract DateTime  DateField { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract DateTime  DateProp  { get; set; }
+				[InstanceType(typeof(ObjFieldInstance))]    public abstract ArrayList ArrField  { get; set; }
+				[InstanceType(typeof(ObjPropertyInstance))] public abstract ArrayList ArrProp   { get; set; }
+			}
+
+			public static void Test()
+			{
+				TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
+
+				o.IntField = 10;
+				o.IntProp  = 11;
+				o.ObjField = 12;
+				o.ObjProp  = 13;
+
+				Assert.AreEqual(10, o.IntField);
+				Assert.AreEqual(22, o.IntProp);
+				Assert.AreEqual(12, o.ObjField);
+				Assert.AreEqual(39, o.ObjProp);
+
+				DateTime  testDate  = new DateTime(2000, 1, 1);
+
+				o.DowField  = DayOfWeek.Monday;
+				o.DowProp   = DayOfWeek.Sunday;
+				o.DateField = testDate;
+				o.DateProp  = testDate;
+
+				Assert.AreEqual(DayOfWeek.Monday, o.DowField);
+				Assert.AreEqual(DayOfWeek.Sunday, o.DowProp);
+				Assert.AreEqual(testDate,         o.DateField);
+				Assert.AreEqual(testDate,         o.DateProp);
+
+				o.ArrField = new ArrayList(17);
+				o.ArrProp  = new ArrayList(21);
+
+				Assert.AreEqual(17, o.ArrField.Capacity);
+				Assert.AreEqual(21, o.ArrProp. Capacity);
+			}
+		}
+
+		[Test]
+		public void InstanceStructTest()
+		{
+			TestStruct.Test();
+		}
+
+		public struct IntParamInstance
+		{
+			public IntParamInstance(int value)
+			{
+				Value = value;
+			}
+
+			public int Value;
+		}
+
+		public abstract class TestObject1
+		{
+			[InstanceType(typeof(IntParamInstance), 58)] public abstract int IntField { get; set; }
+		}
+
+		[Test]
+		public void ParamTest()
+		{
+			TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1));
+
+			Assert.AreEqual(58, o.IntField);
+		}
+
+		public class Instance2
+		{
+			public Instance2(int n)
+			{
+				_n = n;
+			}
+
+			private int _n;
+
+			private int _value;
+			public  int  Value
+			{
+				get { return _value * _n; }
+				set { _value = value; }
+			}
+		}
+
+		[GlobalInstanceType(typeof(int), typeof(Instance2), 3)]
+		public abstract class Object2
+		{
+			[InstanceType(typeof(Instance2), 5)] 
+			public abstract int   Int1   { get; set; }
+			public abstract int   Int2   { get; set; }
+			public abstract short Short1 { get; set; }
+		}
+
+		[Test]
+		public void GlobalParamTest()
+		{
+			Object2 o = (Object2)TypeAccessor.CreateInstance(typeof(Object2));
+
+			o.Int1   = 5;
+			o.Int2   = 5;
+			o.Short1 = 10;
+
+			Assert.AreEqual(25, o.Int1);
+			Assert.AreEqual(15, o.Int2);
+			Assert.AreEqual(10, o.Short1);
+		}
+	}
+}