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