diff --git a/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2005.csproj b/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2005.csproj index 2bb99b17..9773630d 100644 --- a/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2005.csproj +++ b/test/Spring/Spring.Aop.Tests/Spring.Aop.Tests.2005.csproj @@ -301,6 +301,6 @@ echo "Copying .xml files for tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Aop.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Aop.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Aop.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file diff --git a/test/Spring/Spring.Core.Tests/Expressions/ExpressionEvaluatorTests.cs b/test/Spring/Spring.Core.Tests/Expressions/ExpressionEvaluatorTests.cs index 014dd3ca..2d4d8d65 100644 --- a/test/Spring/Spring.Core.Tests/Expressions/ExpressionEvaluatorTests.cs +++ b/test/Spring/Spring.Core.Tests/Expressions/ExpressionEvaluatorTests.cs @@ -41,6 +41,7 @@ using Spring.Context.Support; using Spring.Core; using Spring.Core.TypeResolution; using Spring.Expressions; +using Spring.Expressions.Processors; using Spring.Objects; using Spring.Objects.Factory; using Spring.Threading; @@ -1565,6 +1566,37 @@ namespace Spring.Expressions Assert.AreEqual(TransactionOption.Required, webMethod.TransactionOption); } + [Test] + public void TestDelegateFunctionExpressions() + { + //for purposes of an example in documentation + Hashtable vars = new Hashtable(); + vars["sqrt"] = new DoubleFunction(Sqrt); + double result = (double)ExpressionEvaluator.GetValue(null, "#sqrt(64)", vars); + Assert.AreEqual(8, result); + + vars = new Hashtable(); + vars["max"] = new DoubleFunctionTwoArgs(Max); + result = (double) ExpressionEvaluator.GetValue(null, "#max(5,25)", vars); + Assert.AreEqual(25, result); + + + } + + private delegate double DoubleFunction(double arg); + + private double Sqrt(double arg) + { + return Math.Sqrt(arg); + } + + private delegate double DoubleFunctionTwoArgs(double arg1, double arg2); + + private double Max(double arg1, double arg2) + { + return Math.Max(arg1, arg2); + } + /// /// Type lambda expressions. /// @@ -1626,6 +1658,43 @@ namespace Spring.Expressions Assert.AreEqual(0, ExpressionEvaluator.GetValue(null, "count()")); } + [Test] + public void TestCustomCollectionProcessor() + { + // Test for the purposes of creating documentation example. + Hashtable vars = new Hashtable(); + vars["EvenSum"] = new IntEvenSumCollectionProcessor(); + Assert.AreEqual(6, ExpressionEvaluator.GetValue(null, "{1, 2, 3, 4}.EvenSum()", vars)); + + } + + private class IntEvenSumCollectionProcessor : ICollectionProcessor + { + public object Process(ICollection source, object[] args) + { + object total = 0d; + foreach (object item in source) + { + if (item != null) + { + if (NumberUtils.IsInteger(item)) + { + if ((int)item % 2 == 0) + { + total = NumberUtils.Add(total, item); + } + } + else + { + throw new ArgumentException("Sum can only be calculated for a collection of numeric values."); + } + } + } + + return total; + } + } + [Test] public void TestSumAggregator() { diff --git a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2005.csproj b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2005.csproj index d792700d..3359a5d8 100644 --- a/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2005.csproj +++ b/test/Spring/Spring.Core.Tests/Spring.Core.Tests.2005.csproj @@ -868,6 +868,6 @@ echo "Copying .xml files for tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Core.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Core.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Core.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate.Integration.Tests/Spring.Data.NHibernate.Integration.Tests.2005.csproj b/test/Spring/Spring.Data.NHibernate.Integration.Tests/Spring.Data.NHibernate.Integration.Tests.2005.csproj index c1d9cdd8..e7af015f 100644 --- a/test/Spring/Spring.Data.NHibernate.Integration.Tests/Spring.Data.NHibernate.Integration.Tests.2005.csproj +++ b/test/Spring/Spring.Data.NHibernate.Integration.Tests/Spring.Data.NHibernate.Integration.Tests.2005.csproj @@ -124,6 +124,6 @@ echo "Copying .xml files for tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Integration.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Integration.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Integration.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file diff --git a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2005.csproj b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2005.csproj index eca1d86a..804238c9 100644 --- a/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2005.csproj +++ b/test/Spring/Spring.Data.NHibernate.Tests/Spring.Data.NHibernate.Tests.2005.csproj @@ -118,6 +118,6 @@ echo "Copying .xml files for tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.NHibernate.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file diff --git a/test/Spring/Spring.Data.Tests/Spring.Data.Tests.2005.csproj b/test/Spring/Spring.Data.Tests/Spring.Data.Tests.2005.csproj index 5d4617d1..13c80e7d 100644 --- a/test/Spring/Spring.Data.Tests/Spring.Data.Tests.2005.csproj +++ b/test/Spring/Spring.Data.Tests/Spring.Data.Tests.2005.csproj @@ -188,6 +188,6 @@ echo "Copying .xml files for tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Data.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Data.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file diff --git a/test/Spring/Spring.Services.Tests/Spring.Services.Tests.2005.csproj b/test/Spring/Spring.Services.Tests/Spring.Services.Tests.2005.csproj index dd74a801..fa6b3c8c 100644 --- a/test/Spring/Spring.Services.Tests/Spring.Services.Tests.2005.csproj +++ b/test/Spring/Spring.Services.Tests/Spring.Services.Tests.2005.csproj @@ -183,6 +183,6 @@ echo "Copying .xml files for Spring.Services tests" xcopy "$(ProjectDir)Data" ..\..\..\..\build\VS.Net.2005\Spring.Services.Tests\$(ConfigurationName)\ /y /s /q /d -xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Services.Tests\$(ConfigurationName)\ /y /s /q +xcopy "$(ProjectDir)$(TargetFileName).config" ..\..\..\..\build\VS.Net.2005\Spring.Services.Tests\$(ConfigurationName)\ /y /s /q \ No newline at end of file