From: <fab...@us...> - 2011-05-15 19:27:49
|
Revision: 5822 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5822&view=rev Author: fabiomaulo Date: 2011-05-15 19:27:43 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs 2011-05-15 19:22:14 UTC (rev 5821) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/ManyToOneMapper.cs 2011-05-15 19:27:43 UTC (rev 5822) @@ -14,7 +14,7 @@ private readonly MemberInfo member; public ManyToOneMapper(MemberInfo member, HbmManyToOne manyToOne, HbmMapping mapDoc) - : this(member, new AccessorPropertyMapper(member.DeclaringType, member.Name, x => manyToOne.access = x), manyToOne, mapDoc) {} + : this(member, member == null ? (IAccessorPropertyMapper)new NoMemberPropertyMapper() : new AccessorPropertyMapper(member.DeclaringType, member.Name, x => manyToOne.access = x), manyToOne, mapDoc) { } public ManyToOneMapper(MemberInfo member, IAccessorPropertyMapper accessorPropertyMapper, HbmManyToOne manyToOne, HbmMapping mapDoc) { Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/ManyToOneMapperTest.cs 2011-05-15 19:27:43 UTC (rev 5822) @@ -0,0 +1,305 @@ +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 +{ + public class ManyToOneMapperTest + { + private class MyClass + { + public Relation Relation { get; set; } + public IRelation TheOtherRelation { get; set; } + } + + private interface IRelation + { + + } + + private class Relation : IRelation + { + + } + + private class Whatever + { + + } + + [Test] + public void AssignCascadeStyle() + { + var hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + 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 hbmMapping = new HbmMapping(); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(null, hbm, hbmMapping); + 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 hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Access(Accessor.ReadOnly); + hbm.Access.Should().Be("readonly"); + } + + [Test] + public void WhenSetDifferentColumnNameThenSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + mapper.Column(cm => cm.Name("RelationId")); + + hbm.Columns.Should().Have.Count.EqualTo(1); + hbm.Columns.Single().name.Should().Be("RelationId"); + } + + [Test] + public void WhenSetDefaultColumnNameThenDoesNotSetTheName() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.Name("Relation")); + mapping.column.Should().Be.Null(); + mapping.Columns.Should().Be.Empty(); + } + + [Test] + public void WhenSetBasicColumnValuesThenSetPlainValues() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.UniqueKey("theUnique"); + cm.NotNullable(true); + }); + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetColumnValuesThenAddColumnTag() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => + { + cm.SqlType("BIGINT"); + cm.NotNullable(true); + }); + mapping.Items.Should().Not.Be.Null(); + mapping.Columns.Should().Have.Count.EqualTo(1); + } + + [Test] + public void WhenSetBasicColumnValuesMoreThanOnesThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column(cm => cm.UniqueKey("theUnique")); + mapper.Column(cm => cm.NotNullable(true)); + + mapping.Items.Should().Be.Null(); + mapping.uniquekey.Should().Be("theUnique"); + mapping.notnull.Should().Be(true); + mapping.notnullSpecified.Should().Be(true); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAddColumns() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => + { + cm.Name("column1"); + cm.Length(50); + }, cm => + { + cm.Name("column2"); + cm.SqlType("VARCHAR(10)"); + }); + mapping.Columns.Should().Have.Count.EqualTo(2); + } + + [Test] + public void WhenSetMultiColumnsValuesThenAutoassignColumnNames() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + mapping.Columns.Should().Have.Count.EqualTo(2); + mapping.Columns.All(cm => cm.name.Satisfy(n => !string.IsNullOrEmpty(n))); + } + + [Test] + public void AfterSetMultiColumnsCantSetSimpleColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Columns(cm => cm.Length(50), cm => cm.SqlType("VARCHAR(10)")); + Executing.This(() => mapper.Column(cm => cm.Length(50))).Should().Throw<MappingException>(); + } + + [Test] + public void WhenSetBasicColumnValuesThroughShortCutThenMergeColumn() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Column("pizza"); + mapper.NotNullable(true); + mapper.Unique(true); + mapper.UniqueKey("AA"); + mapper.Index("II"); + + mapping.Items.Should().Be.Null(); + mapping.column.Should().Be("pizza"); + mapping.notnull.Should().Be(true); + mapping.unique.Should().Be(true); + mapping.uniquekey.Should().Be("AA"); + mapping.index.Should().Be("II"); + } + + [Test] + public void WhenSetFetchModeToJoinThenSetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Join); + + mapping.fetch.Should().Be(HbmFetchMode.Join); + mapping.fetchSpecified.Should().Be.True(); + } + + [Test] + public void WhenSetFetchModeToSelectThenResetFetch() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Fetch(FetchKind.Select); + + mapping.fetch.Should().Be(HbmFetchMode.Select); + mapping.fetchSpecified.Should().Be.False(); + } + + [Test] + public void CanForceClassRelation() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + mapper.Class(typeof(Relation)); + + mapping.Class.Should().Contain("Relation").And.Not.Contain("IRelation"); + } + + [Test] + public void WhenForceClassRelationToIncompatibleTypeThenThrows() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + + Executing.This(() => mapper.Class(typeof(Whatever))).Should().Throw<ArgumentOutOfRangeException>(); + } + + [Test] + public void CanSetLazyness() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("TheOtherRelation"); + var mapping = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, mapping, hbmMapping); + mapper.Lazy(LazyRelation.NoProxy); + mapping.Lazy.Should().Have.Value(); + mapping.Lazy.Should().Be(HbmLaziness.NoProxy); + } + + [Test] + public void CanSetUpdate() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Update(false); + hbm.update.Should().Be.False(); + } + + [Test] + public void CanSetInsert() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.Insert(false); + hbm.insert.Should().Be.False(); + } + + [Test] + public void CanSetFk() + { + var hbmMapping = new HbmMapping(); + var member = typeof(MyClass).GetProperty("Relation"); + var hbm = new HbmManyToOne(); + var mapper = new ManyToOneMapper(member, hbm, hbmMapping); + + mapper.ForeignKey("MyFkName"); + + hbm.foreignkey.Should().Be("MyFkName"); + } + } +} \ 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:22:14 UTC (rev 5821) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:27:43 UTC (rev 5822) @@ -552,6 +552,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\SubclassPropertiesSplitsTests.cs" /> <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> + <Compile Include="MappingByCode\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\ClassMapperWithJoinPropertiesTest.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |