Mercurial > pub > bltoolkit
diff UnitTests/CS/TypeBuilder/ParameterAttributeTest.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/ParameterAttributeTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,155 @@ +using System; +using System.Collections; +using System.Diagnostics.CodeAnalysis; +using BLToolkit.EditableObjects; +using BLToolkit.Mapping; +using BLToolkit.Reflection; +using BLToolkit.TypeBuilder; + +using NUnit.Framework; + +namespace TypeBuilder +{ + [TestFixture] + public class ParameterAttributeTest + { + 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; + } + + [AttributeUsage(AttributeTargets.Property)] + public class TestParameterAttribute : ParameterAttribute + { + public TestParameterAttribute() : base(new TestField()) + { + } + } + + public abstract class TestObject1 + { + [Parameter(10)] public abstract ArrayList List { get; set; } + [Parameter("t")] public abstract string Str { get; set; } + [Parameter(20)] public abstract string this[int i] { get; set; } + [Parameter(20, 30)] public abstract TestField Field1 { get; set; } + [TestParameter] public abstract TestField Field2 { get; set; } + [Parameter(55)] public abstract InnerObject InnerObject1 { get; set; } + [Parameter(54)] public abstract int? Int1 { get; set; } + [Parameter(null)] public abstract int? Int2 { get; set; } + + [Parameter(2,2,2)] public abstract DateTime Date { get; set; } + [Parameter(222L)] public abstract Decimal Decimal1 { get; set; } + [Parameter(1, 0, 0, true, (byte)2)] + public abstract Decimal? Decimal2 { get; set; } + [Parameter(new int[]{2, 0, 0, 0})] + public abstract Decimal Decimal3 { get; set; } + [Parameter(22.05)] public abstract Decimal Decimal4 { get; set; } + [Parameter(null)] public abstract Decimal? Decimal5 { get; set; } + } + + [Test] + public void ParamTest() + { + TestObject1 o = (TestObject1)TypeAccessor.CreateInstance(typeof(TestObject1)); + + Assert.That(o.List.Capacity, Is.EqualTo(10)); + Assert.That(o.Str, Is.EqualTo("t")); + Assert.That(o.Field1.Value, Is.EqualTo(50)); + Assert.That(o.Field2.Value, Is.EqualTo(77)); + Assert.That(o.InnerObject1.Field, Is.EqualTo(55)); + Assert.That(o.Int1, Is.EqualTo(54)); + Assert.That(o.Int2, Is.EqualTo(null)); + Assert.That(o.Date, Is.EqualTo(new DateTime(2,2,2))); + Assert.That(o.Decimal1, Is.EqualTo(222m)); + Assert.That(o.Decimal2, Is.EqualTo(-0.01m)); + Assert.That(o.Decimal3, Is.EqualTo(2m)); + Assert.That(o.Decimal4, Is.EqualTo(22.05m)); + Assert.That(o.Decimal5, Is.EqualTo(null)); + } + + public abstract class TestObject2 : EditableObject + { + protected TestObject2() {} + protected TestObject2(InitContext context) {} + + [Parameter(10)] public abstract ArrayList List { get; set; } + [Parameter("t")] public abstract string Str { get; set; } + [Parameter(20)] public abstract string this[int i] { get; set; } + [Parameter(20, 30)] public abstract TestField Field1 { get; set; } + [TestParameter] public abstract TestField Field2 { get; set; } + [Parameter(55)] public abstract InnerObject InnerObject1 { get; set; } + [Parameter(54)] public abstract int? Int1 { get; set; } + [Parameter(null)] public abstract int? Int2 { get; set; } + + [Parameter(2,2,2)] public abstract DateTime Date { get; set; } + [Parameter(222L)] public abstract Decimal Decimal1 { get; set; } + [Parameter(1, 0, 0, true, (byte)2)] + public abstract Decimal? Decimal2 { get; set; } + [Parameter(new int[]{2, 0, 0, 0})] + public abstract Decimal Decimal3 { get; set; } + [Parameter(22.05)] public abstract Decimal Decimal4 { get; set; } + [Parameter(null)] public abstract Decimal? Decimal5 { get; set; } + } + + [Test] + public void EditablObjectParamTest() + { + TestObject2 o = (TestObject2)TypeAccessor.CreateInstance(typeof(TestObject2), new InitContext()); + + Assert.That(o.List.Capacity, Is.EqualTo(10)); + Assert.That(o.Str, Is.EqualTo("t")); + Assert.That(o.Field1.Value, Is.EqualTo(50)); + Assert.That(o.Field2.Value, Is.EqualTo(77)); + Assert.That(o.InnerObject1.Field, Is.EqualTo(55)); + Assert.That(o.Int1, Is.EqualTo(54)); + Assert.That(o.Int2, Is.EqualTo(null)); + Assert.That(o.Date, Is.EqualTo(new DateTime(2,2,2))); + Assert.That(o.Decimal1, Is.EqualTo(222m)); + Assert.That(o.Decimal2, Is.EqualTo(-0.01m)); + Assert.That(o.Decimal3, Is.EqualTo(2m)); + Assert.That(o.Decimal4, Is.EqualTo(22.05m)); + Assert.That(o.Decimal5, Is.EqualTo(null)); + } + } +}