Mercurial > pub > bltoolkit
diff UnitTests/CS/Reflection/Extension/ExtensionTest.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/Reflection/Extension/ExtensionTest.cs Thu Mar 27 21:46:09 2014 +0400 @@ -0,0 +1,130 @@ +using System.IO; + +using NUnit.Framework; + +using BLToolkit.Mapping; +using BLToolkit.Reflection.Extension; +using System.Collections.Generic; +using System.Xml; + +namespace Reflection.Extension +{ + [TestFixture] + public class ExtensionTestTest + { + [SetUp] + public void SetUp() + { + Map.DefaultSchema = new DefaultMappingSchema(); + + using (StreamWriter sw = File.CreateText("Mapping.xml")) + { + sw.WriteLine(@"<?xml version='1.0' encoding='utf-8' ?> +<Types xmlns='urn:schemas-bltoolkit-net:typeext'> + <Type Name='Dest'> + <Member Name='Field3'> + <MapValue Value='-1-' OrigValue='1' OrigValue-Type='System.Double' /> + <MapValue Value='-2-' OrigValue='2' OrigValue-Type='System.Double' /> + </Member> + </Type> + <Type Name='TriState'> + <Member Name='Yes' MapValue='yes' MapValue-Type='System.String' /> + <Member Name='No'> + <MapValue Value='no' Type='System.String' /> + <MapValue Type='System.String'>N</MapValue> + </Member> + <Member Name='Maybe' MapValue='xz' MapValue-Type='System.String' /> + <Member Name='NotApplicable' MapValue-Type='System.String' MapValue='(n/a)' DefaultValue='' /> + </Type> + <Type Name='System.Double'> + <MapValue OrigValue='1' OrigValue-Type='System.Double' Value='One' Type='System.String' /> + <MapValue OrigValue='2' Value='Two' Type='System.String' /> + <DefaultValue Value='54' /> + </Type> + <Type Name='TestType'> + <Member Name='SomeRelation'> + <Relation> + <MasterIndex Name='MasterIndex1'/> + <MasterIndex Name='MasterIndex2'/> + <SlaveIndex Name='SlaveIndex1'/> + <SlaveIndex Name='SlaveIndex2'/> + </Relation> + </Member> + </Type> +</Types>"); + } + } + + [TypeExtension("TriState")] + public enum TriState { Yes, No, NotApplicable }; + + public class Source + { + public string Field1 = "no"; + public string Field2 = "One"; + public string Field3 = "-2-"; + public string Field4 = "***"; + } + + [TypeExtension("Dest")] + public class Dest + { + private TriState _field1 = TriState.NotApplicable; + public TriState Field1 + { + get { return _field1; } + set { _field1 = value; } + } + + public double Field2; + public double Field3; + public double Field4; + } + + [Test] + public void Test() + { + Map.Extensions = TypeExtension.GetExtensions("Mapping.xml"); + + object o = Map.Extensions["TriState"]["Yes"]["MapValue"].Value; + + Assert.AreEqual("yes", o); + + Source s = new Source(); + Dest d = (Dest)Map.ObjectToObject(s, typeof(Dest)); + + Assert.AreEqual(TriState.No, d.Field1); + Assert.AreEqual( 1, d.Field2); + Assert.AreEqual( 2, d.Field3); + Assert.AreEqual(54, d.Field4); + Assert.AreEqual(TriState.NotApplicable, Map.ValueToEnum("1234", typeof(TriState))); + } + + public class TestType + { + public object SomeRelation; + } + + [Test] + public void MultiKeyRelationTest() + { + MappingSchema ms = new MappingSchema(); + ms.Extensions = TypeExtension.GetExtensions("Mapping.xml"); + + bool isSet = false; + + List<MapRelationBase> relations = ms.MetadataProvider.GetRelations(ms, ms.Extensions, typeof(TestType), null, out isSet); + + Assert.IsTrue(isSet); + Assert.AreEqual(1, relations.Count); + Assert.AreEqual(2, relations[0].MasterIndex.Fields.Length); + Assert.AreEqual(2, relations[0].SlaveIndex .Fields.Length); + } + + [TearDown] + public void TearDown() + { + File.Delete("Mapping.xml"); + } + } +}