From: <fab...@us...> - 2010-07-22 04:57:13
|
Revision: 5037 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5037&view=rev Author: fabiomaulo Date: 2010-07-22 04:57:07 +0000 (Thu, 22 Jul 2010) Log Message: ----------- Fix NH-2216 Modified Paths: -------------- trunk/nhibernate/src/NHibernate/Type/PersistentEnumType.cs trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs trunk/nhibernate/src/NHibernate.Test/GenericTest/EnumGeneric/EnumGenericFixture.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumClass.hbm.xml trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumTypeFixture.cs trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs Modified: trunk/nhibernate/src/NHibernate/Type/PersistentEnumType.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/PersistentEnumType.cs 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate/Type/PersistentEnumType.cs 2010-07-22 04:57:07 UTC (rev 5037) @@ -279,6 +279,22 @@ { return ReturnedClass.GetHashCode(); } + } + [Serializable] + public class EnumType<T> : PersistentEnumType + { + private readonly string typeName; + + public EnumType() : base(typeof (T)) + { + System.Type type = GetType(); + typeName = type.FullName + ", " + type.Assembly.GetName().Name; + } + + public override string Name + { + get { return typeName; } + } } } Modified: trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs =================================================================== --- trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate/Type/TypeFactory.cs 2010-07-22 04:57:07 UTC (rev 5037) @@ -498,11 +498,11 @@ } else if (typeClass.IsEnum) { - type = NHibernateUtil.Enum(typeClass); + type = (IType) Activator.CreateInstance(typeof (EnumType<>).MakeGenericType(typeClass)); } else if (IsNullableEnum(typeClass)) { - type = NHibernateUtil.Enum(typeClass.GetGenericArguments()[0]); + type = (IType)Activator.CreateInstance(typeof(EnumType<>).MakeGenericType(typeClass.GetGenericArguments()[0])); } else if (typeClass.IsSerializable) { Modified: trunk/nhibernate/src/NHibernate.Test/GenericTest/EnumGeneric/EnumGenericFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/GenericTest/EnumGeneric/EnumGenericFixture.cs 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate.Test/GenericTest/EnumGeneric/EnumGenericFixture.cs 2010-07-22 04:57:07 UTC (rev 5037) @@ -4,6 +4,7 @@ using NHibernate.Persister.Entity; using NHibernate.Type; using NUnit.Framework; +using SharpTestsEx; namespace NHibernate.Test.GenericTest.EnumGeneric { @@ -44,7 +45,7 @@ if (index == -1) Assert.Fail("Property NullableValue not found."); - Assert.AreEqual(typeof (PersistentEnumType), persister.PropertyTypes[index].GetType()); + persister.PropertyTypes[index].Should().Be.AssignableTo<PersistentEnumType>(); } } Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumClass.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumClass.hbm.xml 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumClass.hbm.xml 2010-07-22 04:57:07 UTC (rev 5037) @@ -12,6 +12,6 @@ </id> <property name="A" /> - <property name="B" /> + <property name="B" type="NHibernate.Type.EnumType`1[[NHibernate.Test.TypesTest.B, NHibernate.Test]], NHibernate" /> </class> </hibernate-mapping> \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumTypeFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumTypeFixture.cs 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/PersistentEnumTypeFixture.cs 2010-07-22 04:57:07 UTC (rev 5037) @@ -1,6 +1,7 @@ using System; using NHibernate.Type; using NUnit.Framework; +using SharpTestsEx; namespace NHibernate.Test.TypesTest { @@ -114,5 +115,35 @@ s2.Close(); } } + + [Test] + public void CanWriteAndReadUsingBothHeuristicAndExplicitGenericDeclaration() + { + var persistentEnumClass = new PersistentEnumClass {Id = 1, A = A.Two, B = B.One}; + using (ISession s = OpenSession()) + { + s.Save(persistentEnumClass); + s.Flush(); + } + + using (ISession s = sessions.OpenSession()) + { + var saved = s.Get<PersistentEnumClass>(1); + saved.A.Should().Be(A.Two); + saved.B.Should().Be(B.One); + s.Delete(saved); + s.Flush(); + } + } } + + public class GenericEnumTypeTest + { + [Test] + public void TheNameShouldBeFullNameAndAssembly() + { + var enumType = new EnumType<B>(); + enumType.Name.Should().Be(typeof(EnumType<B>).FullName + ", NHibernate"); + } + } } \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2010-07-22 03:55:22 UTC (rev 5036) +++ trunk/nhibernate/src/NHibernate.Test/TypesTest/TypeFactoryFixture.cs 2010-07-22 04:57:07 UTC (rev 5037) @@ -3,6 +3,7 @@ using log4net.Repository.Hierarchy; using NHibernate.Type; using NUnit.Framework; +using SharpTestsEx; namespace NHibernate.Test.TypesTest { @@ -138,5 +139,24 @@ Assert.That(singleType, Is.SameAs(TypeFactory.Basic("Single(10,5)"))); Assert.That(singleType, Is.Not.SameAs(TypeFactory.Basic("Single(11,5)"))); } + + public enum MyEnum + { + One + } + + [Test] + public void WhenUseEnumThenReturnGenericEnumType() + { + var iType = TypeFactory.HeuristicType(typeof (MyEnum).AssemblyQualifiedName); + iType.Should().Be.OfType<EnumType<MyEnum>>(); + } + + [Test] + public void WhenUseNullableEnumThenReturnGenericEnumType() + { + var iType = TypeFactory.HeuristicType(typeof(MyEnum?).AssemblyQualifiedName); + iType.Should().Be.OfType<EnumType<MyEnum>>(); + } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |