|
From: <fab...@us...> - 2010-12-24 20:24:50
|
Revision: 5335
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5335&view=rev
Author: fabiomaulo
Date: 2010-12-24 20:24:43 +0000 (Fri, 24 Dec 2010)
Log Message:
-----------
Test for NH-2470 (does not fail)
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Classes.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2DTOs.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Tests.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DTO.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DomainObject.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Mappings.hbm.xml
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Classes.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Classes.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Classes.cs 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,43 @@
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+
+namespace NHibernate.Test.NHSpecificTest.NH2470
+{
+ public class Class1 : DomainObject
+ {
+ private IList<Class2> _class2List = new List<Class2>();
+
+ public virtual void AddClass2(Class2 toAdd)
+ {
+ if (false == _class2List.Contains(toAdd))
+ {
+ _class2List.Add(toAdd);
+ toAdd.AddClass1(this);
+ }
+ }
+
+ public virtual ReadOnlyCollection<Class2> Class2List
+ {
+ get { return new ReadOnlyCollection<Class2>(_class2List); }
+ }
+ }
+
+ public class Class2 : DomainObject
+ {
+ private IList<Class1> _class1List = new List<Class1>();
+
+ public virtual void AddClass1(Class1 toAdd)
+ {
+ if (false == _class1List.Contains(toAdd))
+ {
+ _class1List.Add(toAdd);
+ toAdd.AddClass2(this);
+ }
+ }
+
+ public virtual ReadOnlyCollection<Class1> Class1List
+ {
+ get { return new ReadOnlyCollection<Class1>(_class1List); }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2DTOs.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2DTOs.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2DTOs.cs 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,9 @@
+namespace NHibernate.Test.NHSpecificTest.NH2470
+{
+ public class Class2DTO : DTO { }
+
+ public class Class1DTO : DTO
+ {
+ public Class2DTO[] Class2Ary { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Tests.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Tests.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Class1Class2Tests.cs 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,286 @@
+using System;
+using System.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH2470
+{
+ [TestFixture]
+ public class Class1_Class2_Tests : BugTestCase
+ {
+ public void Clean()
+ {
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ s.Delete("from Class1");
+ s.Delete("from Class2");
+ tx.Commit();
+ }
+ }
+ }
+
+ [Test]
+ public void Test0()
+ {
+ Class1 c1;
+ Class2 c2;
+ Class1DTO class1dto;
+
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+ s.Save(c1);
+
+ class1dto = new Class1DTO {ID = c1.ID, EntityVersion = c1.EntityVersion};
+
+ class1dto.Class2Ary = c1.Class2List.Select(cl2 => new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}).ToArray();
+
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(1, class1dto.EntityVersion);
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(1, class1dto.EntityVersion);
+ Clean();
+ }
+
+ [Test]
+ public void Test1()
+ {
+ Class1 c1;
+ Class2 c2;
+ Class1DTO dto;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+ s.Save(c1);
+
+ tx.Commit();
+ }
+
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ // NH-2470 If inverse="true" in Class1.hbm.xml you must add the next line to prevent erroneous version increment
+ // s.Refresh(c1, LockMode.None);
+ dto = new Class1DTO {ID = c1.ID, EntityVersion = c1.EntityVersion};
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(1, dto.EntityVersion);
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(1, dto.EntityVersion);
+ Clean();
+ }
+
+ [Test]
+ public void Test2()
+ {
+ Class1 c1;
+ Class2 c2;
+ Class1DTO dto;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+
+ s.Save(c1);
+
+ dto = new Class1DTO {ID = c1.ID, EntityVersion = c1.EntityVersion};
+
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(c1.ID, dto.ID);
+ Assert.AreEqual(1, dto.EntityVersion);
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Assert.AreEqual(c1.ID, dto.ID);
+ Assert.AreEqual(1, dto.EntityVersion);
+ Clean();
+ }
+
+ [Test]
+ public void Test3()
+ {
+ Class1 c1;
+ Class2 c2;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+ s.Save(c1);
+
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ // NH-2470 If inverse="true" in Class1.hbm.xml you must add the next line to prevent erroneous version increment
+ // s.Refresh(c1, LockMode.None);
+ var class1dto = new Class1DTO {ID = c1.ID, EntityVersion = c1.EntityVersion};
+ class1dto.Class2Ary = c1.Class2List.Select(cl2 => new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}).ToArray();
+ tx.Commit();
+ }
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ }
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+ Clean();
+ }
+
+ [Test]
+ public void Test4()
+ {
+ Guid c1id;
+ int c1ev, c2ev;
+ Class1DTO class1dto;
+ using (ISession s = OpenSession())
+ {
+ Class1 c1;
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ Class2 c2;
+
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+
+ s.Save(c1);
+
+ tx.Commit();
+
+ c1id = c1.ID;
+ c1ev = c1.EntityVersion;
+ c2ev = c2.EntityVersion;
+ }
+
+ Assert.AreEqual(1, c1ev);
+ Assert.AreEqual(1, c2ev);
+
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ // NH-2470 If inverse="true" in Class1.hbm.xml you must add the next line to prevent erroneous version increment
+ // s.Refresh(c1);
+ class1dto = new Class1DTO {ID = c1.ID, EntityVersion = c1.EntityVersion};
+ class1dto.Class2Ary = c1.Class2List.Select(cl2 => new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}).ToArray();
+ tx.Commit();
+ c1ev = c1.EntityVersion;
+ Assert.AreEqual(1, c1ev);
+ }
+ Assert.AreEqual(1, c1.EntityVersion);
+ }
+
+ Assert.AreEqual(1, c1ev);
+ Assert.AreEqual(1, class1dto.EntityVersion);
+ Assert.IsTrue(class1dto.Class2Ary.All(cl2 => cl2.EntityVersion == 1));
+
+ Class1 cl1;
+ using (ISession s = OpenSession())
+ {
+ cl1 = s.Get<Class1>(c1id);
+ }
+ Assert.AreEqual(1, cl1.EntityVersion);
+ Clean();
+ }
+
+ [Test]
+ public void Test5()
+ {
+ Guid c1id;
+ using (ISession s = OpenSession())
+ {
+ Class1 c1;
+ Class2 c2;
+
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ c1 = new Class1();
+ c2 = new Class2();
+
+ c1.AddClass2(c2);
+
+ s.Save(c2);
+
+ s.Save(c1);
+
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, c1.EntityVersion);
+ Assert.AreEqual(1, c2.EntityVersion);
+
+ c1id = c1.ID;
+ }
+
+ // NH-2470 Since we're using a totally separate session, this test always passes.
+ Class1 cl1;
+ Class1DTO class1dto;
+ using (ISession s = OpenSession())
+ {
+ using (ITransaction tx = s.BeginTransaction())
+ {
+ cl1 = s.Get<Class1>(c1id);
+
+ class1dto = new Class1DTO {ID = cl1.ID, EntityVersion = cl1.EntityVersion};
+ class1dto.Class2Ary = cl1.Class2List.Select(cl2 => new Class2DTO {ID = cl2.ID, EntityVersion = cl2.EntityVersion}).ToArray();
+
+ tx.Commit();
+ }
+
+ Assert.AreEqual(1, cl1.EntityVersion);
+ }
+
+ Assert.AreEqual(1, cl1.EntityVersion);
+ Assert.IsTrue(class1dto.Class2Ary.All(cl2 => cl2.EntityVersion == 1));
+ Clean();
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DTO.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DTO.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DTO.cs 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,10 @@
+using System;
+
+namespace NHibernate.Test.NHSpecificTest.NH2470
+{
+ public abstract class DTO
+ {
+ public Guid ID;
+ public int EntityVersion;
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DomainObject.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DomainObject.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/DomainObject.cs 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,10 @@
+using System;
+
+namespace NHibernate.Test.NHSpecificTest.NH2470
+{
+ public abstract class DomainObject
+ {
+ public virtual Guid ID { get; set; }
+ public virtual int EntityVersion { get; set; }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2470/Mappings.hbm.xml 2010-12-24 20:24:43 UTC (rev 5335)
@@ -0,0 +1,42 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH2470">
+
+ <class name="Class1">
+
+ <id name="ID">
+ <generator class="guid.comb"/>
+ </id>
+
+ <version name="EntityVersion"/>
+
+ <!-- NH2470 - I used to have inverse="true" here -->
+ <idbag name="Class2List" table="Class1_Class2" access="field.camelcase-underscore">
+ <collection-id column="ID" type="Guid">
+ <generator class="guid.comb" />
+ </collection-id>
+ <key column="Class1ID" foreign-key="FK_Class2_Class1" />
+ <many-to-many class="Class2" column="Class2ID" foreign-key="FK_Class1_Class2" />
+ </idbag>
+
+ </class>
+ <class name="Class2">
+
+ <id name="ID">
+ <generator class="guid.comb"/>
+ </id>
+
+ <version name="EntityVersion"/>
+
+ <idbag name="Class1List" table="Class1_Class2" access="field.camelcase-underscore">
+ <collection-id column="ID" type="Guid">
+ <generator class="guid.comb" />
+ </collection-id>
+ <key column="Class2ID" foreign-key="FK_Class1_Class2" />
+ <many-to-many class="Class1" column="Class1ID" foreign-key="FK_Class2_Class1" />
+ </idbag>
+
+ </class>
+
+</hibernate-mapping>
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-22 17:30:48 UTC (rev 5334)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2010-12-24 20:24:43 UTC (rev 5335)
@@ -574,6 +574,11 @@
<Compile Include="NHSpecificTest\NH2420\MyTable.cs" />
<Compile Include="NHSpecificTest\NH2441\Fixture.cs" />
<Compile Include="NHSpecificTest\NH2441\Model.cs" />
+ <Compile Include="NHSpecificTest\NH2470\Class1Class2Classes.cs" />
+ <Compile Include="NHSpecificTest\NH2470\Class1Class2DTOs.cs" />
+ <Compile Include="NHSpecificTest\NH2470\Class1Class2Tests.cs" />
+ <Compile Include="NHSpecificTest\NH2470\DomainObject.cs" />
+ <Compile Include="NHSpecificTest\NH2470\DTO.cs" />
<Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" />
<Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" />
<Compile Include="NHSpecificTest\Properties\Model.cs" />
@@ -2363,6 +2368,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2470\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2056\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2043\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2037\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|