Mercurial > pub > bltoolkit
diff UnitTests/CS/TypeBuilder/LazyInstanceAttributeTest.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/LazyInstanceAttributeTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,202 @@ +using System; +using System.Collections; + +using NUnit.Framework; + +using BLToolkit.Reflection; +using BLToolkit.TypeBuilder; + +namespace TypeBuilder +{ + [TestFixture] + public class LazyInstanceAttributeTest + { + public abstract class AbstractObject + { + public AbstractObject(InitContext init) + { + if (init.MemberParameters != null && init.MemberParameters.Length == 1) + Field = (int)init.MemberParameters[0]; + else + Field = 77; + } + + public int Field; + } + + public class InnerObject + { + public InnerObject(InitContext init) + { + if (init.MemberParameters != null && init.MemberParameters.Length == 1) + Field = (int)init.MemberParameters[0]; + else + Field = 44; + } + + public int Field; + } + + public class TestField + { + public TestField() + { + Value = 10; + } + + public TestField(int p1, float p2) + { + Value = p1 + (int)p2; + } + + public TestField(TestField p1) + { + Value = 77; + } + + public int Value; + } + + public abstract class TestObject1 + { + [LazyInstance] + public abstract ArrayList List { get; set; } + + [LazyInstance] + public abstract string Str { get; set; } + + [LazyInstance] + public abstract string this[int i] { get; set; } + + [LazyInstance] + public abstract TestField Field { get; set; } + + [LazyInstance] + public abstract InnerObject InnerObject { get; set; } + + [LazyInstance] + public abstract AbstractObject AbstractObject { get; set; } + } + + [Test] + public void NoParamTest() + { + TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1)); + + Assert.IsNotNull(o.List); + Assert.AreEqual("", o.Str); + Assert.AreEqual(10, o.Field.Value); + Assert.AreEqual(44, o.InnerObject.Field); + } + + [AttributeUsage(AttributeTargets.Property)] + public class TestParameterAttribute : ParameterAttribute + { + public TestParameterAttribute() + : base(new TestField()) + { + } + } + + public abstract class TestObject2 + { + [LazyInstance, Parameter(10)] + public abstract ArrayList List { get; set; } + + [LazyInstance, Parameter("test")] + public abstract string Str { get; set; } + + [LazyInstance, Parameter(20)] + public abstract string this[int i] { get; set; } + + [LazyInstance, Parameter(20, 30)] + public abstract TestField Field1 { get; set; } + + [LazyInstance, TestParameter] + public abstract TestField Field2 { get; set; } + + [LazyInstance, Parameter(55)] + public abstract InnerObject InnerObject { get; set; } + + [LazyInstance, Parameter(88)] + public abstract AbstractObject AbstractObject { get; set; } + } + + [Test] + public void ParamTest() + { + TestObject2 o = (TestObject2)TypeAccessor.CreateInstance(typeof(TestObject2)); + + Assert.AreEqual(10, o.List.Capacity); + Assert.AreEqual("test", o.Str); + Assert.AreEqual(50, o.Field1.Value); + Assert.AreEqual(77, o.Field2.Value); + Assert.AreEqual(55, o.InnerObject.Field); + } + + [LazyInstances] + public abstract class TestObject3 + { + public abstract string Str1 { get; set; } + [LazyInstance(false), Parameter("")] + public abstract string Str2 { get; set; } + } + + [Test] + public void LazyInstancesTest() + { + TestObject3 o = (TestObject3)TypeAccessor.CreateInstance(typeof(TestObject3)); + + Assert.AreEqual("", o.Str1); + Assert.AreEqual("", o.Str2); + + o.Str1 = null; + o.Str2 = null; + + Assert.AreEqual("", o.Str1); + Assert.AreEqual(null, o.Str2); + } + + [LazyInstances(false)] + public abstract class TestObject4 : TestObject3 + { + } + + [Test] + public void LazyInstancesFalseTest() + { + TestObject4 o = (TestObject4)TypeAccessor.CreateInstance(typeof(TestObject4)); + + Assert.AreEqual("", o.Str1); + Assert.AreEqual("", o.Str2); + + o.Str1 = null; + o.Str2 = null; + + Assert.AreEqual(null, o.Str1); + Assert.AreEqual(null, o.Str2); + } + + [LazyInstances(typeof(string))] + public abstract class TestObject5 + { + public abstract string Str { get; set; } + public abstract ArrayList List { get; set; } + } + + [Test] + public void LazyInstancesTypeTest() + { + TestObject5 o = (TestObject5)TypeAccessor.CreateInstance(typeof(TestObject5)); + + Assert.IsNotNull(o.Str); + Assert.IsNotNull(o.List); + + o.Str = null; + o.List = null; + + Assert.IsNotNull(o.Str); + Assert.AreEqual (null, o.List); + } + } +}