From: <fab...@us...> - 2011-05-15 19:39:17
|
Revision: 5825 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5825&view=rev Author: fabiomaulo Date: 2011-05-15 19:39:11 +0000 (Sun, 15 May 2011) Log Message: ----------- Test ported with bug fix Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs Modified: trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs 2011-05-15 19:33:14 UTC (rev 5824) +++ trunk/nhibernate/src/NHibernate/Mapping/ByCode/Impl/IdMapper.cs 2011-05-15 19:39:11 UTC (rev 5825) @@ -79,7 +79,12 @@ if(hbmId.name == null) { // no member for the id - hbmId.type1 = generator.DefaultReturnType.GetNhTypeName(); + var defaultReturnType = generator.DefaultReturnType; + // where a DefaultReturnType is not available, let NH discover it during the mapping-binding process + if (defaultReturnType != null) + { + hbmId.type1 = defaultReturnType.GetNhTypeName(); + } } object generatorParameters = generator.Params; if (generatorParameters != null) Added: trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/MappingByCode/MappersTests/IdMapperTest.cs 2011-05-15 19:39:11 UTC (rev 5825) @@ -0,0 +1,146 @@ +using System.Linq; +using System.Reflection; +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 IdMapperTest + { + // The strategy Assigned is the default and does not need the "generator" + //public void SetGeneratorAtCtor() + //{ + // var hbmId = new HbmId(); + // new IdMapper(hbmId); + // hbmId.generator.Should().Not.Be.Null(); + //} + + [Test] + public void CanSetGenerator() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.HighLow); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + } + + [Test] + public void CanSetGeneratorWithParameters() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.HighLow, p => p.Params(new { max_low = 99, where = "TableName" })); + hbmId.generator.@class.Should().Be.EqualTo("hilo"); + hbmId.generator.param.Should().Have.Count.EqualTo(2); + hbmId.generator.param.Select(p => p.name).Should().Have.SameValuesAs("max_low", "where"); + hbmId.generator.param.Select(p => p.GetText()).Should().Have.SameValuesAs("99", "TableName"); + } + + [Test] + public void CanSetGeneratorGuid() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Guid); + hbmId.generator.@class.Should().Be.EqualTo("guid"); + } + + [Test] + public void CanSetGeneratorGuidComb() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.GuidComb); + hbmId.generator.@class.Should().Be.EqualTo("guid.comb"); + } + + [Test] + public void CanSetGeneratorSequence() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Sequence); + hbmId.generator.@class.Should().Be.EqualTo("sequence"); + } + + [Test] + public void CanSetGeneratorIdentity() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Identity); + hbmId.generator.@class.Should().Be.EqualTo("identity"); + } + + private class MyClass + { + public int Id { get; set; } + public Related OneToOne { get; set; } + } + + private class Related + { + public int Id { get; set; } + } + + [Test] + public void CanSetGeneratorForeign() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Foreign<MyClass>(mc => mc.OneToOne)); + hbmId.generator.@class.Should().Be.EqualTo("foreign"); + hbmId.generator.param.Should().Not.Be.Null().And.Have.Count.EqualTo(1); + hbmId.generator.param.Single().Satisfy(p => p.name == "property" && p.GetText() == "OneToOne"); + } + + [Test] + public void CanSetGeneratorAssigned() + { + var hbmId = new HbmId(); + new IdMapper(hbmId).Generator(Generators.Assigned); + hbmId.generator.@class.Should().Be.EqualTo("assigned"); + } + + private class BaseEntity + { + private int id; + + public int Id + { + get { return id; } + } + } + + private class Entity : BaseEntity + { + + } + + [Test] + public void WhenHasMemberCanSetAccessor() + { + var member = typeof(Entity).GetProperty("Id", + BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic + | BindingFlags.FlattenHierarchy); + var hbmId = new HbmId(); + var mapper = new IdMapper(member, hbmId); + mapper.Access(Accessor.NoSetter); + hbmId.access.Should().Be("nosetter.camelcase"); + } + + [Test] + public void CanSetColumnName() + { + var hbmId = new HbmId(); + var mapper = new IdMapper(null, hbmId); + mapper.Column("MyName"); + hbmId.Columns.Single().name.Should().Be("MyName"); + } + + [Test] + public void CanSetLength() + { + var hbmId = new HbmId(); + var mapper = new IdMapper(null, hbmId); + mapper.Length(10); + hbmId.length.Should().Be("10"); + } + } +} \ 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:33:14 UTC (rev 5824) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-15 19:39:11 UTC (rev 5825) @@ -553,6 +553,7 @@ <Compile Include="MappingByCode\ExpliticMappingTests\VersionTests.cs" /> <Compile Include="MappingByCode\For.cs" /> <Compile Include="MappingByCode\MappersTests\AnyMapperTest.cs" /> + <Compile Include="MappingByCode\MappersTests\IdMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ManyToOneMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\AbstractPropertyContainerMapperTest.cs" /> <Compile Include="MappingByCode\MappersTests\ClassMapperTests\CheckMixingPOIDStrategiesTests.cs" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |