diff --git a/src/NHibernate.Test/NHSpecificTest/GH3530/Entities.cs b/src/NHibernate.Test/NHSpecificTest/GH3530/Entities.cs index 1b0bd0aeec..52de3445d1 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3530/Entities.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3530/Entities.cs @@ -3,15 +3,23 @@ using System.Linq; using System.Text; using System.Threading.Tasks; +using NHibernate.SqlCommand; namespace NHibernate.Test.NHSpecificTest.GH3530 { - public class LocaleEntity + public abstract class Entity { public virtual Guid Id { get; set; } - public virtual int? IntegerValue { get; set; } - public virtual DateTime? DateTimeValue { get; set; } - public virtual double? DoubleValue { get; set; } - public virtual decimal? DecimalValue { get; set; } } + + public abstract class Entity:Entity where T : struct + { + public virtual T Value { get; set; } + } + + public class IntegerEntity : Entity { } + public class DateTimeEntity : Entity { } + + public class DoubleEntity : Entity { } + public class DecimalEntity : Entity { } } diff --git a/src/NHibernate.Test/NHSpecificTest/GH3530/Fixture.cs b/src/NHibernate.Test/NHSpecificTest/GH3530/Fixture.cs index aa942f5390..0651eeb534 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3530/Fixture.cs +++ b/src/NHibernate.Test/NHSpecificTest/GH3530/Fixture.cs @@ -37,6 +37,14 @@ protected override void OnTearDown() } protected override void CreateSchema() + { + CreateTable("Integer"); + CreateTable("DateTime"); + CreateTable("Double"); + CreateTable("Decimal"); + } + + private void CreateTable(string name) { var sb = new StringBuilder(); var guidType = Dialect.GetTypeName(SqlTypeFactory.Guid); @@ -44,16 +52,13 @@ protected override void CreateSchema() var catalog = GetQuotedDefaultCatalog(); var schema = GetQuotedDefaultSchema(); - var table = GetQualifiedName(catalog, schema, "LocaleEntity"); + var table = GetQualifiedName(catalog, schema, $"{name}Entity"); sb.Append($"{Dialect.CreateTableString} {table} ("); // Generate columns sb.Append($"Id {guidType}, "); - sb.Append($"IntegerValue {stringType}, "); - sb.Append($"DateTimeValue {stringType}, "); - sb.Append($"DoubleValue {stringType}, "); - sb.Append($"DecimalValue {stringType}"); + sb.Append($"Value {stringType}, "); // Add the primary key contraint for the identity column sb.Append($", {Dialect.PrimaryKeyString} ( Id )"); @@ -81,7 +86,7 @@ private string GetQuotedDefaultCatalog() var t = cfg.GetType(); var getQuotedDefaultCatalog = t.GetMethod("GetQuotedDefaultCatalog", BindingFlags.Instance | BindingFlags.NonPublic); - return (string)getQuotedDefaultCatalog.Invoke(cfg, [Dialect]); + return (string) getQuotedDefaultCatalog.Invoke(cfg, [Dialect]); } private string GetQuotedDefaultSchema() @@ -97,19 +102,19 @@ private string GetQualifiedName(string catalog, string schema, string name) return Dialect.Qualify(catalog, schema, name); } - [Test, TestCaseSource(nameof(GetTestCases))] - public void TestDateTime(CultureInfo from, CultureInfo to) + private void PerformTest(CultureInfo from, CultureInfo to, T expectedValue, Action assert) + where T : struct + where U : Entity, new() { - DateTime leapDay = new DateTime(2024, 2, 29, new GregorianCalendar(GregorianCalendarTypes.USEnglish)); object id; CurrentCulture = from; using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { - var entity = new LocaleEntity() + var entity = new U() { - DateTimeValue = leapDay + Value = expectedValue }; id = session.Save(entity); @@ -120,96 +125,45 @@ public void TestDateTime(CultureInfo from, CultureInfo to) using (var session = OpenSession()) using (var tx = session.BeginTransaction()) { - var entity = session.Get(id); + var entity = session.Get(id); - Assert.AreEqual(leapDay, entity.DateTimeValue); + assert(expectedValue, entity.Value); } } [Test, TestCaseSource(nameof(GetTestCases))] - public void TestDecimal(CultureInfo from, CultureInfo to) + public void TestDateTime(CultureInfo from, CultureInfo to) { - decimal decimalValue = 12.3m; - object id; - - CurrentCulture = from; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = new LocaleEntity() - { - DecimalValue = decimalValue - }; + DateTime leapDay = new DateTime(2024, 2, 29, new GregorianCalendar(GregorianCalendarTypes.USEnglish)); - id = session.Save(entity); - tx.Commit(); - } + PerformTest(from, to, leapDay, (expected, actual) => Assert.AreEqual(expected, actual)); + } - CurrentCulture = to; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = session.Get(id); + [Test, TestCaseSource(nameof(GetTestCases))] + public void TestDecimal(CultureInfo from, CultureInfo to) + { + decimal decimalValue = 12.3m; - Assert.AreEqual(decimalValue, entity.DecimalValue); - } + PerformTest(from, to, decimalValue, (expected, actual) => Assert.AreEqual(expected, actual)); } [Test, TestCaseSource(nameof(GetTestCases))] public void TestDouble(CultureInfo from, CultureInfo to) { double doubleValue = 12.3d; - object id; - CurrentCulture = from; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = new LocaleEntity() - { - DoubleValue = doubleValue - }; - - id = session.Save(entity); - tx.Commit(); - } - - CurrentCulture = to; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = session.Get(id); - - Assert.True(Math.Abs(doubleValue - entity.DoubleValue) < double.Epsilon, $"Expected: {doubleValue}\nBut was: {entity.DoubleValue}\n"); - } + PerformTest(from, to, doubleValue, + (expected, actual) => Assert.True(Math.Abs(expected - actual) < double.Epsilon, $"Expected: {expected}\nBut was: {actual}\n") + ); } + [Test, TestCaseSource(nameof(GetTestCases))] + public void TestInteger(CultureInfo from, CultureInfo to) { int integerValue = 123; - object id; - CurrentCulture = from; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = new LocaleEntity() - { - IntegerValue = integerValue - }; - - id = session.Save(entity); - tx.Commit(); - } - - CurrentCulture = to; - using (var session = OpenSession()) - using (var tx = session.BeginTransaction()) - { - var entity = session.Get(id); - - Assert.AreEqual(integerValue, entity.IntegerValue); - } + PerformTest(from, to, integerValue, (expected, actual) => Assert.AreEqual(expected, actual)); } private CultureInfo CurrentCulture diff --git a/src/NHibernate.Test/NHSpecificTest/GH3530/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/GH3530/Mappings.hbm.xml index d5e70752cd..10621a5867 100644 --- a/src/NHibernate.Test/NHSpecificTest/GH3530/Mappings.hbm.xml +++ b/src/NHibernate.Test/NHSpecificTest/GH3530/Mappings.hbm.xml @@ -1,11 +1,20 @@ - + - - - - + + + + + + + + + + + + +