From: <fab...@us...> - 2011-05-15 19:22:20
|
Revision: 5821 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5821&view=rev Author: fabiomaulo Date: 2011-05-15 19:22:14 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs 2011-05-15 19:15:09 UTC (rev 5820) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/OneToOneMapper.cs 2011-05-15 19:22:14 UTC (rev 5821) @@ -11,7 +11,7 @@ private readonly HbmOneToOne oneToOne; public OneToOneMapper(MemberInfo member, HbmOneToOne oneToOne) - : this(member, new AccessorPropertyMapper(member.DeclaringType, member.Name, x => oneToOne.access = x), oneToOne) {} + : this(member, member == null ? (IAccessorPropertyMapper)new NoMemberPropertyMapper() : new AccessorPropertyMapper(member.DeclaringType, member.Name, x => oneToOne.access = x), oneToOne) { } public OneToOneMapper(MemberInfo member, IAccessorPropertyMapper accessorMapper, HbmOneToOne oneToOne) { Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/OneToOneMapperTest.cs 2011-05-15 19:22:14 UTC (rev 5821) @@ -0,0 +1,143 @@ +using System; +using System.Linq; +using NHibernate.Mapping.ByCode; +using NHibernate.Cfg.MappingSchema; +using NHibernate.Mapping.ByCode.Impl; +using NUnit.Framework; +using SharpTestsEx; + +namespace NHibernate.Test.MappingByCode.MappersTests +{ + public class OneToOneMapperTest + { + private class MyClass + { + public Relation Relation { get; set; } + } + + private class Relation + { + public string Whatever { get; set; } + } + + [Test] + public void AssignCascadeStyle() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).Should().Contain("persist").And.Contain("delete"); + } + + [Test] + public void AutoCleanUnsupportedCascadeStyle() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Cascade(Mapping.ByCode.Cascade.Persist | Mapping.ByCode.Cascade.DeleteOrphans | Mapping.ByCode.Cascade.Remove); + hbm.cascade.Split(',').Select(w => w.Trim()).All(w => w.Satisfy(cascade => !cascade.Contains("orphan"))); + } + + [Test] + public void CanSetAccessor() + { + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, hbm); + + mapper.Access(Accessor.ReadOnly); + hbm.Access.Should().Be("readonly"); + } + + [Test] + public void CanSetLazyness() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Lazy(LazyRelation.NoProxy); + hbm.Lazy.Should().Have.Value(); + hbm.Lazy.Should().Be(HbmLaziness.NoProxy); + } + + [Test] + public void CanSetConstrained() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.Constrained(true); + hbm.constrained.Should().Be.True(); + } + + [Test] + public void WhenNoMemberPropertyRefAcceptAnything() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.PropertyReference(typeof(Array).GetProperty("Length")); + + hbm.propertyref.Should().Be("Length"); + } + + [Test] + public void WhenNullMemberPropertyRefNull() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(null, hbm); + mapper.PropertyReference(null); + + hbm.propertyref.Should().Be.Null(); + } + + [Test] + public void WhenMemberPropertyRefAcceptOnlyMemberOfExpectedType() + { + var hbm = new HbmOneToOne(); + var mapper = new OneToOneMapper(typeof(MyClass).GetProperty("Relation"), hbm); + mapper.PropertyReference(typeof(Relation).GetProperty("Whatever")); + + hbm.propertyref.Should().Be("Whatever"); + + Executing.This(() => mapper.PropertyReference(typeof(Array).GetProperty("Length"))).Should().Throw<ArgumentOutOfRangeException>(); + } + + + [Test] + public void CanSetFormula() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + + mapper.Formula("SomeFormula"); + mapping.formula1.Should().Be("SomeFormula"); + } + + [Test] + public void WhenSetFormulaWithNullThenSetFormulaWithNull() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + mapper.Formula(null); + mapping.formula.Should().Be.Null(); + mapping.formula1.Should().Be.Null(); + } + + [Test] + public void WhenSetFormulaWithMultipleLinesThenSetFormulaNode() + { + var member = For<MyClass>.Property(c => c.Relation); + var mapping = new HbmOneToOne(); + var mapper = new OneToOneMapper(member, mapping); + var formula = @"Line1 +Line2"; + mapper.Formula(formula); + mapping.formula1.Should().Be.Null(); + var hbmFormula = mapping.formula.First(); + hbmFormula.Text.Length.Should().Be(2); + hbmFormula.Text[0].Should().Be("Line1"); + hbmFormula.Text[1].Should().Be("Line2"); + mapping.formula1.Should().Be.Null(); + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:15:09 UTC (rev 5820) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:22:14 UTC (rev 5821) @@ -580,6 +580,7 @@ <Compile Include="MappingByCode\MappersTests\JoinedSubclassMapperTests\TablesSincronizationTests.cs" /> <Compile Include="MappingByCode\MappersTests\JoinMapperTests.cs" /> <Compile Include="MappingByCode\MappersTests\NaturalIdMapperTest.cs" /> + <Compile Include="MappingByCode\MappersTests\OneToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\PropertyMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\SetPersisterTests.cs" /> <Compile Include="MappingByCode\MappersTests\SubclassMapperTests\TablesSincronizationTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |