|
From: <fab...@us...> - 2011-06-19 21:50:07
|
Revision: 5963
http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5963&view=rev
Author: fabiomaulo
Date: 2011-06-19 21:50:00 +0000 (Sun, 19 Jun 2011)
Log Message:
-----------
Tests for NH-2693
Modified Paths:
--------------
trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
Added Paths:
-----------
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Fixture.cs
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Mappings.hbm.xml
trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Model.cs
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Fixture.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Fixture.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Fixture.cs 2011-06-19 21:50:00 UTC (rev 5963)
@@ -0,0 +1,292 @@
+using System.Collections.Generic;
+using System.Linq;
+using NHibernate.Linq;
+using NUnit.Framework;
+
+namespace NHibernate.Test.NHSpecificTest.NH2693 {
+ public class Fixture : BugTestCase {
+ private List<FirstLevel> _firstLevels;
+
+ protected override void OnSetUp() {
+ base.OnSetUp();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var firstLevel1 = new FirstLevel();
+
+ var secondLevel1 = new SecondLevelComponent { FirstLevel = firstLevel1 };
+ firstLevel1.SecondLevels.Add(secondLevel1);
+
+ var thirdLevel1 = new SpecificThirdLevel();
+ secondLevel1.ThirdLevel = thirdLevel1;
+ secondLevel1.SpecificThirdLevel = thirdLevel1;
+
+ var fourthLevel1 = new FourthLevel { SomeString = "first", SpecificThirdLevel = thirdLevel1 };
+ thirdLevel1.FourthLevels.Add(fourthLevel1);
+ var fourthLevel2 = new FourthLevel { SomeString = "second", SpecificThirdLevel = thirdLevel1 };
+ thirdLevel1.FourthLevels.Add(fourthLevel2);
+
+
+ var firstLevel2 = new FirstLevel();
+
+ var secondLevel2 = new SecondLevelComponent { FirstLevel = firstLevel2 };
+ firstLevel2.SecondLevels.Add(secondLevel2);
+
+ var thirdLevel2 = new SpecificThirdLevel();
+ secondLevel2.ThirdLevel = thirdLevel2;
+ secondLevel2.SpecificThirdLevel = thirdLevel2;
+
+ var fourthLevel3 = new FourthLevel { SomeString = "third", SpecificThirdLevel = thirdLevel2 };
+ thirdLevel2.FourthLevels.Add(fourthLevel3);
+ var fourthLevel4 = new FourthLevel { SomeString = "fourth", SpecificThirdLevel = thirdLevel2 };
+ thirdLevel2.FourthLevels.Add(fourthLevel4);
+
+
+ var firstLevel3 = new FirstLevel();
+
+ var secondLevel3 = new SecondLevelComponent { FirstLevel = firstLevel3 };
+ firstLevel3.SecondLevels.Add(secondLevel3);
+
+ var thirdLevel3 = new SpecificThirdLevel();
+ secondLevel3.ThirdLevel = thirdLevel3;
+ secondLevel3.SpecificThirdLevel = thirdLevel3;
+
+
+ session.Save(thirdLevel1);
+ session.Save(thirdLevel2);
+ session.Save(thirdLevel3);
+ session.Save(firstLevel1);
+ session.Save(firstLevel2);
+ session.Save(firstLevel3);
+
+ _firstLevels = new List<FirstLevel>();
+ _firstLevels.Add(firstLevel1);
+ _firstLevels.Add(firstLevel2);
+ _firstLevels.Add(firstLevel3);
+
+ tx.Commit();
+ }
+ }
+ }
+
+ protected override void OnTearDown() {
+ base.OnTearDown();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ session.Delete("from FourthLevel");
+ session.Delete("from ThirdLevel");
+ session.Delete("from FirstLevel");
+ tx.Commit();
+ }
+ }
+ }
+
+ [Test, Ignore("Not fixed yet")]
+ public void _1_Querying_BasedOnFourthLevelExistence_WithIsAndCasting_ShouldReturnSameEntitiesAsLinqToObjects() {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Any(second => second.ThirdLevel is SpecificThirdLevel &&
+ ((SpecificThirdLevel)second.ThirdLevel).FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Any(second => second.ThirdLevel is SpecificThirdLevel &&
+ ((SpecificThirdLevel)second.ThirdLevel).FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(s => ((SpecificThirdLevel)s.ThirdLevel).FourthLevels
+ .Any()
+ )
+ )
+ );
+ }
+ }
+ }
+
+ [Test, Ignore("Not fixed yet")]
+ public void _2_Querying_BasedOnFourthLevelExistence_WithSelectAndOfType_ShouldReturnSameEntitiesAsLinqToObjects()
+ {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Select(second => second.ThirdLevel)
+ .OfType<SpecificThirdLevel>()
+ .Any(specificThird => specificThird.FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Select(second => second.ThirdLevel)
+ .OfType<SpecificThirdLevel>()
+ .Any(specificThird => specificThird.FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(s => ((SpecificThirdLevel)s.ThirdLevel).FourthLevels
+ .Any()
+ )
+ )
+ );
+ }
+ }
+ }
+
+ [Test, Ignore("Not fixed yet")]
+ public void _3_Querying_BasedOnFourthLevelProperty_WithIsAndCasting_ShouldReturnSameEntitiesAsLinqToObjects()
+ {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Any(second => second.ThirdLevel is SpecificThirdLevel &&
+ ((SpecificThirdLevel)second.ThirdLevel).FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Any(second => second.ThirdLevel is SpecificThirdLevel &&
+ ((SpecificThirdLevel)second.ThirdLevel).FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(s => ((SpecificThirdLevel)s.ThirdLevel).FourthLevels
+ .Any(fo => fo.SomeString == "first")
+ )
+ )
+ );
+ }
+ }
+ }
+
+ [Test, Ignore("Not fixed yet")]
+ public void _4_Querying_BasedOnFourthLevelProperty_WithSelectAndOfType_ShouldReturnSameEntitiesAsLinqToObjects()
+ {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Select(second => second.ThirdLevel)
+ .OfType<SpecificThirdLevel>()
+ .Any(specificThird => specificThird.FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Select(second => second.ThirdLevel)
+ .OfType<SpecificThirdLevel>()
+ .Any(specificThird => specificThird.FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(s => ((SpecificThirdLevel)s.ThirdLevel).FourthLevels
+ .Any(fo => fo.SomeString == "first")
+ )
+ )
+ );
+ }
+ }
+ }
+
+ [Test]
+ public void _5_Querying_BasedOnFourthLevelExistence_ByUsingSpecificThirdLevelProperty_ShouldReturnSameEntitiesAsLinqToObjects() {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any()
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any()
+ )
+ )
+ );
+ }
+ }
+ }
+
+ [Test]
+ public void _6_Querying_BasedOnFourthLevelProperty_ByUsingSpecificThirdLevelProperty_ShouldReturnSameEntitiesAsLinqToObjects() {
+ var expected = _firstLevels
+ .Where(first => first.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ using (ISession session = OpenSession()) {
+ using (ITransaction tx = session.BeginTransaction()) {
+ var result = session.Query<FirstLevel>()
+ .Where(first => first.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ .ToList();
+
+ Assert.AreEqual(expected.Count, result.Count);
+ Assert.IsTrue(result
+ .All(f => f.SecondLevels
+ .Any(second => second.SpecificThirdLevel.FourthLevels
+ .Any(fourth => fourth.SomeString == "first")
+ )
+ )
+ );
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Mappings.hbm.xml
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Mappings.hbm.xml (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Mappings.hbm.xml 2011-06-19 21:50:00 UTC (rev 5963)
@@ -0,0 +1,41 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
+ assembly="NHibernate.Test"
+ namespace="NHibernate.Test.NHSpecificTest.NH2693">
+ <class name="FirstLevel">
+ <!-- Id column must be same as key column of SecondLevels because of NH-2692 -->
+ <id name="Id" column="first_level_id">
+ <generator class="guid" />
+ </id>
+ <set name="SecondLevels">
+ <key column="first_level_id" />
+ <composite-element class="SecondLevelComponent">
+ <parent name="FirstLevel" />
+ <many-to-one name="ThirdLevel" />
+ <many-to-one name="SpecificThirdLevel" />
+ <property name="SomeBool" />
+ </composite-element>
+ </set>
+ </class>
+
+ <class name="ThirdLevel">
+ <id name="Id">
+ <generator class="guid" />
+ </id>
+ <joined-subclass name="SpecificThirdLevel">
+ <key column="third_level_id" />
+ <set name="FourthLevels" cascade="all-delete-orphan" inverse="true">
+ <key column="third_level_id" />
+ <one-to-many class="FourthLevel"/>
+ </set>
+ </joined-subclass>
+ </class>
+
+ <class name="FourthLevel">
+ <id name="Id">
+ <generator class="guid" />
+ </id>
+ <many-to-one name="SpecificThirdLevel" column="third_level_id"/>
+ <property name="SomeString" />
+ </class>
+</hibernate-mapping>
\ No newline at end of file
Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Model.cs
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Model.cs (rev 0)
+++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2693/Model.cs 2011-06-19 21:50:00 UTC (rev 5963)
@@ -0,0 +1,40 @@
+using Iesi.Collections.Generic;
+
+namespace NHibernate.Test.NHSpecificTest.NH2693 {
+ using System;
+ using System.Collections.Generic;
+
+ public class FirstLevel {
+ public FirstLevel() {
+ SecondLevels = new HashedSet<SecondLevelComponent>();
+ }
+
+ public virtual Guid Id { get; set; }
+ public virtual ICollection<SecondLevelComponent> SecondLevels { get; set; }
+ }
+
+ public class SecondLevelComponent {
+ public virtual FirstLevel FirstLevel { get; set; }
+ public virtual ThirdLevel ThirdLevel { get; set; }
+ public virtual SpecificThirdLevel SpecificThirdLevel { get; set; }
+ public virtual bool SomeBool { get; set; }
+ }
+
+ public abstract class ThirdLevel {
+ public virtual Guid Id { get; set; }
+ }
+
+ public class SpecificThirdLevel : ThirdLevel {
+ public SpecificThirdLevel() {
+ FourthLevels = new HashedSet<FourthLevel>();
+ }
+
+ public virtual ICollection<FourthLevel> FourthLevels { get; set; }
+ }
+
+ public class FourthLevel {
+ public virtual Guid Id { get; set; }
+ public virtual SpecificThirdLevel SpecificThirdLevel { get; set; }
+ public virtual string SomeString { get; set; }
+ }
+}
Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj
===================================================================
--- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-19 21:20:05 UTC (rev 5962)
+++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-06-19 21:50:00 UTC (rev 5963)
@@ -855,6 +855,8 @@
<Compile Include="NHSpecificTest\NH2673\CachingWithTrasformerTests.cs" />
<Compile Include="NHSpecificTest\NH2691\Domain.cs" />
<Compile Include="NHSpecificTest\NH2691\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2693\Fixture.cs" />
+ <Compile Include="NHSpecificTest\NH2693\Model.cs" />
<Compile Include="NHSpecificTest\NH2697\ArticleGroupItem.cs" />
<Compile Include="NHSpecificTest\NH2697\ArticleItem.cs" />
<Compile Include="NHSpecificTest\NH2697\SampleTest.cs" />
@@ -2724,6 +2726,7 @@
<EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" />
</ItemGroup>
<ItemGroup>
+ <EmbeddedResource Include="NHSpecificTest\NH2693\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2746\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2700\Mappings.hbm.xml" />
<EmbeddedResource Include="NHSpecificTest\NH2296\Mappings.hbm.xml" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|