Update of /cvsroot/nant/nant/tests/NAnt.Core/Filters In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv3148/tests/NAnt.Core/Filters Added Files: ExpandExpressionsTest.cs FilterChainTest.cs FilterTestBase.cs ReplaceCharacterTest.cs ReplaceTokensTest.cs TabsToSpaces.cs Log Message: Tests for the filterchain implementation. First check in. --- NEW FILE: ExpandExpressionsTest.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.Text; using NAnt.Core.Filters; using NUnit.Framework; namespace Tests.NAnt.Core.Filters { /// <summary> /// Tests the ExpandExpressions class. /// </summary> [TestFixture] public class ExpandExpressionsTest : FilterTestBase { const string _tagName = "expandexpressions"; const char _stringChar = 'A'; const int _minStringExpressionLength = 5; [Test] public void InstantiationTest () { base.TestFilter(@"<" + _tagName + @" order=""0"" />", " ", " "); } [Test] public void EmptyFileTest () { base.TestFilter(@"<" + _tagName + @" order=""0"" />", "", ""); } [Test] [ExpectedException(typeof(TestBuildException))] public void NoOrderTest () { base.TestFilter(@"<" + _tagName + @" />", " ", " "); } [Test] public void ExpressionTest () { base.TestFilter(@"<" + _tagName + @" order=""0"" />", "${'la' + 'la'}", "lala"); } [Test] public void MaxSafeExpressionTest () { base.TestFilter(@"<" + _tagName + @" order=""0"" />", GetString(4090) + GetStringExpression(2048), GetString(4090) + GetString(2048 - _minStringExpressionLength)); } [Test] public void UnsafeButExpandedExpressionTest () { base.TestFilter(@"<" + _tagName + @" order=""0"" />", GetStringExpression(4095), GetString(4095 - _minStringExpressionLength)); } [Test] public void UnsafeAndIgnoredExpressionTest () { string temp = GetString(1) + GetStringExpression(4095); base.TestFilter(@"<" + _tagName + @" order=""0"" />", temp, temp); } private string GetStringExpression (int expressionLength) { if (expressionLength < _minStringExpressionLength) { throw new ArgumentException("A string expression can't be shorter than \"${''}\"!"); } StringBuilder bldr = new StringBuilder(expressionLength); bldr.Append("${'"); bldr.Append(_stringChar, expressionLength - _minStringExpressionLength); bldr.Append("'}"); return bldr.ToString(); } private string GetString (int length) { if (length < 0) { throw new ArgumentException("A string can't be shorter than \"\"!"); } StringBuilder bldr = new StringBuilder(length); bldr.Append(_stringChar, length); return bldr.ToString(); } } } --- NEW FILE: FilterChainTest.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.Text; using NAnt.Core.Filters; using NUnit.Framework; namespace Tests.NAnt.Core.Filters { /// <summary> /// Tests the FilterChain classes. /// </summary> [TestFixture] public class FilterChainTest : FilterTestBase { [Test] public void NoFilerTest () { base.TestFilter("", " ", " "); } [Test] public void NoFilterEmptyFileTest () { base.TestFilter(@"", "", ""); } [Test] public void MalformedFilterTest () { base.TestFilter(@"<blah />", " ", " "); } [Test] public void FilterOrderTest1a () { base.TestFilter(@"<replacecharacter chartoreplace=""^"" replacementchar=""$"" order=""0"" /> <expandexpressions order=""1"" />", "^{'la' + 'la'}", "lala"); } [Test] public void FilterOrderTest1b () { base.TestFilter(@"<expandexpressions order=""1"" /> <replacecharacter chartoreplace=""^"" replacementchar=""$"" order=""0"" />", "^{'la' + 'la'}", "lala"); } [Test] public void FilterOrderTest2a () { base.TestFilter(@"<replacecharacter chartoreplace=""^"" replacementchar=""$"" order=""1"" /> <expandexpressions order=""0"" />", "^{'la' + 'la'}", "${'la' + 'la'}"); } [Test] public void FilterOrderTest2b () { base.TestFilter(@"<expandexpressions order=""0"" /> <replacecharacter chartoreplace=""^"" replacementchar=""$"" order=""1"" />", "^{'la' + 'la'}", "${'la' + 'la'}"); } } } --- NEW FILE: FilterTestBase.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.IO; using NUnit.Framework; namespace Tests.NAnt.Core.Filters { /// <summary> /// Base class for running input through filters and checking results. /// </summary> public abstract class FilterTestBase : BuildTestBase { const string _testFileName = "filterTest.txt"; const string _destDirName = "copy"; const string _projectXmlFormat = @"<?xml version='1.0'?> <project> {0} <copy todir=""" + _destDirName + @""" verbose=""True""> <filterchain>{1}</filterchain> <fileset basedir="".""> <include name=""" + _testFileName + @""" /> </fileset> </copy> </project>"; internal void TestFilter(string filterXml, string input, string expectedOutput) { TestFilter(filterXml, input, expectedOutput, String.Empty); } internal void TestFilter(string filterXml, string input, string expectedOutput, string prologueXml) { base.CreateTempFile(_testFileName, input); base.RunBuild(string.Format(_projectXmlFormat, prologueXml, filterXml)); string actualOutput; TextReader outputFile = File.OpenText(Path.Combine(Path.Combine(base.TempDirName, _destDirName), _testFileName)); try { actualOutput = outputFile.ReadToEnd(); } finally { outputFile.Close(); } Assert.AreEqual(expectedOutput, actualOutput, "Filter's actual output does not match expected output!"); } protected override void TearDown() { base.TearDown (); } } } --- NEW FILE: ReplaceCharacterTest.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.Text; using NAnt.Core.Filters; using NUnit.Framework; namespace Tests.NAnt.Core.Filters { /// <summary> /// Tests the ReplaceCharacter class. /// </summary> [TestFixture] public class ReplaceCharacterTest : FilterTestBase { const string _tagName = "replacecharacter"; const char _stringChar = 'A'; const int _minStringExpressionLength = 5; [Test] public void InstantiationTest () { base.TestFilter(@"<" + _tagName + @" chartoreplace=""^"" replacementchar=""$"" order=""0"" />", " ", " "); } [Test] public void EmptyFileTest () { base.TestFilter(@"<" + _tagName + @" chartoreplace=""^"" replacementchar=""$"" order=""0"" />", " ", " "); } [Test] [ExpectedException(typeof(TestBuildException))] public void NoCharToReplaceTest () { base.TestFilter(@"<" + _tagName + @" replacementchar=""$"" order=""0"" />", " ", " "); } [Test] [ExpectedException(typeof(TestBuildException))] public void NoReplacementCharTest () { base.TestFilter(@"<" + _tagName + @" chartoreplace=""^"" order=""0"" />", " ", " "); } [Test] [ExpectedException(typeof(TestBuildException))] public void NoOrderTest () { base.TestFilter(@"<" + _tagName + @" chartoreplace=""^"" replacementchar=""$"" />", " ", " "); } [Test] public void BasicTest () { base.TestFilter(@"<" + _tagName + @" chartoreplace=""^"" replacementchar=""$"" order=""0"" />", "hello!\n^\n^^\ngoodbye!", "hello!\n$\n$$\ngoodbye!"); } } } --- NEW FILE: ReplaceTokensTest.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.Text; using NAnt.Core.Filters; using NUnit.Framework; namespace Tests.NAnt.Core.Filters { /// <summary> /// Tests the ReplaceTokens class. /// </summary> [TestFixture] public class ReplaceTokensTest : FilterTestBase { const string _tagName = "replacetokens"; [Test] public void InstantiationTest() { base.TestFilter(@"<" + _tagName + @" endtoken=""@"" order=""0""><token key=""FALA"" value=""falalalalalalalala"" /></" + _tagName + @">", " ", " "); } [Test] public void EmptyFileTest() { base.TestFilter(@"<" + _tagName + @" endtoken=""@"" order=""0""><token key=""FALA"" value=""falalalalalalalala"" /></" + _tagName + @">", "", ""); } /// <summary> /// Test if two tokens are next to each other /// </summary> [Test] public void ExtraTokenTest() { string prologueXml = null; string filterXml = @"<" + _tagName + @" endtoken=""@"" order=""0""> <token key=""OLD"" value=""NEW""/> </" + _tagName + @">"; string input = @"@@OLD@"; string expectedOutput = @"@NEW"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test if two tokens are next to each other /// </summary> [Test] public void ExtraTokenTesta() { string prologueXml = null; string filterXml = @"<" + _tagName + @" endtoken=""@"" order=""0""> <token key=""OLD"" value=""NEW""/> </" + _tagName + @">"; string input = @"@OLD@@"; string expectedOutput = @"NEW@"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test with filter tag /// </summary> [Test] public void TestFilterTag() { string prologueXml = null; string filterXml = @"<filter assembly=""NAnt.Core"" class=""NAnt.Core.Filters.ReplaceTokens"" order=""0""> <param name=""endtoken"" value=""^""/> <param name=""OLD"" value=""NEW""/> </filter>"; string input = @"@OLD^@"; string expectedOutput = @"NEW@"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test if two tokens are next to each other with different beginning and ending tokens /// </summary> [Test] public void ExtraTokenTestDiffToc() { //Token on left string prologueXml = null; string filterXml = @"<" + _tagName + @" endtoken=""^"" order=""0""> <token key=""OLD"" value=""NEW""/> </" + _tagName + @">"; string input = @"@@OLD^"; string expectedOutput = @"@NEW"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test if two tokens are next to each other with different beginning and ending tokens /// </summary> [Test] public void ExtraTokenTestDiffToca() { //Token on right string prologueXml = null; string filterXml = @"<" + _tagName + @" endtoken=""^"" order=""0""> <token key=""OLD"" value=""NEW""/> </" + _tagName + @">"; string input = @"@OLD^^"; string expectedOutput = @"NEW^"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test with the same beginning and ending tokens /// </summary> [Test] public void ComplexTest() { string prologueXml = @"<property name=""DATE"" value=""13 May 2004"" />"; string filterXml = @"<" + _tagName + @" endtoken=""@"" order=""0""> <token key=""DATE"" value=""${DATE}""/> <token key=""INNER_TEST"" value=""--$$--""/> <token key=""EOF"" value=""End of file..""/> </" + _tagName + @">"; string input = @"public class ProjectName { static void Main() { /* @@ @@ @@ @@@ @@@@ @@@@@ @@@@@ @@@@ @DATE@ @@@@@@@@@@@@@@@@@@@@@DATE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^^^^^^^^^^^^^^^^^^^^@DATE^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@@@@@@@@@@@@@@@@@^@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @ @ @ @DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @@@DATE^@DATE^^DATE@@DATE@^DATE@@DATE^@DATE@ @ @ @ #@DATE^@DATE@^DATE@^DATE^@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @INNER_@GOO@^ @GOO@ */ System.Console.WriteLine(""Hello World using C# ~@DATE@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); } }//@EOF@"; string expectedOutput = @"public class ProjectName { static void Main() { /* @@ @@ @@ @@@ @@@@ @@@@@ @@@@@ @@@@ 13 May 2004 @@@@@@@@@@@@@@@@@@@@13 May 2004@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^^^^^^^^^^^^^^^^^^^^@DATE^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@@@@@@@@@@@@@@@@@^@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@13 May 200413 May 200413 May 200413 May 200413 May 200413 May 200413 May 2004 @ @ @ 13 May 200413 May 200413 May 200413 May 200413 May 200413 May 200413 May 200413 May 200413 May 200413 May 2004 @@@DATE^@DATE^^DATE@13 May 2004^DATE@@DATE^13 May 2004 @ @ @ #@DATE^13 May 2004^DATE@^DATE^13 May 200413 May 200413 May 200413 May 200413 May 200413 May 2004 @INNER_@GOO@^ @GOO@ */ System.Console.WriteLine(""Hello World using C# ~13 May 2004~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); } }//End of file.."; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test with different beginning and ending tokens /// </summary> [Test] public void ComplexTest1() { string prologueXml = @"<property name=""DATE"" value=""13 May 2004"" />"; string filterXml = @"<" + _tagName + @" endtoken=""^"" order=""0""> <token key=""DATE"" value=""${DATE}""/> <token key=""INNER_TEST"" value=""--$$--""/> <token key=""EOF"" value=""End of file..""/> </" + _tagName + @">"; string input = @"public class ProjectName { static void Main() { /* @@ @@ @@ @@@ @@@@ @@@@@ @@@@@ @@@@ @DATE@ @@@@@@@@@@@@@@@@@@@@@DATE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^^^^^^^^^^^^^^^^^^^^@DATE^@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@@@@@@@@@@@@@@@@@^@DATE^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @ @ @ @DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @@@DATE^@DATE^^DATE@@DATE@^DATE@@DATE^@DATE@ @ @ @ #@DATE^@DATE@^DATE@^DATE^@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @INNER_@GOO@^ @GOO@ */ System.Console.WriteLine(""Hello World using C# ~@DATE@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); } }//@EOF@"; string expectedOutput = @"public class ProjectName { static void Main() { /* @@ @@ @@ @@@ @@@@ @@@@@ @@@@@ @@@@ @DATE@ @@@@@@@@@@@@@@@@@@@@@DATE@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@@DATE @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ ^^^^^^^^^^^^^^^^^^^^13 May 2004@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@@@@@@@@@@@@@@@@@@@13 May 2004^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@@@@@@@@@@@@@@@@@^13 May 2004^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @ @ @ @DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @@13 May 200413 May 2004^DATE@@DATE@^DATE@13 May 2004@DATE@ @ @ @ #13 May 2004@DATE@^DATE@^DATE^@DATE@@DATE@@DATE@@DATE@@DATE@@DATE@ @INNER_@GOO@^ @GOO@ */ System.Console.WriteLine(""Hello World using C# ~@DATE@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); System.Console.WriteLine(""Hello World using C# ~@INNER_@GOO@@~ ""); } }//@EOF@"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } } } --- NEW FILE: TabsToSpaces.cs --- // NAnt - A .NET build tool // Copyright (C) 2002-2003 Scott Hernandez // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // using System; using System.Text; using NAnt.Core.Filters; using NUnit.Framework; //Test namespace Tests.NAnt.Core.Filters { /// <summary> /// Tests the TabsToSpaces classes. /// </summary> [TestFixture] public class TabsToSpaces : FilterTestBase { const string _tagName = "tabstospaces"; /// <summary> /// Empty input file /// </summary> [Test] public void EmptyFileBasicTest () { base.TestFilter(@"<" + _tagName + @" order=""0""/>", "", ""); } /// <summary> /// Test default parameters /// </summary> [Test] public void DefaultParam() { string prologueXml = null; string filterXml = @"<" + _tagName + @" order=""0""/>"; string input = "\t\tTEST\t\t"; string expectedOutput = @" TEST "; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test specify replacement character /// </summary> [Test] public void SpecityCharacter() { string prologueXml = null; string filterXml = @"<" + _tagName + @" replacementchar=""*"" order=""0""/>"; string input = "\t\tTEST\t\t"; string expectedOutput = @"********TEST********"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test specity replacement character and replacement spaces /// </summary> [Test] public void SpecityAll() { string prologueXml = null; string filterXml = @"<" + _tagName + @" replacementchar=""*"" replacementspaces=""6"" order=""0""/>"; string input = "\t\tTEST\t\t"; string expectedOutput = @"************TEST************"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test with no tabs /// </summary> [Test] public void SpecityAllNoTabs() { string prologueXml = null; string filterXml = @"<" + _tagName + @" replacementchar=""*"" replacementspaces=""6"" order=""0""/>"; string input = "NO TABS ARE PRESENT"; string expectedOutput = @"NO TABS ARE PRESENT"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test using the filter tag instead of <tabstospaces> /// </summary> [Test] public void UsingFilterTag() { string prologueXml = null; string filterXml = @"<filter assembly=""NAnt.Core"" class=""NAnt.Core.Filters.TabsToSpaces"" order=""0""> <param name=""replacementchar"" value=""*""/> <param name=""replacementspaces"" value=""6""/> </filter>"; string input = "\t\tTEST\t\t"; string expectedOutput = @"************TEST************"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } /// <summary> /// Test mixing tabs and characters /// </summary> [Test] public void Scattered() { string prologueXml = null; string filterXml = @"<" + _tagName + @" replacementchar=""*"" replacementspaces=""1"" order=""0""/>"; string input = "aaaa\tbb\t\tb\tzzzz\tz\tz\tffff"; string expectedOutput = @"aaaa*bb**b*zzzz*z*z*ffff"; base.TestFilter(filterXml, input, expectedOutput, prologueXml); } } } |