From: <ric...@us...> - 2009-09-23 10:09:25
|
Revision: 4721 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4721&view=rev Author: ricbrown Date: 2009-09-23 10:09:13 +0000 (Wed, 23 Sep 2009) Log Message: ----------- Fix NH-1941 (Overriding GetValue in EnumStringType) Modified Paths: -------------- branches/2.1.x/nhibernate/src/NHibernate/Type/EnumStringType.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Fixture.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Mappings.hbm.xml branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Model.cs branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/SexEnumStringType.cs Modified: branches/2.1.x/nhibernate/src/NHibernate/Type/EnumStringType.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate/Type/EnumStringType.cs 2009-09-21 02:04:47 UTC (rev 4720) +++ branches/2.1.x/nhibernate/src/NHibernate/Type/EnumStringType.cs 2009-09-23 10:09:13 UTC (rev 4721) @@ -126,7 +126,7 @@ public virtual object GetValue(object code) { //code is an enum instance. - return code == null ? string.Empty : code.ToString(); + return code == null ? string.Empty : Enum.Format(ReturnedClass, code, "G"); } /// <summary> @@ -144,7 +144,7 @@ } else { - par.Value = Enum.Format(ReturnedClass, value, "G"); + par.Value = GetValue(value); } } Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Fixture.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Fixture.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Fixture.cs 2009-09-23 10:09:13 UTC (rev 4721) @@ -0,0 +1,50 @@ +using System; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH1941 +{ + [TestFixture] + public class Fixture : BugTestCase + { + + protected override void OnTearDown() + { + base.OnTearDown(); + using (ISession s = OpenSession()) + { + s.Delete("from Person"); + } + } + [Test] + public void CanOverrideStringEnumGetValue() + { + using (ISession s = OpenSession()) + using (ITransaction tx = s.BeginTransaction()) + { + using (SqlLogSpy ls = new SqlLogSpy()) + { + Person person = new Person() { Sex = Sex.Male }; + s.Save(person); + + string log = ls.GetWholeLog(); + Assert.IsTrue(log.Contains("@p0 = 'M'")); + } + + using (SqlLogSpy ls = new SqlLogSpy()) + { + Person person = + s.CreateQuery("from Person p where p.Sex = :personSex") + .SetParameter("personSex", Sex.Female) + .UniqueResult<Person>(); + + Assert.That(person, Is.Null); + + string log = ls.GetWholeLog(); + Assert.IsTrue(log.Contains("@p0 = 'F'")); + } + + tx.Rollback(); + } + } + } +} \ No newline at end of file Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Mappings.hbm.xml =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Mappings.hbm.xml (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Mappings.hbm.xml 2009-09-23 10:09:13 UTC (rev 4721) @@ -0,0 +1,14 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH1941"> + + <class name="Person" > + <id name="Id"> + <generator class="native" /> + </id> + + <property name="Sex" type="SexEnumStringType" /> + </class> + +</hibernate-mapping> Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Model.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Model.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/Model.cs 2009-09-23 10:09:13 UTC (rev 4721) @@ -0,0 +1,14 @@ +namespace NHibernate.Test.NHSpecificTest.NH1941 +{ + public enum Sex + { + Male, + Female, + } + + public class Person + { + public virtual int Id { get; set; } + public virtual Sex Sex { get; set; } + } +} Added: branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/SexEnumStringType.cs =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/SexEnumStringType.cs (rev 0) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHSpecificTest/NH1941/SexEnumStringType.cs 2009-09-23 10:09:13 UTC (rev 4721) @@ -0,0 +1,28 @@ +using System; +using NHibernate.Type; + +namespace NHibernate.Test.NHSpecificTest.NH1941 +{ + public class SexEnumStringType : EnumStringType<Sex> + { + public override object GetValue(object enumValue) + { + if (enumValue == null) + { + return string.Empty; + } + + return (Sex)enumValue == Sex.Male ? "M" : "F"; + } + + public override object GetInstance(object value) + { + if (value == null) + { + throw new ArgumentNullException("value"); + } + + return (value.ToString() == "M") ? Sex.Male : Sex.Female; + } + } +} Modified: branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-09-21 02:04:47 UTC (rev 4720) +++ branches/2.1.x/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-09-23 10:09:13 UTC (rev 4721) @@ -575,6 +575,9 @@ <Compile Include="NHSpecificTest\NH1938\Model.cs" /> <Compile Include="NHSpecificTest\NH1939\AuxType.cs" /> <Compile Include="NHSpecificTest\NH1939\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1941\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH1941\Model.cs" /> + <Compile Include="NHSpecificTest\NH1941\SexEnumStringType.cs" /> <Compile Include="NHSpecificTest\NH473\Child.cs" /> <Compile Include="NHSpecificTest\NH473\Fixture.cs" /> <Compile Include="NHSpecificTest\NH473\Parent.cs" /> @@ -1986,6 +1989,7 @@ <EmbeddedResource Include="Bytecode\Lightweight\ProductLine.hbm.xml" /> <EmbeddedResource Include="DriverTest\MultiTypeEntity.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="NHSpecificTest\NH1941\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1922\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\CriteriaQueryOnComponentCollection\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1908ThreadSafety\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |