|
From: <fab...@us...> - 2011-04-04 18:23:04
|
Revision: 5605
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5605&view=rev
Author: fabiomaulo
Date: 2011-04-04 18:22:58 +0000 (Mon, 04 Apr 2011)
Log Message:
-----------
Port test from ConfORM
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs
Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/AbstractPropertyContainerMapperTest.cs 2011-04-04 18:22:58 UTC (rev 5605)
@@ -0,0 +1,148 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using NHibernate.Cfg.MappingSchema;
+using NHibernate.Mapping.ByCode.Impl;
+using NUnit.Framework;
+using SharpTestsEx;
+
+namespace NHibernate.Test.MappingByCode.MappersTests
+{
+ public class AbstractPropertyContainerMapperTest
+ {
+ private class EntitySimple
+ {
+ public string Name { get; set; }
+ }
+ private class InheritedEntitySimple : EntitySimple
+ {
+ }
+
+ private class OtherSimple
+ {
+ public string Name { get; set; }
+ }
+
+ private class MyClass
+ {
+ public object Reference { get; set; }
+ }
+ private class MyClassWithDictionary
+ {
+ public IDictionary<string, string> Dictionary { get; set; }
+ }
+
+ [Test]
+ public void CantCreateWithoutHbmMapping()
+ {
+ Executing.This(() => new HackPropertyContainerMapper(typeof(EntitySimple), null)).Should().Throw<ArgumentNullException>();
+ }
+
+ [Test]
+ public void CantCreateWithoutContainerType()
+ {
+ Executing.This(() => new HackPropertyContainerMapper(null, new HbmMapping())).Should().Throw<ArgumentNullException>();
+ }
+
+ [Test]
+ public void CanAddSimpleProperty()
+ {
+ var properties = new List<object>();
+ var map = new StubPropertyContainerMapper<EntitySimple>(properties);
+ map.Property(typeof (EntitySimple).GetProperty("Name"), x => { });
+
+ properties.Should().Have.Count.EqualTo(1);
+ properties.First().Should().Be.OfType<HbmProperty>().And.ValueOf.Name.Should().Be.EqualTo("Name");
+ }
+
+ [Test]
+ public void CallPropertyMapper()
+ {
+ var properties = new List<object>();
+ var map = new StubPropertyContainerMapper<EntitySimple>(properties);
+ var called = false;
+ map.Property(typeof(EntitySimple).GetProperty("Name"), x => called = true );
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void CantAddPropertyOfNotInheritedType()
+ {
+ var map = new StubPropertyContainerMapper<OtherSimple>(new List<object>());
+ Executing.This(() => map.Property(typeof(EntitySimple).GetProperty("Name"), x => { })).Should().Throw<ArgumentOutOfRangeException>();
+ }
+
+ [Test]
+ public void CanAddPropertyOfInheritedType()
+ {
+ var properties = new List<object>();
+ var map = new StubPropertyContainerMapper<InheritedEntitySimple>(properties);
+ map.Property(typeof(InheritedEntitySimple).GetProperty("Name"), x => { });
+
+ properties.Should().Have.Count.EqualTo(1);
+ properties.First().Should().Be.OfType<HbmProperty>().And.ValueOf.Name.Should().Be.EqualTo("Name");
+ }
+
+ [Test]
+ public void CallAnyMapper()
+ {
+ var properties = new List<object>();
+ var map = new StubPropertyContainerMapper<EntitySimple>(properties);
+ var called = false;
+ map.Any(typeof(MyClass).GetProperty("Reference"), typeof(int), x => called = true);
+
+ called.Should().Be.True();
+ }
+
+ [Test]
+ public void CallDictionaryMappers()
+ {
+ var properties = new List<object>();
+ var map = new StubPropertyContainerMapper<EntitySimple>(properties);
+ var collectionPropsCalled = false;
+ var keyRelationCalled = false;
+ var elementRelationCalled = false;
+ map.Map(typeof (MyClassWithDictionary).GetProperty("Dictionary"), cp => collectionPropsCalled = true,
+ km => keyRelationCalled = true, er => elementRelationCalled = true);
+
+ collectionPropsCalled.Should().Be.True();
+ keyRelationCalled.Should().Be.True();
+ elementRelationCalled.Should().Be.True();
+ }
+
+ private class HackPropertyContainerMapper : AbstractPropertyContainerMapper
+ {
+ public HackPropertyContainerMapper(System.Type container, HbmMapping mapDoc) : base(container, mapDoc) {}
+
+ #region Overrides of AbstractPropertyContainerMapper
+
+ protected override void AddProperty(object property)
+ {
+ throw new NotImplementedException();
+ }
+
+ #endregion
+ }
+
+ private class StubPropertyContainerMapper<T> : AbstractPropertyContainerMapper
+ {
+ private readonly ICollection<object> elements;
+
+ public StubPropertyContainerMapper(ICollection<object> elements)
+ : base(typeof(T), new HbmMapping())
+ {
+ this.elements = elements;
+ }
+
+ #region Overrides of AbstractClassMapping<StateProvince>
+
+ protected override void AddProperty(object property)
+ {
+ elements.Add(property);
+ }
+
+ #endregion
+ }
+ }
+}
\ No newline at end of file
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-04 17:49:26 UTC (rev 5604)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-04-04 18:22:58 UTC (rev 5605)
@@ -522,6 +522,7 @@
<Compile Include="MappingByCode\ExpliticMappingTests\RootClassPropertiesSplitsTests.cs" />
<Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" />
<Compile Include="MappingByCode\For.cs" />
+ <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" />
<Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" />
<Compile Include="MappingByCode\NatureDemo\Naturalness\Address.cs" />
<Compile Include="MappingByCode\NatureDemo\Naturalness\Animal.cs" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|