|
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.
|