From: <pa...@us...> - 2011-05-30 16:22:32
|
Revision: 5885 http://nhibernate.svn.sourceforge.net/nhibernate/?rev=5885&view=rev Author: patearl Date: 2011-05-30 16:22:26 +0000 (Mon, 30 May 2011) Log Message: ----------- NH-2318: Added failing tests. Modified Paths: -------------- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj Added Paths: ----------- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Fixture.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/LinqMapping.cs trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Mappings.hbm.xml Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Fixture.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Fixture.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Fixture.cs 2011-05-30 16:22:26 UTC (rev 5885) @@ -0,0 +1,151 @@ +using System; +using System.Collections.Generic; +using NHibernate.Criterion; +using NUnit.Framework; +using NHibernate.Linq; +using System.Linq; +using NHibernate.Linq.Functions; + +namespace NHibernate.Test.NHSpecificTest.NH2318 +{ + [TestFixture] + public class Fixture : BugTestCase + { + protected override void Configure(Cfg.Configuration configuration) + { + base.Configure(configuration); + configuration.SetProperty("linqtohql.generatorsregistry", "NHibernate.Test.NHSpecificTest.NH2318.ExtendedLinqtoHqlGeneratorsRegistry, NHibernate.Test"); + } + + protected override void OnTearDown() + { + using( ISession s = sessions.OpenSession() ) + { + s.Delete( "from A" ); + s.Flush(); + } + } + + private void AddObjects() + { + ISession s = OpenSession(); + try + { + s.Save(new A { Name = "first" }); + s.Save(new A { Name = "second" }); + s.Save(new A { Name = "aba" }); + s.Flush(); + } + finally + { + s.Close(); + } + } + + [Test] + [Ignore] + public void CriteriaTrimFunctionsWithParameters() + { + AddObjects(); + + ISession s = OpenSession(); + try + { + ICriteria criteria = s.CreateCriteria(typeof (A)).Add( + Restrictions.Eq( + Projections.SqlFunction( + "trim", + NHibernateUtil.String, + Projections.Constant("f"), + Projections.Property("Name")), + "irst")); + IList<A> items = criteria.List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + } + finally + { + s.Close(); + } + } + + [Test] + [Ignore] + public void LinqTrimFunctionsWithParameters() + { + AddObjects(); + + ISession s = OpenSession(); + try + { + IList<A> items = s.Query<A>().Where(a => a.Name.TrimLeading("f").TrimTrailing("t") == "irs").ToList(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + string trimString = "a"; + items = s.Query<A>().Where(a => a.Name.TrimLeading(trimString).TrimTrailing(trimString) == "b").ToList(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("aba", items[0].Name); + } + finally + { + s.Close(); + } + } + + [Test] + [Ignore] + public void HqlTrimFunctionsWithParameters() + { + AddObjects(); + + ISession s = OpenSession(); + try + { + IList<A> items = s.CreateQuery("from A a where a.Name = :p0 or a.Name <> :p0 order by a.Name").SetParameter("p0", "first").List<A>(); + Assert.AreEqual(3, items.Count); + Assert.AreEqual("aba", items[0].Name); + Assert.AreEqual("first", items[1].Name); + Assert.AreEqual("second", items[2].Name); + + items = s.CreateQuery("from A a where a.Name = ? or a.Name <> ? order by a.Name").SetParameter(0, "first").SetParameter(1, "first").List<A>(); + Assert.AreEqual(3, items.Count); + Assert.AreEqual("aba", items[0].Name); + Assert.AreEqual("first", items[1].Name); + Assert.AreEqual("second", items[2].Name); + + items = s.CreateQuery("from A a where TRIM(LEADING :p0 FROM a.Name) = 'irst'").SetParameter("p0", "f").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(TRAILING :p0 FROM TRIM(LEADING :p1 FROM a.Name)) = 'irs'").SetParameter("p0", "t").SetParameter("p1", "f").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(TRAILING :p0 FROM TRIM(LEADING :p0 FROM a.Name)) = 'b'").SetParameter("p0", "a").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("aba", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(TRAILING :p0 FROM a.Name) = 'firs'").SetParameter("p0", "t").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(LEADING ? FROM a.Name) = 'irst'").SetParameter(0, "f").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(TRAILING ? FROM a.Name) = 'firs'").SetParameter(0, "t").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + + items = s.CreateQuery("from A a where TRIM(TRAILING ? FROM TRIM(LEADING ? FROM a.Name)) = 'irs'").SetParameter(0, "t").SetParameter(1, "f").List<A>(); + Assert.AreEqual(1, items.Count); + Assert.AreEqual("first", items[0].Name); + } + finally + { + s.Close(); + } + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/LinqMapping.cs =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/LinqMapping.cs (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/LinqMapping.cs 2011-05-30 16:22:26 UTC (rev 5885) @@ -0,0 +1,60 @@ +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using System.Linq.Expressions; +using System.Reflection; +using System.Text; +using NHibernate.Hql.Ast; +using NHibernate.Linq; +using NHibernate.Linq.Functions; +using NHibernate.Linq.Visitors; + +namespace NHibernate.Test.NHSpecificTest.NH2318 +{ + public static class TrimExtensions + { + public static string TrimLeading(this string source, string trim) + { + // Bogus implementation so we know for sure it's the database doing the work. + throw new NotImplementedException(); + } + + public static string TrimTrailing(this string source, string trim) + { + // Bogus implementation so we know for sure it's the database doing the work. + throw new NotImplementedException(); + } + } + public class TrimGenerator : BaseHqlGeneratorForMethod + { + public TrimGenerator() + { + SupportedMethods = new[] { + ReflectionHelper.GetMethodDefinition(() => TrimExtensions.TrimLeading(null, null)), + ReflectionHelper.GetMethodDefinition(() => TrimExtensions.TrimTrailing(null, null)), + }; + } + + public override HqlTreeNode BuildHql(MethodInfo method, Expression targetObject, ReadOnlyCollection<Expression> arguments, HqlTreeBuilder treeBuilder, IHqlExpressionVisitor visitor) + { + string leadingOrTrailing = "TRAILING"; + if (method.Name == "TrimLeading") + leadingOrTrailing = "LEADING"; + + return treeBuilder.MethodCall("Trim", + treeBuilder.Ident(leadingOrTrailing), + visitor.Visit(arguments[1]).AsExpression(), + treeBuilder.Ident("FROM"), + visitor.Visit(arguments[0]).AsExpression()); + } + } + + public class ExtendedLinqtoHqlGeneratorsRegistry : DefaultLinqToHqlGeneratorsRegistry + { + public ExtendedLinqtoHqlGeneratorsRegistry() + { + this.Merge(new TrimGenerator()); + } + } +} Added: trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Mappings.hbm.xml =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Mappings.hbm.xml (rev 0) +++ trunk/nhibernate/src/NHibernate.Test/NHSpecificTest/NH2318/Mappings.hbm.xml 2011-05-30 16:22:26 UTC (rev 5885) @@ -0,0 +1,9 @@ +<?xml version="1.0" encoding="utf-8" ?> +<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" assembly="NHibernate.Test" namespace="NHibernate.Test.NHSpecificTest.NH2318"> + <class name="A" table="a" lazy="false"> + <id name="Id" column="id" unsaved-value="null"> + <generator class="native" /> + </id> + <property name="Name" column="aname" /> + </class> +</hibernate-mapping> Modified: trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj =================================================================== --- trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-30 16:11:57 UTC (rev 5884) +++ trunk/nhibernate/src/NHibernate.Test/NHibernate.Test.csproj 2011-05-30 16:22:26 UTC (rev 5885) @@ -731,6 +731,9 @@ <Compile Include="NHSpecificTest\NH2313\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2317\Domain.cs" /> <Compile Include="NHSpecificTest\NH2317\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2318\A.cs" /> + <Compile Include="NHSpecificTest\NH2318\Fixture.cs" /> + <Compile Include="NHSpecificTest\NH2318\LinqMapping.cs" /> <Compile Include="NHSpecificTest\NH2322\Fixture.cs" /> <Compile Include="NHSpecificTest\NH2322\Model.cs" /> <Compile Include="NHSpecificTest\NH2322\PostUpdateEventListener.cs" /> @@ -2753,6 +2756,7 @@ <EmbeddedResource Include="NHSpecificTest\NH2362\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2244\Mappings.hbm.xml" /> <EmbeddedResource Include="NHSpecificTest\NH2394\Mappings.hbm.xml" /> + <EmbeddedResource Include="NHSpecificTest\NH2318\Mappings.hbm.xml" /> <EmbeddedResource Include="DynamicEntity\Interceptor\Customer.hbm.xml" /> <EmbeddedResource Include="Any\Person.hbm.xml" /> <EmbeddedResource Include="Any\Properties.hbm.xml" /> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |