From f31be36c6c4855e3b23acee5bb2bc84da2a09e80 Mon Sep 17 00:00:00 2001 From: Oskar Berggren Date: Wed, 23 May 2012 20:05:17 +0200 Subject: [PATCH] Add contributed unit test for NH-3142, with cleanups. --- .../NHSpecificTest/NH3142/ChildrenTest.cs | 79 +++++++++++++++++++ .../NHSpecificTest/NH3142/DomainClass.cs | 75 ++++++++++++++++++ .../NHSpecificTest/NH3142/Mappings.hbm.xml | 48 +++++++++++ src/NHibernate.Test/NHibernate.Test.csproj | 3 + 4 files changed, 205 insertions(+) create mode 100644 src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/NH3142/DomainClass.cs create mode 100644 src/NHibernate.Test/NHSpecificTest/NH3142/Mappings.hbm.xml diff --git a/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs b/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs new file mode 100644 index 00000000000..4fc5511c2fd --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3142/ChildrenTest.cs @@ -0,0 +1,79 @@ +using System; +using System.Collections; +using System.Collections.Generic; +using NUnit.Framework; + +namespace NHibernate.Test.NHSpecificTest.NH3142 +{ + [TestFixture] + public class ChildrenTest : BugTestCase + { + protected override void OnSetUp() + { + base.OnSetUp(); + + using (var session = OpenSession()) + { + for (int h = 1; h < 3; h++) + { + for (int i = 1; i < 4; i++) + { + var parent = new DomainParent { Id1 = h, Id2 = i }; + session.Save(parent); + + var parentId = new DomainParentWithComponentId { Id = { Id1 = h, Id2 = i } }; + session.Save(parentId); + + for (int j = 1; j < 4; j++) + { + var child = new DomainChild { ParentId1 = h, ParentId2 = i }; + session.Save(child); + + var childId = new DomainChildWCId { ParentId1 = h, ParentId2 = i }; + session.Save(childId); + } + } + } + + session.Flush(); + } + } + + protected override void OnTearDown() + { + base.OnTearDown(); + using (var session = OpenSession()) + { + session.Delete("from DomainChild"); + session.Delete("from DomainChildWCId"); + session.Delete("from System.Object"); + session.Flush(); + } + } + + + [Test] + public void ChildrenCollectionOfAllParentsShouldContainsThreeElements() + { + using (var session = OpenSession()) + { + var entities = session.CreateQuery("from DomainParent").List(); + + foreach (var parent in entities) + Assert.AreEqual(3, parent.Children.Count); + } + } + + [Test] + public void ChildrenCollectionOfAllParentsWithComponentIdShouldContainsThreeElements() + { + using (var session = OpenSession()) + { + var entities = session.CreateQuery("from DomainParentWithComponentId").List(); + + foreach (var parent in entities) + Assert.AreEqual(3, parent.Children.Count); + } + } + } +} diff --git a/src/NHibernate.Test/NHSpecificTest/NH3142/DomainClass.cs b/src/NHibernate.Test/NHSpecificTest/NH3142/DomainClass.cs new file mode 100644 index 00000000000..bf49a2efcee --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3142/DomainClass.cs @@ -0,0 +1,75 @@ +using System.Collections.Generic; +using System; + + +namespace NHibernate.Test.NHSpecificTest.NH3142 +{ + public class DomainParent + { + public virtual int Id1 { get; set; } + public virtual int Id2 { get; set; } + + public virtual ICollection Children { get; set; } + + public override bool Equals(object other) + { + var otherParent = other as DomainParent; + if (otherParent == null) + return false; + return Id1 == otherParent.Id1 && + Id2 == otherParent.Id2; + } + + public override int GetHashCode() + { + return Id1.GetHashCode() ^ Id2.GetHashCode(); + } + } + + public class DomainChild + { + public virtual int Id { get; set; } + public virtual int ParentId1 { get; set; } + public virtual int ParentId2 { get; set; } + } + + [Serializable] + public class DomainParentIdentifier + { + public virtual int Id1 { get; set; } + public virtual int Id2 { get; set; } + + public override bool Equals(object other) + { + var otherParent = other as DomainParentIdentifier; + if (otherParent == null) + return false; + return Id1 == otherParent.Id1 && + Id2 == otherParent.Id2; + } + + public override int GetHashCode() + { + return Id1.GetHashCode() ^ Id2.GetHashCode(); + } + } + + public class DomainParentWithComponentId + { + public DomainParentWithComponentId() + { + Id = new DomainParentIdentifier(); + } + + public virtual DomainParentIdentifier Id { get; protected set; } + + public virtual ICollection Children { get; set; } + } + + public class DomainChildWCId + { + public virtual int Id { get; set; } + public virtual int ParentId1 { get; set; } + public virtual int ParentId2 { get; set; } + } +} \ No newline at end of file diff --git a/src/NHibernate.Test/NHSpecificTest/NH3142/Mappings.hbm.xml b/src/NHibernate.Test/NHSpecificTest/NH3142/Mappings.hbm.xml new file mode 100644 index 00000000000..7308bfc23aa --- /dev/null +++ b/src/NHibernate.Test/NHSpecificTest/NH3142/Mappings.hbm.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/NHibernate.Test/NHibernate.Test.csproj b/src/NHibernate.Test/NHibernate.Test.csproj index 9854368bbaf..fcb3aa7ea54 100644 --- a/src/NHibernate.Test/NHibernate.Test.csproj +++ b/src/NHibernate.Test/NHibernate.Test.csproj @@ -972,6 +972,8 @@ + + @@ -2833,6 +2835,7 @@ +