From: <fab...@us...> - 2009-03-29 06:27:17
|
Revision: 4165 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=4165&view=rev Author: fabiomaulo Date: 2009-03-29 06:27:12 +0000 (Sun, 29 Mar 2009) Log Message: ----------- Fix NH-1718 (new feature Currency type) Modified Paths: -------------- trunk/nhibernate/src/NHibernate/NHibernate.csproj trunk/nhibernate/src/NHibernate/NHibernateUtil.cs trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs Modified: trunk/nhibernate/src/NHibernate/NHibernate.csproj =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-29 04:42:52 UTC (rev 4164) +++ trunk/nhibernate/src/NHibernate/NHibernate.csproj 2009-03-29 06:27:12 UTC (rev 4165) @@ -1091,6 +1091,7 @@ <Compile Include="Type\AnsiCharType.cs" /> <Compile Include="Type\AnyType.cs" /> <Compile Include="Type\AbstractCharType.cs" /> + <Compile Include="Type\CurrencyType.cs" /> <Compile Include="Type\TimeSpanType.cs" /> <Compile Include="Type\DateTime2Type.cs" /> <Compile Include="Type\ClassMetaType.cs" /> Modified: trunk/nhibernate/src/NHibernate/NHibernateUtil.cs =================================================================== --- trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2009-03-29 04:42:52 UTC (rev 4164) +++ trunk/nhibernate/src/NHibernate/NHibernateUtil.cs 2009-03-29 06:27:12 UTC (rev 4165) @@ -141,6 +141,11 @@ public static readonly NullableType Double = new DoubleType(); /// <summary> + /// NHibernate Currency type (System.Decimal - DbType.Currency) + /// </summary> + public static readonly NullableType Currency = new CurrencyType(); + + /// <summary> /// NHibernate Guid type. /// </summary> public static readonly NullableType Guid = new GuidType(); Added: trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs (rev 0) +++ trunk/nhibernate/src/NHibernate/Type/CurrencyType.cs 2009-03-29 06:27:12 UTC (rev 4165) @@ -0,0 +1,17 @@ +using System; +using NHibernate.SqlTypes; + +namespace NHibernate.Type +{ + [Serializable] + public class CurrencyType : DecimalType + { + internal CurrencyType() : this(SqlTypeFactory.Currency) { } + internal CurrencyType(SqlType sqlType) : base(sqlType) { } + + public override string Name + { + get { return "Currency"; } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-29 04:42:52 UTC (rev 4164) +++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2009-03-29 06:27:12 UTC (rev 4165) @@ -95,8 +95,6 @@ //basicTypes.Add(NHibernate.Blob.Name, NHibernate.Blob); //basicTypes.Add(NHibernate.Clob.Name, NHibernate.Clob); - //basicTypes.Add(NHibernate.Currency.Name, NHibernate.Currency); - // the Timezone class .NET is not even close to the java.util.Timezone class - in // .NET all you can do is get the local Timezone - there is no "factory" method to // get a Timezone by name... @@ -145,6 +143,7 @@ typeByTypeOfName[NHibernateUtil.Ticks.Name] = NHibernateUtil.Ticks; typeByTypeOfName[NHibernateUtil.TimeSpanInt64.Name] = NHibernateUtil.TimeSpanInt64; typeByTypeOfName[NHibernateUtil.TimeSpan.Name] = NHibernateUtil.TimeSpan; + typeByTypeOfName[NHibernateUtil.Currency.Name] = NHibernateUtil.Currency; // need to do add the key "Serializable" because the hbm files will have a // type="Serializable", but the SerializableType returns the Name as @@ -162,6 +161,7 @@ typeByTypeOfName["time"] = NHibernateUtil.Time; typeByTypeOfName["timestamp"] = NHibernateUtil.Timestamp; typeByTypeOfName["decimal"] = NHibernateUtil.Decimal; + typeByTypeOfName["currency"] = NHibernateUtil.Currency; typeByTypeOfName["serializable"] = NHibernateUtil.Serializable; typeByTypeOfName["true_false"] = NHibernateUtil.TrueFalse; Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-29 04:42:52 UTC (rev 4164) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2009-03-29 06:27:12 UTC (rev 4165) @@ -1059,6 +1059,8 @@ <Compile Include="TypesTest\BooleanTypeFixture.cs" /> <Compile Include="TypesTest\ByteClass.cs" /> <Compile Include="TypesTest\ByteTypeFixture.cs" /> + <Compile Include="TypesTest\CurrencyClass.cs" /> + <Compile Include="TypesTest\CurrencyTypeFixture.cs" /> <Compile Include="TypesTest\TimeSpanClass.cs" /> <Compile Include="TypesTest\TimeSpanTypeFixture.cs" /> <Compile Include="TypesTest\TimeSpanInt64Class.cs" /> @@ -1705,6 +1707,7 @@ <EmbeddedResource Include="Cascade\JobBatch.hbm.xml" /> <EmbeddedResource Include="Deletetransient\Person.hbm.xml" /> <Content Include="DynamicEntity\package.html" /> + <EmbeddedResource Include="TypesTest\CurrencyClass.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1635\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1688\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1700\Mappings.hbm.xml" /> Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.cs 2009-03-29 06:27:12 UTC (rev 4165) @@ -0,0 +1,7 @@ +namespace NHibernate.Test.TypesTest +{ + public class CurrencyClass + { + public decimal CurrencyValue { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyClass.hbm.xml 2009-03-29 06:27:12 UTC (rev 4165) @@ -0,0 +1,13 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.TypesTest" + default-lazy="false"> + + <class name="CurrencyClass"> + <id type="int"> + <generator class="native" /> + </id> + <property name="CurrencyValue" type="currency"/> + </class> +</hibernate-mapping> \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/CurrencyTypeFixture.cs 2009-03-29 06:27:12 UTC (rev 4165) @@ -0,0 +1,72 @@ +using NHibernate.Dialect; +using NHibernate.Type; +using NUnit.Framework; +using NUnit.Framework.SyntaxHelpers; + +namespace NHibernate.Test.TypesTest +{ + [TestFixture] + public class CurrencyTypeFixture : TypeFixtureBase + { + protected override string TypeName + { + get { return "Currency"; } + } + + [Test] + public void ShouldBeMoneyType() + { + if (!(Dialect is MsSql2000Dialect)) + { + Assert.Ignore("This test does not apply to " + Dialect); + } + var sqlType = Dialect.GetTypeName(NHibernateUtil.Currency.SqlType); + Assert.That(sqlType, Is.EqualTo("MONEY")); + } + + /// <summary> + /// Test that two decimal fields that are exactly equal are returned + /// as Equal by the DecimalType. + /// </summary> + [Test] + public void Equals() + { + const decimal lhs = 5.6435M; + const decimal rhs = 5.6435M; + + var type = (CurrencyType)NHibernateUtil.Currency; + Assert.IsTrue(type.IsEqual(lhs, rhs)); + } + + [Test] + public void ReadWrite() + { + const decimal expected = 5.6435M; + + var basic = new CurrencyClass {CurrencyValue = expected}; + ISession s = OpenSession(); + object savedId = s.Save(basic); + s.Flush(); + s.Close(); + + s = OpenSession(); + basic = s.Load<CurrencyClass>(savedId); + + Assert.AreEqual(expected, basic.CurrencyValue); + + s.Delete(basic); + s.Flush(); + s.Close(); + } + + [Test] + public void UnsavedValue() + { + var type = (CurrencyType)NHibernateUtil.Currency; + object mappedValue = type.StringToObject("0"); + Assert.AreEqual(0m, mappedValue); + Assert.IsTrue(type.IsEqual(mappedValue, 0m), "'0' in the mapping file should have been converted to a 0m"); + } + + } +} \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |