From: <fab...@us...> - 2011-05-16 14:37:33
|
Revision: 5829 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5829&view=rev Author: fabiomaulo Date: 2011-05-16 14:37:27 +0000 (Mon, 16 May 2011) Log Message: ----------- Tests (not fixed) for NH-2705 and NH-2615 Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/ItemBase.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Mappings.hbm.xml trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemBase.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemDetails.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Test.cs Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/ItemBase.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/ItemBase.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/ItemBase.cs 2011-05-16 14:37:27 UTC (rev 5829) @@ -0,0 +1,12 @@ +namespace NHibernate.Test.NHSpecificTest.NH2705 +{ + public class ItemBase + { + public virtual int Id { get; set; } + public virtual SubItemBase SubItem { get; set; } + } + + public class ItemWithComponentSubItem : ItemBase {} + + public class ItemWithManyToOneSubItem : ItemBase {} +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Mappings.hbm.xml 2011-05-16 14:37:27 UTC (rev 5829) @@ -0,0 +1,38 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" + assembly="NHibernate.Test" + namespace="NHibernate.Test.NHSpecificTest.NH2705"> + + <class name="ItemBase"> + <id name="Id" type="int"> + <generator class="native" /> + </id> + <joined-subclass name="ItemWithComponentSubItem"> + <key column="ItemBase_id"/> + <component name="SubItem" class="SubItemComponent"> + <property name="Name" /> + <many-to-one class="SubItemDetails" name="Details" column="SubItemDetails_id"/> + </component> + </joined-subclass> + <joined-subclass name="ItemWithManyToOneSubItem"> + <key column="ItemBase_id"/> + <many-to-one class="SubItemEntity" name="SubItem" column="SubItem_id"/> + </joined-subclass> + </class> + + <class name="SubItemEntity"> + <id name="Id" type="int"> + <generator class="native" /> + </id> + <property name="Name" /> + <many-to-one class="SubItemDetails" name="Details" column="SubItemDetails_id" /> + </class> + + <class name="SubItemDetails"> + <id name="Id" type="int"> + <generator class="native" /> + </id> + <property name="Name" /> + </class> +</hibernate-mapping> + Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemBase.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemBase.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemBase.cs 2011-05-16 14:37:27 UTC (rev 5829) @@ -0,0 +1,15 @@ +namespace NHibernate.Test.NHSpecificTest.NH2705 +{ + public class SubItemBase + { + public virtual string Name { get; set; } + public virtual SubItemDetails Details { get; set; } + } + + public class SubItemComponent : SubItemBase {} + + public class SubItemEntity : SubItemBase + { + public virtual int Id { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemDetails.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemDetails.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/SubItemDetails.cs 2011-05-16 14:37:27 UTC (rev 5829) @@ -0,0 +1,8 @@ +namespace NHibernate.Test.NHSpecificTest.NH2705 +{ + public class SubItemDetails + { + public virtual int Id { get; set; } + public virtual string Name { get; set; } + } +} \ No newline at end of file Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Test.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Test.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2705/Test.cs 2011-05-16 14:37:27 UTC (rev 5829) @@ -0,0 +1,74 @@ +using System.Collections.Generic; +using System.Linq; +using NHibernate.Linq; +using NUnit.Framework; +using SharpTestsEx; + +// ReSharper disable InconsistentNaming + +namespace NHibernate.Test.NHSpecificTest.NH2705 +{ + [TestFixture, Ignore("Not fixed yet")] + public class Test : BugTestCase + { + private static IEnumerable<T> GetAndFetch<T>(string name, ISession session) where T : ItemBase + { + // this is a valid abstraction, the calling code should be able to ask that a property is eagerly loaded/available + // without having to know how it is mapped + return session.Query<T>() + .Fetch(p => p.SubItem).ThenFetch(p => p.Details) // should be able to fetch .Details when used with components (NH2615) + .Where(p => p.SubItem.Name == name).ToList(); + } + + [Test] + public void Fetch_OnComponent_ShouldNotThrow() + { + using (ISession s = OpenSession()) + { + Executing.This(() => GetAndFetch<ItemWithComponentSubItem>("hello", s)).Should().NotThrow(); + } + } + + [Test] + public void Fetch_OnManyToOne_ShouldNotThrow() + { + using (ISession s = OpenSession()) + { + Executing.This(() => GetAndFetch<ItemWithManyToOneSubItem>("hello", s)).Should().NotThrow(); + } + } + + [Test] + public void HqlQueryWithFetch_WhenDerivedClassesUseComponentAndManyToOne_DoesNotGenerateInvalidSql() + { + using (ISession s = OpenSession()) + { + using (var log = new SqlLogSpy()) + { + Executing.This(() => s.CreateQuery("from ItemBase i left join fetch i.SubItem").List() + ).Should().NotThrow(); + } + } + } + + [Test] + public void LinqQueryWithFetch_WhenDerivedClassesUseComponentAndManyToOne_DoesNotGenerateInvalidSql() + { + using (ISession s = OpenSession()) + { + using (var log = new SqlLogSpy()) + { + Executing.This(() => s.Query<ItemBase>() + .Fetch(p => p.SubItem).ToList() + ).Should().NotThrow(); + + + // fetching second level properties should work too + Executing.This(() => s.Query<ItemBase>() + .Fetch(p => p.SubItem).ThenFetch(p => p.Details).ToList() + ).Should().NotThrow(); + } + } + } + } +} \ No newline at end of file Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-16 02:07:33 UTC (rev 5828) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-16 14:37:27 UTC (rev 5829) @@ -832,6 +832,10 @@ <Compile Include="NHSpecificTest\NH2697\ArticleGroupItem.cs" /> <Compile Include="NHSpecificTest\NH2697\ArticleItem.cs" /> <Compile Include="NHSpecificTest\NH2697\SampleTest.cs" /> + <Compile Include="NHSpecificTest\NH2705\ItemBase.cs" /> + <Compile Include="NHSpecificTest\NH2705\SubItemBase.cs" /> + <Compile Include="NHSpecificTest\NH2705\SubItemDetails.cs" /> + <Compile Include="NHSpecificTest\NH2705\Test.cs" /> <Compile Include="NHSpecificTest\Properties\CompositePropertyRefTest.cs" /> <Compile Include="NHSpecificTest\Properties\DynamicEntityTest.cs" /> <Compile Include="NHSpecificTest\Properties\Model.cs" /> @@ -2674,6 +2678,7 @@ <EmbeddedResource Include="NHSpecificTest\NH1291AnonExample\Mappings.hbm.xml" /> </ItemGroup> <ItemGroup> + <EmbeddedResource Include="NHSpecificTest\NH2705\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2546\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2697\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH1642\Mappings.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |