|
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);
+ hbm...@cl...().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" }));
+ hbm...@cl...().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);
+ hbm...@cl...().Be.EqualTo("guid");
+ }
+
+ [Test]
+ public void CanSetGeneratorGuidComb()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.GuidComb);
+ hbm...@cl...().Be.EqualTo("guid.comb");
+ }
+
+ [Test]
+ public void CanSetGeneratorSequence()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.Sequence);
+ hbm...@cl...().Be.EqualTo("sequence");
+ }
+
+ [Test]
+ public void CanSetGeneratorIdentity()
+ {
+ var hbmId = new HbmId();
+ new IdMapper(hbmId).Generator(Generators.Identity);
+ hbm...@cl...().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));
+ hbm...@cl...().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);
+ hbm...@cl...().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.
|