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