You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by bo...@apache.org on 2017/12/01 15:49:37 UTC

[14/23] ant git commit: Normalise tabulation and line breaks (cf master)

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java b/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java
index b8ce90f..abfb70f 100644
--- a/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/CommandlineJavaTest.java
@@ -1,191 +1,191 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-
-import org.apache.tools.ant.MagicNames;
-import org.apache.tools.ant.Project;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertNull;
-
-/**
- * JUnit testcases for org.apache.tools.ant.CommandlineJava
- *
- */
-public class CommandlineJavaTest {
-
-    private String cloneVm;
-
-
-    private Project project;
-
-    @Before
-    public void setUp() {
-        project = new Project();
-        project.setBasedir(System.getProperty("root"));
-        project.setProperty("build.sysclasspath", "ignore");
-        cloneVm = System.getProperty("ant.build.clonevm");
-        if (cloneVm != null) {
-            System.setProperty("ant.build.clonevm", "false");
-        }
-    }
-
-    @After
-    public void tearDown() {
-        if (cloneVm != null) {
-            System.setProperty("ant.build.clonevm", cloneVm);
-        }
-    }
-
-    @Test
-    public void testGetCommandline() throws Exception {
-        CommandlineJava c = new CommandlineJava();
-        c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
-        c.setClassname("junit.textui.TestRunner");
-        c.createVmArgument().setValue("-Djava.compiler=NONE");
-        String[] s = c.getCommandline();
-        assertEquals("no classpath", 4, s.length);
-        /*
-         * After changing CommandlineJava to search for the java
-         * executable, I don't know, how to tests the value returned
-         * here without using the same logic as applied in the class
-         * itself.
-         *
-         * assertTrue("no classpath", "java", s[0]);
-         */
-        assertEquals("no classpath", "-Djava.compiler=NONE", s[1]);
-        assertEquals("no classpath", "junit.textui.TestRunner", s[2]);
-        assertEquals("no classpath",
-                     "org.apache.tools.ant.CommandlineJavaTest", s[3]);
-        try {
-            c.clone();
-        } catch (NullPointerException ex) {
-            fail("cloning should work without classpath specified");
-        }
-
-        c.createClasspath(project).setLocation(project.resolveFile("build.xml"));
-        c.createClasspath(project).setLocation(project.resolveFile(
-            System.getProperty(MagicNames.ANT_HOME)+"/lib/ant.jar"));
-        s = c.getCommandline();
-        assertEquals("with classpath", 6, s.length);
-        //        assertEquals("with classpath", "java", s[0]);
-        assertEquals("with classpath", "-Djava.compiler=NONE", s[1]);
-        assertEquals("with classpath", "-classpath", s[2]);
-        assertTrue("build.xml contained",
-               s[3].indexOf("build.xml"+java.io.File.pathSeparator) >= 0);
-        assertTrue("ant.jar contained", s[3].endsWith("ant.jar"));
-        assertEquals("with classpath", "junit.textui.TestRunner", s[4]);
-        assertEquals("with classpath",
-                     "org.apache.tools.ant.CommandlineJavaTest", s[5]);
-    }
-
-    @Test
-    public void testJarOption() throws Exception {
-        CommandlineJava c = new CommandlineJava();
-        c.createArgument().setValue("arg1");
-        c.setJar("myfile.jar");
-        c.createVmArgument().setValue("-classic");
-        c.createVmArgument().setValue("-Dx=y");
-        String[] s = c.getCommandline();
-        assertEquals("-classic", s[1]);
-        assertEquals("-Dx=y", s[2]);
-        assertEquals("-jar", s[3]);
-        assertEquals("myfile.jar", s[4]);
-        assertEquals("arg1", s[5]);
-    }
-
-    @Test
-    public void testSysproperties() {
-        String currentClasspath = System.getProperty("java.class.path");
-        assertNotNull(currentClasspath);
-        assertNull(System.getProperty("key"));
-        CommandlineJava c = new CommandlineJava();
-        Environment.Variable v = new Environment.Variable();
-        v.setKey("key");
-        v.setValue("value");
-        c.addSysproperty(v);
-
-        project.setProperty("key2", "value2");
-        PropertySet ps = new PropertySet();
-        ps.setProject(project);
-        ps.appendName("key2");
-        c.addSyspropertyset(ps);
-
-        try {
-            c.setSystemProperties();
-            String newClasspath = System.getProperty("java.class.path");
-            assertNotNull(newClasspath);
-            assertEquals(currentClasspath, newClasspath);
-            assertNotNull(System.getProperty("key"));
-            assertEquals("value", System.getProperty("key"));
-            assertTrue(System.getProperties().containsKey("java.class.path"));
-            assertNotNull(System.getProperty("key2"));
-            assertEquals("value2", System.getProperty("key2"));
-        } finally {
-            c.restoreSystemProperties();
-        }
-        assertNull(System.getProperty("key"));
-        assertNull(System.getProperty("key2"));
-    }
-
-    @Test
-    public void testAssertions() throws Exception {
-        CommandlineJava c = new CommandlineJava();
-        c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
-        c.setClassname("junit.textui.TestRunner");
-        c.createVmArgument().setValue("-Djava.compiler=NONE");
-        Assertions a = new Assertions();
-        a.setProject(project);
-        Assertions.EnabledAssertion ea = new Assertions.EnabledAssertion();
-        ea.setClass("junit.textui.TestRunner");
-        a.addEnable(ea);
-        c.setAssertions(a);
-
-        String[] expected = new String[] {
-            null,
-            "-Djava.compiler=NONE",
-            "-ea:junit.textui.TestRunner",
-            "junit.textui.TestRunner",
-            "org.apache.tools.ant.CommandlineJavaTest",
-        };
-            
-        // only the second iteration would pass because of PR 27218
-        for (int i = 0; i < 3; i++) {
-            String[] s = c.getCommandline();
-            assertEquals(expected.length, s.length);
-            for (int j = 1; j < expected.length; j++) {
-                assertEquals(expected[j], s[j]);
-            }
-        }
-        CommandlineJava c2 = (CommandlineJava) c.clone();
-        String[] s = c2.getCommandline();
-        assertEquals(expected.length, s.length);
-        for (int j = 1; j < expected.length; j++) {
-            assertEquals(expected[j], s[j]);
-        }
-    }
-
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+
+import org.apache.tools.ant.MagicNames;
+import org.apache.tools.ant.Project;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+
+/**
+ * JUnit testcases for org.apache.tools.ant.CommandlineJava
+ *
+ */
+public class CommandlineJavaTest {
+
+    private String cloneVm;
+
+
+    private Project project;
+
+    @Before
+    public void setUp() {
+        project = new Project();
+        project.setBasedir(System.getProperty("root"));
+        project.setProperty("build.sysclasspath", "ignore");
+        cloneVm = System.getProperty("ant.build.clonevm");
+        if (cloneVm != null) {
+            System.setProperty("ant.build.clonevm", "false");
+        }
+    }
+
+    @After
+    public void tearDown() {
+        if (cloneVm != null) {
+            System.setProperty("ant.build.clonevm", cloneVm);
+        }
+    }
+
+    @Test
+    public void testGetCommandline() throws Exception {
+        CommandlineJava c = new CommandlineJava();
+        c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
+        c.setClassname("junit.textui.TestRunner");
+        c.createVmArgument().setValue("-Djava.compiler=NONE");
+        String[] s = c.getCommandline();
+        assertEquals("no classpath", 4, s.length);
+        /*
+         * After changing CommandlineJava to search for the java
+         * executable, I don't know, how to tests the value returned
+         * here without using the same logic as applied in the class
+         * itself.
+         *
+         * assertTrue("no classpath", "java", s[0]);
+         */
+        assertEquals("no classpath", "-Djava.compiler=NONE", s[1]);
+        assertEquals("no classpath", "junit.textui.TestRunner", s[2]);
+        assertEquals("no classpath",
+                     "org.apache.tools.ant.CommandlineJavaTest", s[3]);
+        try {
+            c.clone();
+        } catch (NullPointerException ex) {
+            fail("cloning should work without classpath specified");
+        }
+
+        c.createClasspath(project).setLocation(project.resolveFile("build.xml"));
+        c.createClasspath(project).setLocation(project.resolveFile(
+            System.getProperty(MagicNames.ANT_HOME)+"/lib/ant.jar"));
+        s = c.getCommandline();
+        assertEquals("with classpath", 6, s.length);
+        //        assertEquals("with classpath", "java", s[0]);
+        assertEquals("with classpath", "-Djava.compiler=NONE", s[1]);
+        assertEquals("with classpath", "-classpath", s[2]);
+        assertTrue("build.xml contained",
+               s[3].indexOf("build.xml"+java.io.File.pathSeparator) >= 0);
+        assertTrue("ant.jar contained", s[3].endsWith("ant.jar"));
+        assertEquals("with classpath", "junit.textui.TestRunner", s[4]);
+        assertEquals("with classpath",
+                     "org.apache.tools.ant.CommandlineJavaTest", s[5]);
+    }
+
+    @Test
+    public void testJarOption() throws Exception {
+        CommandlineJava c = new CommandlineJava();
+        c.createArgument().setValue("arg1");
+        c.setJar("myfile.jar");
+        c.createVmArgument().setValue("-classic");
+        c.createVmArgument().setValue("-Dx=y");
+        String[] s = c.getCommandline();
+        assertEquals("-classic", s[1]);
+        assertEquals("-Dx=y", s[2]);
+        assertEquals("-jar", s[3]);
+        assertEquals("myfile.jar", s[4]);
+        assertEquals("arg1", s[5]);
+    }
+
+    @Test
+    public void testSysproperties() {
+        String currentClasspath = System.getProperty("java.class.path");
+        assertNotNull(currentClasspath);
+        assertNull(System.getProperty("key"));
+        CommandlineJava c = new CommandlineJava();
+        Environment.Variable v = new Environment.Variable();
+        v.setKey("key");
+        v.setValue("value");
+        c.addSysproperty(v);
+
+        project.setProperty("key2", "value2");
+        PropertySet ps = new PropertySet();
+        ps.setProject(project);
+        ps.appendName("key2");
+        c.addSyspropertyset(ps);
+
+        try {
+            c.setSystemProperties();
+            String newClasspath = System.getProperty("java.class.path");
+            assertNotNull(newClasspath);
+            assertEquals(currentClasspath, newClasspath);
+            assertNotNull(System.getProperty("key"));
+            assertEquals("value", System.getProperty("key"));
+            assertTrue(System.getProperties().containsKey("java.class.path"));
+            assertNotNull(System.getProperty("key2"));
+            assertEquals("value2", System.getProperty("key2"));
+        } finally {
+            c.restoreSystemProperties();
+        }
+        assertNull(System.getProperty("key"));
+        assertNull(System.getProperty("key2"));
+    }
+
+    @Test
+    public void testAssertions() throws Exception {
+        CommandlineJava c = new CommandlineJava();
+        c.createArgument().setValue("org.apache.tools.ant.CommandlineJavaTest");
+        c.setClassname("junit.textui.TestRunner");
+        c.createVmArgument().setValue("-Djava.compiler=NONE");
+        Assertions a = new Assertions();
+        a.setProject(project);
+        Assertions.EnabledAssertion ea = new Assertions.EnabledAssertion();
+        ea.setClass("junit.textui.TestRunner");
+        a.addEnable(ea);
+        c.setAssertions(a);
+
+        String[] expected = new String[] {
+            null,
+            "-Djava.compiler=NONE",
+            "-ea:junit.textui.TestRunner",
+            "junit.textui.TestRunner",
+            "org.apache.tools.ant.CommandlineJavaTest",
+        };
+
+        // only the second iteration would pass because of PR 27218
+        for (int i = 0; i < 3; i++) {
+            String[] s = c.getCommandline();
+            assertEquals(expected.length, s.length);
+            for (int j = 1; j < expected.length; j++) {
+                assertEquals(expected[j], s[j]);
+            }
+        }
+        CommandlineJava c2 = (CommandlineJava) c.clone();
+        String[] s = c2.getCommandline();
+        assertEquals(expected.length, s.length);
+        for (int j = 1; j < expected.length; j++) {
+            assertEquals(expected[j], s[j]);
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java b/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java
index ca5fef2..e8e4442 100644
--- a/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/CommandlineTest.java
@@ -1,180 +1,180 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-import static org.junit.Assert.assertNotNull;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.CommandLine
- *
- */
-public class CommandlineTest {
-
-    @Test
-    public void testTokenizer() {
-        String[] s = Commandline.translateCommandline("1 2 3");
-        assertEquals("Simple case", 3, s.length);
-        for (int i=0; i<3; i++) {
-            assertEquals(""+(i+1), s[i]);
-        }
-
-        s = Commandline.translateCommandline("");
-        assertEquals("empty string", 0, s.length);
-
-        s = Commandline.translateCommandline(null);
-        assertEquals("null", 0, s.length);
-
-        s = Commandline.translateCommandline("1 \'2\' 3");
-        assertEquals("Simple case with single quotes", 3, s.length);
-        assertEquals("Single quotes have been stripped", "2", s[1]);
-
-        s = Commandline.translateCommandline("1 \"2\" 3");
-        assertEquals("Simple case with double quotes", 3, s.length);
-        assertEquals("Double quotes have been stripped", "2", s[1]);
-
-        s = Commandline.translateCommandline("1 \"2 3\" 4");
-        assertEquals("Case with double quotes and whitespace", 3, s.length);
-        assertEquals("Double quotes stripped, space included", "2 3", s[1]);
-
-        s = Commandline.translateCommandline("1 \"2\'3\" 4");
-        assertEquals("Case with double quotes around single quote", 3, s.length);
-        assertEquals("Double quotes stripped, single quote included", "2\'3",
-                     s[1]);
-
-        s = Commandline.translateCommandline("1 \'2 3\' 4");
-        assertEquals("Case with single quotes and whitespace", 3, s.length);
-        assertEquals("Single quotes stripped, space included", "2 3", s[1]);
-
-        s = Commandline.translateCommandline("1 \'2\"3\' 4");
-        assertEquals("Case with single quotes around double quote", 3, s.length);
-        assertEquals("Single quotes stripped, double quote included", "2\"3",
-                     s[1]);
-
-        // \ doesn't have a special meaning anymore - this is different from
-        // what the Unix sh does but causes a lot of problems on DOS
-        // based platforms otherwise
-        s = Commandline.translateCommandline("1 2\\ 3 4");
-        assertEquals("case with quoted whitespace", 4, s.length);
-        assertEquals("backslash included", "2\\", s[1]);
-
-        // "" should become a single empty argument, same for ''
-        // PR 5906
-        s = Commandline.translateCommandline("\"\" a");
-        assertEquals("Doublequoted null arg prepend", 2, s.length);
-        assertEquals("Doublequoted null arg prepend", "", s[0]);
-        assertEquals("Doublequoted null arg prepend", "a", s[1]);
-        s = Commandline.translateCommandline("a \"\"");
-        assertEquals("Doublequoted null arg append", 2, s.length);
-        assertEquals("Doublequoted null arg append", "a", s[0]);
-        assertEquals("Doublequoted null arg append", "", s[1]);
-        s = Commandline.translateCommandline("\"\"");
-        assertEquals("Doublequoted null arg", 1, s.length);
-        assertEquals("Doublequoted null arg", "", s[0]);
-
-        s = Commandline.translateCommandline("\'\' a");
-        assertEquals("Singlequoted null arg prepend", 2, s.length);
-        assertEquals("Singlequoted null arg prepend", "", s[0]);
-        assertEquals("Singlequoted null arg prepend", "a", s[1]);
-        s = Commandline.translateCommandline("a \'\'");
-        assertEquals("Singlequoted null arg append", 2, s.length);
-        assertEquals("Singlequoted null arg append", "a", s[0]);
-        assertEquals("Singlequoted null arg append", "", s[1]);
-        s = Commandline.translateCommandline("\'\'");
-        assertEquals("Singlequoted null arg", 1, s.length);
-        assertEquals("Singlequoted null arg", "", s[0]);
-
-        // now to the expected failures
-
-        try {
-            Commandline.translateCommandline("a \'b c");
-            fail("unbalanced single quotes undetected");
-        } catch (BuildException be) {
-            assertEquals("unbalanced quotes in a \'b c", be.getMessage());
-        }
-
-        try {
-            Commandline.translateCommandline("a \"b c");
-            fail("unbalanced double quotes undetected");
-        } catch (BuildException be) {
-            assertEquals("unbalanced quotes in a \"b c", be.getMessage());
-        }
-    }
-
-    @Test
-    public void testToString() {
-        assertEquals("", Commandline.toString(new String[0]));
-        assertEquals("", Commandline.toString(null));
-        assertEquals("1 2 3", Commandline.toString(new String[] {"1", "2", "3"}));
-        assertEquals("1 \"2 3\"", Commandline.toString(new String[] {"1", "2 3"}));
-        assertEquals("1 \"2\'3\"", Commandline.toString(new String[] {"1", "2\'3"}));
-        assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"}));
-    }
-
-    @Test
-    public void testAwkCommand() {
-        Commandline c = new Commandline();
-        c.setExecutable("awk");
-        c.createArgument().setValue("'NR == 2 { print $NF }'");
-        String[] s = c.getCommandline();
-        assertNotNull(s);
-        assertEquals(2, s.length);
-        assertEquals("awk", s[0]);
-        assertEquals("'NR == 2 { print $NF }'", s[1]);
-    }
-
-    @Test
-    public void testPrefix() {
-        Commandline c = new Commandline();
-        Commandline.Argument a = c.createArgument();
-        a.setValue("foo");
-        a.setPrefix("-f=");
-        String[] s = c.getCommandline();
-        assertEquals(1, s.length);
-        assertEquals("-f=foo", s[0]);
-    }
-
-    @Test
-    public void testSuffix() {
-        Commandline c = new Commandline();
-        Commandline.Argument a = c.createArgument();
-        a.setValue("foo");
-        a.setSuffix(",1");
-        String[] s = c.getCommandline();
-        assertEquals(1, s.length);
-        assertEquals("foo,1", s[0]);
-    }
-
-    @Test
-    public void testPrefixSuffixLine() {
-        Commandline c = new Commandline();
-        Commandline.Argument a = c.createArgument();
-        a.setLine("one two");
-        a.setPrefix("number ");
-        a.setSuffix(".");
-        String[] s = c.getCommandline();
-        assertEquals(2, s.length);
-        assertEquals("number one.", s[0]);
-        assertEquals("number two.", s[1]);
-    }
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import org.apache.tools.ant.BuildException;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+import static org.junit.Assert.assertNotNull;
+
+/**
+ * JUnit 3 testcases for org.apache.tools.ant.CommandLine
+ *
+ */
+public class CommandlineTest {
+
+    @Test
+    public void testTokenizer() {
+        String[] s = Commandline.translateCommandline("1 2 3");
+        assertEquals("Simple case", 3, s.length);
+        for (int i=0; i<3; i++) {
+            assertEquals(""+(i+1), s[i]);
+        }
+
+        s = Commandline.translateCommandline("");
+        assertEquals("empty string", 0, s.length);
+
+        s = Commandline.translateCommandline(null);
+        assertEquals("null", 0, s.length);
+
+        s = Commandline.translateCommandline("1 \'2\' 3");
+        assertEquals("Simple case with single quotes", 3, s.length);
+        assertEquals("Single quotes have been stripped", "2", s[1]);
+
+        s = Commandline.translateCommandline("1 \"2\" 3");
+        assertEquals("Simple case with double quotes", 3, s.length);
+        assertEquals("Double quotes have been stripped", "2", s[1]);
+
+        s = Commandline.translateCommandline("1 \"2 3\" 4");
+        assertEquals("Case with double quotes and whitespace", 3, s.length);
+        assertEquals("Double quotes stripped, space included", "2 3", s[1]);
+
+        s = Commandline.translateCommandline("1 \"2\'3\" 4");
+        assertEquals("Case with double quotes around single quote", 3, s.length);
+        assertEquals("Double quotes stripped, single quote included", "2\'3",
+                     s[1]);
+
+        s = Commandline.translateCommandline("1 \'2 3\' 4");
+        assertEquals("Case with single quotes and whitespace", 3, s.length);
+        assertEquals("Single quotes stripped, space included", "2 3", s[1]);
+
+        s = Commandline.translateCommandline("1 \'2\"3\' 4");
+        assertEquals("Case with single quotes around double quote", 3, s.length);
+        assertEquals("Single quotes stripped, double quote included", "2\"3",
+                     s[1]);
+
+        // \ doesn't have a special meaning anymore - this is different from
+        // what the Unix sh does but causes a lot of problems on DOS
+        // based platforms otherwise
+        s = Commandline.translateCommandline("1 2\\ 3 4");
+        assertEquals("case with quoted whitespace", 4, s.length);
+        assertEquals("backslash included", "2\\", s[1]);
+
+        // "" should become a single empty argument, same for ''
+        // PR 5906
+        s = Commandline.translateCommandline("\"\" a");
+        assertEquals("Doublequoted null arg prepend", 2, s.length);
+        assertEquals("Doublequoted null arg prepend", "", s[0]);
+        assertEquals("Doublequoted null arg prepend", "a", s[1]);
+        s = Commandline.translateCommandline("a \"\"");
+        assertEquals("Doublequoted null arg append", 2, s.length);
+        assertEquals("Doublequoted null arg append", "a", s[0]);
+        assertEquals("Doublequoted null arg append", "", s[1]);
+        s = Commandline.translateCommandline("\"\"");
+        assertEquals("Doublequoted null arg", 1, s.length);
+        assertEquals("Doublequoted null arg", "", s[0]);
+
+        s = Commandline.translateCommandline("\'\' a");
+        assertEquals("Singlequoted null arg prepend", 2, s.length);
+        assertEquals("Singlequoted null arg prepend", "", s[0]);
+        assertEquals("Singlequoted null arg prepend", "a", s[1]);
+        s = Commandline.translateCommandline("a \'\'");
+        assertEquals("Singlequoted null arg append", 2, s.length);
+        assertEquals("Singlequoted null arg append", "a", s[0]);
+        assertEquals("Singlequoted null arg append", "", s[1]);
+        s = Commandline.translateCommandline("\'\'");
+        assertEquals("Singlequoted null arg", 1, s.length);
+        assertEquals("Singlequoted null arg", "", s[0]);
+
+        // now to the expected failures
+
+        try {
+            Commandline.translateCommandline("a \'b c");
+            fail("unbalanced single quotes undetected");
+        } catch (BuildException be) {
+            assertEquals("unbalanced quotes in a \'b c", be.getMessage());
+        }
+
+        try {
+            Commandline.translateCommandline("a \"b c");
+            fail("unbalanced double quotes undetected");
+        } catch (BuildException be) {
+            assertEquals("unbalanced quotes in a \"b c", be.getMessage());
+        }
+    }
+
+    @Test
+    public void testToString() {
+        assertEquals("", Commandline.toString(new String[0]));
+        assertEquals("", Commandline.toString(null));
+        assertEquals("1 2 3", Commandline.toString(new String[] {"1", "2", "3"}));
+        assertEquals("1 \"2 3\"", Commandline.toString(new String[] {"1", "2 3"}));
+        assertEquals("1 \"2\'3\"", Commandline.toString(new String[] {"1", "2\'3"}));
+        assertEquals("1 \'2\"3\'", Commandline.toString(new String[] {"1", "2\"3"}));
+    }
+
+    @Test
+    public void testAwkCommand() {
+        Commandline c = new Commandline();
+        c.setExecutable("awk");
+        c.createArgument().setValue("'NR == 2 { print $NF }'");
+        String[] s = c.getCommandline();
+        assertNotNull(s);
+        assertEquals(2, s.length);
+        assertEquals("awk", s[0]);
+        assertEquals("'NR == 2 { print $NF }'", s[1]);
+    }
+
+    @Test
+    public void testPrefix() {
+        Commandline c = new Commandline();
+        Commandline.Argument a = c.createArgument();
+        a.setValue("foo");
+        a.setPrefix("-f=");
+        String[] s = c.getCommandline();
+        assertEquals(1, s.length);
+        assertEquals("-f=foo", s[0]);
+    }
+
+    @Test
+    public void testSuffix() {
+        Commandline c = new Commandline();
+        Commandline.Argument a = c.createArgument();
+        a.setValue("foo");
+        a.setSuffix(",1");
+        String[] s = c.getCommandline();
+        assertEquals(1, s.length);
+        assertEquals("foo,1", s[0]);
+    }
+
+    @Test
+    public void testPrefixSuffixLine() {
+        Commandline c = new Commandline();
+        Commandline.Argument a = c.createArgument();
+        a.setLine("one two");
+        a.setPrefix("number ");
+        a.setSuffix(".");
+        String[] s = c.getCommandline();
+        assertEquals(2, s.length);
+        assertEquals("number one.", s[0]);
+        assertEquals("number two.", s[1]);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java b/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java
index f021228..31b56f9 100644
--- a/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/DescriptionTest.java
@@ -1,59 +1,59 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildFileRule;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-/**
- * FilterSet testing
- *
- */
-public class DescriptionTest {
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-    
-    @Test
-    public void test1() {
-        buildRule.configureProject("src/etc/testcases/types/description1.xml");
-        assertEquals("Single description failed", "Test Project Description", buildRule.getProject().getDescription());
-    }
-
-    @Test
-    public void test2() {
-        buildRule.configureProject("src/etc/testcases/types/description2.xml");
-        assertEquals("Multi line description failed", "Multi Line\nProject Description", buildRule.getProject().getDescription());
-    }
-
-    @Test
-    public void test3() {
-        buildRule.configureProject("src/etc/testcases/types/description3.xml");
-        assertEquals("Multi instance description failed", "Multi Instance Project Description", buildRule.getProject().getDescription());
-    }
-
-    @Test
-    public void test4() {
-        buildRule.configureProject("src/etc/testcases/types/description4.xml");
-        assertEquals("Multi instance nested description failed", "Multi Instance Nested Project Description", buildRule.getProject().getDescription());
-    }
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import org.apache.tools.ant.BuildFileRule;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * FilterSet testing
+ *
+ */
+public class DescriptionTest {
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+
+    @Test
+    public void test1() {
+        buildRule.configureProject("src/etc/testcases/types/description1.xml");
+        assertEquals("Single description failed", "Test Project Description", buildRule.getProject().getDescription());
+    }
+
+    @Test
+    public void test2() {
+        buildRule.configureProject("src/etc/testcases/types/description2.xml");
+        assertEquals("Multi line description failed", "Multi Line\nProject Description", buildRule.getProject().getDescription());
+    }
+
+    @Test
+    public void test3() {
+        buildRule.configureProject("src/etc/testcases/types/description3.xml");
+        assertEquals("Multi instance description failed", "Multi Instance Project Description", buildRule.getProject().getDescription());
+    }
+
+    @Test
+    public void test4() {
+        buildRule.configureProject("src/etc/testcases/types/description4.xml");
+        assertEquals("Multi instance nested description failed", "Multi Instance Nested Project Description", buildRule.getProject().getDescription());
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java b/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java
index 4fd2b5a..8c659ba 100644
--- a/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/DirSetTest.java
@@ -1,94 +1,94 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import org.apache.tools.ant.BuildException;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.DirSet.
- *
- */
-public class DirSetTest extends AbstractFileSetTest {
-
-    protected AbstractFileSet getInstance() {
-        return new DirSet();
-    }
-
-    @Test
-    public void testFileSetIsNoDirSet() {
-        DirSet ds = (DirSet) getInstance();
-        ds.setProject(getProject());
-        FileSet fs = new FileSet();
-        fs.setProject(getProject());
-        getProject().addReference("dummy", fs);
-        ds.setRefid(new Reference(getProject(), "dummy"));
-        try {
-            ds.getDir(getProject());
-            fail("DirSet created from FileSet reference");
-        } catch (BuildException e) {
-            assertEquals("dummy doesn\'t denote a DirSet", e.getMessage());
-        }
-
-        ds = (DirSet) getInstance();
-        ds.setProject(getProject());
-        getProject().addReference("dummy2", ds);
-        fs.setRefid(new Reference(getProject(), "dummy2"));
-        try {
-            fs.getDir(getProject());
-            fail("FileSet created from DirSet reference");
-        } catch (BuildException e) {
-            assertEquals("dummy2 doesn\'t denote a FileSet", e.getMessage());
-        }
-    }
-
-    public void testToString() throws Exception {
-        File tmp = File.createTempFile("DirSetTest", "");
-        try {
-            tmp.delete();
-            File a = new File(tmp, "a");
-            a.mkdirs();
-            File b = new File(tmp, "b");
-            File bc = new File(b, "c");
-            bc.mkdirs();
-            new FileOutputStream(new File(a, "x")).close();
-            new FileOutputStream(new File(b, "x")).close();
-            new FileOutputStream(new File(bc, "x")).close();
-            DirSet ds = new DirSet();
-            ds.setProject(getProject());
-            ds.setDir(tmp);
-            ds.setIncludes("b/");
-            assertEquals("b;b" + File.separator + "c", ds.toString());
-        } finally {
-            new File(tmp, "a/x").delete();
-            new File(tmp, "a").delete();
-            new File(tmp, "b/c/x").delete();
-            new File(tmp, "b/c").delete();
-            new File(tmp, "b/x").delete();
-            new File(tmp, "b").delete();
-            tmp.delete();
-        }
-    }
-
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import org.apache.tools.ant.BuildException;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit 3 testcases for org.apache.tools.ant.types.DirSet.
+ *
+ */
+public class DirSetTest extends AbstractFileSetTest {
+
+    protected AbstractFileSet getInstance() {
+        return new DirSet();
+    }
+
+    @Test
+    public void testFileSetIsNoDirSet() {
+        DirSet ds = (DirSet) getInstance();
+        ds.setProject(getProject());
+        FileSet fs = new FileSet();
+        fs.setProject(getProject());
+        getProject().addReference("dummy", fs);
+        ds.setRefid(new Reference(getProject(), "dummy"));
+        try {
+            ds.getDir(getProject());
+            fail("DirSet created from FileSet reference");
+        } catch (BuildException e) {
+            assertEquals("dummy doesn\'t denote a DirSet", e.getMessage());
+        }
+
+        ds = (DirSet) getInstance();
+        ds.setProject(getProject());
+        getProject().addReference("dummy2", ds);
+        fs.setRefid(new Reference(getProject(), "dummy2"));
+        try {
+            fs.getDir(getProject());
+            fail("FileSet created from DirSet reference");
+        } catch (BuildException e) {
+            assertEquals("dummy2 doesn\'t denote a FileSet", e.getMessage());
+        }
+    }
+
+    public void testToString() throws Exception {
+        File tmp = File.createTempFile("DirSetTest", "");
+        try {
+            tmp.delete();
+            File a = new File(tmp, "a");
+            a.mkdirs();
+            File b = new File(tmp, "b");
+            File bc = new File(b, "c");
+            bc.mkdirs();
+            new FileOutputStream(new File(a, "x")).close();
+            new FileOutputStream(new File(b, "x")).close();
+            new FileOutputStream(new File(bc, "x")).close();
+            DirSet ds = new DirSet();
+            ds.setProject(getProject());
+            ds.setDir(tmp);
+            ds.setIncludes("b/");
+            assertEquals("b;b" + File.separator + "c", ds.toString());
+        } finally {
+            new File(tmp, "a/x").delete();
+            new File(tmp, "a").delete();
+            new File(tmp, "b/c/x").delete();
+            new File(tmp, "b/c").delete();
+            new File(tmp, "b/x").delete();
+            new File(tmp, "b").delete();
+            tmp.delete();
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java b/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java
index 7961b72..dcb8a78 100644
--- a/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/EnumeratedAttributeTest.java
@@ -1,106 +1,106 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-
-import org.apache.tools.ant.BuildException;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * JUnit testcases for org.apache.tools.ant.EnumeratedAttribute.
- */
-public class EnumeratedAttributeTest {
-
-    private static String[] expected = {"a", "b", "c"};
-
-    @Test
-    public void testContains() {
-        EnumeratedAttribute t1 = new TestNormal();
-        for (int i=0; i<expected.length; i++) {
-            assertTrue(expected[i]+" is in TestNormal",
-                   t1.containsValue(expected[i]));
-            assertTrue(expected[i].toUpperCase()+" is in TestNormal",
-                   !t1.containsValue(expected[i].toUpperCase()));
-        }
-        assertTrue("TestNormal doesn\'t have \"d\" attribute",
-               !t1.containsValue("d"));
-        assertTrue("TestNull doesn\'t have \"d\" attribute and doesn\'t die",
-               !(new TestNull()).containsValue("d"));
-    }
-
-    @Test
-    public void testFactory() {
-		Factory ea = (Factory)EnumeratedAttribute.getInstance(Factory.class, "one");
-		assertEquals("Factory did not set the right value.", ea.getValue(), "one");
-		try {
-	    	EnumeratedAttribute.getInstance(Factory.class, "illegal");
-	    	fail("Factory should fail when trying to set an illegal value.");
-		} catch (BuildException be) {
-			// was expected
-            //TODO assert exception message
-		}
-	}
-
-    @Test
-	public void testExceptions() {
-        EnumeratedAttribute t1 = new TestNormal();
-        for (int i=0; i<expected.length; i++) {
-            try {
-                t1.setValue(expected[i]);
-            } catch (BuildException be) {
-                fail("unexpected exception for value "+expected[i]);
-            }
-        }
-        try {
-            t1.setValue("d");
-            fail("expected exception for value \"d\"");
-        } catch (BuildException be) {
-         //TODO assert build exception
-        }
-        try {
-            (new TestNull()).setValue("d");
-            fail("expected exception for value \"d\" in TestNull");
-        } catch (BuildException be) {
-            //TODO assert exception message
-        }
-    }
-
-    public static class TestNormal extends EnumeratedAttribute {
-        public String[] getValues() {
-            return expected;
-        }
-    }
-
-    public static class TestNull extends EnumeratedAttribute {
-        public String[] getValues() {
-            return null;
-        }
-    }
-
-    public static class Factory extends EnumeratedAttribute {
-    	public String[] getValues() {
-    		return new String[] { "one", "two", "three" };
-    	}
-    }
-    
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+
+import org.apache.tools.ant.BuildException;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * JUnit testcases for org.apache.tools.ant.EnumeratedAttribute.
+ */
+public class EnumeratedAttributeTest {
+
+    private static String[] expected = {"a", "b", "c"};
+
+    @Test
+    public void testContains() {
+        EnumeratedAttribute t1 = new TestNormal();
+        for (int i=0; i<expected.length; i++) {
+            assertTrue(expected[i]+" is in TestNormal",
+                   t1.containsValue(expected[i]));
+            assertTrue(expected[i].toUpperCase()+" is in TestNormal",
+                   !t1.containsValue(expected[i].toUpperCase()));
+        }
+        assertTrue("TestNormal doesn\'t have \"d\" attribute",
+               !t1.containsValue("d"));
+        assertTrue("TestNull doesn\'t have \"d\" attribute and doesn\'t die",
+               !(new TestNull()).containsValue("d"));
+    }
+
+    @Test
+    public void testFactory() {
+        Factory ea = (Factory)EnumeratedAttribute.getInstance(Factory.class, "one");
+        assertEquals("Factory did not set the right value.", ea.getValue(), "one");
+        try {
+            EnumeratedAttribute.getInstance(Factory.class, "illegal");
+            fail("Factory should fail when trying to set an illegal value.");
+        } catch (BuildException be) {
+            // was expected
+            //TODO assert exception message
+        }
+    }
+
+    @Test
+    public void testExceptions() {
+        EnumeratedAttribute t1 = new TestNormal();
+        for (int i=0; i<expected.length; i++) {
+            try {
+                t1.setValue(expected[i]);
+            } catch (BuildException be) {
+                fail("unexpected exception for value "+expected[i]);
+            }
+        }
+        try {
+            t1.setValue("d");
+            fail("expected exception for value \"d\"");
+        } catch (BuildException be) {
+         //TODO assert build exception
+        }
+        try {
+            (new TestNull()).setValue("d");
+            fail("expected exception for value \"d\" in TestNull");
+        } catch (BuildException be) {
+            //TODO assert exception message
+        }
+    }
+
+    public static class TestNormal extends EnumeratedAttribute {
+        public String[] getValues() {
+            return expected;
+        }
+    }
+
+    public static class TestNull extends EnumeratedAttribute {
+        public String[] getValues() {
+            return null;
+        }
+    }
+
+    public static class Factory extends EnumeratedAttribute {
+        public String[] getValues() {
+            return new String[] { "one", "two", "three" };
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/FileListTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/FileListTest.java b/src/tests/junit/org/apache/tools/ant/types/FileListTest.java
index 1393b00..0fe59f7 100644
--- a/src/tests/junit/org/apache/tools/ant/types/FileListTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/FileListTest.java
@@ -1,163 +1,163 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileRule;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.io.File;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- * Some tests for filelist.
- */
-
-public class FileListTest {
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-    
-    @Before
-    public void setUp() {
-        buildRule.configureProject("src/etc/testcases/types/filelist.xml");
-    }
-    
-    @Test
-    public void testEmptyElementIfIsReference() {
-        FileList f = new FileList();
-        f.setDir(buildRule.getProject().resolveFile("."));
-        try {
-            f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
-            fail("Can add reference to FileList with directory attribute set.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileList();
-        f.setFiles("foo.xml,c/d/bar.xml");
-        try {
-            f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
-            fail("Can add reference to FileList with file attribute set.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-
-        f = new FileList();
-        f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
-        try {
-            f.setFiles("a/b/foo.java");
-            fail("Can set files in FileList that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-        try {
-            f.setDir(buildRule.getProject().resolveFile("."));
-            fail("Can set dir in FileList that is a reference.");
-        } catch (BuildException be) {
-            assertEquals("You must not specify more than one attribute when using refid",
-                         be.getMessage());
-        }
-    }
-
-    @Test
-    public void testCircularReferenceCheck() {
-        FileList f = new FileList();
-        buildRule.getProject().addReference("dummy", f);
-        f.setRefid(new Reference(buildRule.getProject(), "dummy"));
-        try {
-            f.getDir(buildRule.getProject());
-            fail("Can make FileList a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f.getFiles(buildRule.getProject());
-            fail("Can make FileList a Reference to itself.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3 --> dummy1
-        FileList f1 = new FileList();
-        buildRule.getProject().addReference("dummy1", f1);
-        f1.setRefid(new Reference(buildRule.getProject(), "dummy2"));
-        FileList f2 = new FileList();
-        buildRule.getProject().addReference("dummy2", f2);
-        f2.setRefid(new Reference(buildRule.getProject(), "dummy3"));
-        FileList f3 = new FileList();
-        buildRule.getProject().addReference("dummy3", f3);
-        f3.setRefid(new Reference(buildRule.getProject(), "dummy1"));
-        try {
-            f1.getDir(buildRule.getProject());
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-        try {
-            f1.getFiles(buildRule.getProject());
-            fail("Can make circular reference.");
-        } catch (BuildException be) {
-            assertEquals("This data type contains a circular reference.",
-                         be.getMessage());
-        }
-
-        // dummy1 --> dummy2 --> dummy3
-        // (which has the Project's basedir as root).
-        f1 = new FileList();
-        buildRule.getProject().addReference("dummy1", f1);
-        f1.setRefid(new Reference(buildRule.getProject(), "dummy2"));
-        f2 = new FileList();
-        buildRule.getProject().addReference("dummy2", f2);
-        f2.setRefid(new Reference(buildRule.getProject(), "dummy3"));
-        f3 = new FileList();
-        buildRule.getProject().addReference("dummy3", f3);
-        f3.setDir(buildRule.getProject().resolveFile("."));
-        File dir = f1.getDir(buildRule.getProject());
-        assertEquals("Dir is basedir", dir, buildRule.getProject().getBaseDir());
-    }
-
-    @Test
-    public void testSimple() {
-        buildRule.executeTarget("simple");
-        assertEquals("/abc/a", buildRule.getLog());
-    }
-
-    @Test
-    public void testDouble() {
-        buildRule.executeTarget("double");
-        assertEquals("/abc/a:/abc/b", buildRule.getLog());
-    }
-
-    @Test
-    public void testNested() {
-        buildRule.executeTarget("nested");
-        assertEquals("/abc/a:/abc/b", buildRule.getLog());
-    }
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ * Some tests for filelist.
+ */
+
+public class FileListTest {
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+
+    @Before
+    public void setUp() {
+        buildRule.configureProject("src/etc/testcases/types/filelist.xml");
+    }
+
+    @Test
+    public void testEmptyElementIfIsReference() {
+        FileList f = new FileList();
+        f.setDir(buildRule.getProject().resolveFile("."));
+        try {
+            f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
+            fail("Can add reference to FileList with directory attribute set.");
+        } catch (BuildException be) {
+            assertEquals("You must not specify more than one attribute when using refid",
+                         be.getMessage());
+        }
+
+        f = new FileList();
+        f.setFiles("foo.xml,c/d/bar.xml");
+        try {
+            f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
+            fail("Can add reference to FileList with file attribute set.");
+        } catch (BuildException be) {
+            assertEquals("You must not specify more than one attribute when using refid",
+                         be.getMessage());
+        }
+
+        f = new FileList();
+        f.setRefid(new Reference(buildRule.getProject(), "dummyref"));
+        try {
+            f.setFiles("a/b/foo.java");
+            fail("Can set files in FileList that is a reference.");
+        } catch (BuildException be) {
+            assertEquals("You must not specify more than one attribute when using refid",
+                         be.getMessage());
+        }
+        try {
+            f.setDir(buildRule.getProject().resolveFile("."));
+            fail("Can set dir in FileList that is a reference.");
+        } catch (BuildException be) {
+            assertEquals("You must not specify more than one attribute when using refid",
+                         be.getMessage());
+        }
+    }
+
+    @Test
+    public void testCircularReferenceCheck() {
+        FileList f = new FileList();
+        buildRule.getProject().addReference("dummy", f);
+        f.setRefid(new Reference(buildRule.getProject(), "dummy"));
+        try {
+            f.getDir(buildRule.getProject());
+            fail("Can make FileList a Reference to itself.");
+        } catch (BuildException be) {
+            assertEquals("This data type contains a circular reference.",
+                         be.getMessage());
+        }
+        try {
+            f.getFiles(buildRule.getProject());
+            fail("Can make FileList a Reference to itself.");
+        } catch (BuildException be) {
+            assertEquals("This data type contains a circular reference.",
+                         be.getMessage());
+        }
+
+        // dummy1 --> dummy2 --> dummy3 --> dummy1
+        FileList f1 = new FileList();
+        buildRule.getProject().addReference("dummy1", f1);
+        f1.setRefid(new Reference(buildRule.getProject(), "dummy2"));
+        FileList f2 = new FileList();
+        buildRule.getProject().addReference("dummy2", f2);
+        f2.setRefid(new Reference(buildRule.getProject(), "dummy3"));
+        FileList f3 = new FileList();
+        buildRule.getProject().addReference("dummy3", f3);
+        f3.setRefid(new Reference(buildRule.getProject(), "dummy1"));
+        try {
+            f1.getDir(buildRule.getProject());
+            fail("Can make circular reference.");
+        } catch (BuildException be) {
+            assertEquals("This data type contains a circular reference.",
+                         be.getMessage());
+        }
+        try {
+            f1.getFiles(buildRule.getProject());
+            fail("Can make circular reference.");
+        } catch (BuildException be) {
+            assertEquals("This data type contains a circular reference.",
+                         be.getMessage());
+        }
+
+        // dummy1 --> dummy2 --> dummy3
+        // (which has the Project's basedir as root).
+        f1 = new FileList();
+        buildRule.getProject().addReference("dummy1", f1);
+        f1.setRefid(new Reference(buildRule.getProject(), "dummy2"));
+        f2 = new FileList();
+        buildRule.getProject().addReference("dummy2", f2);
+        f2.setRefid(new Reference(buildRule.getProject(), "dummy3"));
+        f3 = new FileList();
+        buildRule.getProject().addReference("dummy3", f3);
+        f3.setDir(buildRule.getProject().resolveFile("."));
+        File dir = f1.getDir(buildRule.getProject());
+        assertEquals("Dir is basedir", dir, buildRule.getProject().getBaseDir());
+    }
+
+    @Test
+    public void testSimple() {
+        buildRule.executeTarget("simple");
+        assertEquals("/abc/a", buildRule.getLog());
+    }
+
+    @Test
+    public void testDouble() {
+        buildRule.executeTarget("double");
+        assertEquals("/abc/a:/abc/b", buildRule.getLog());
+    }
+
+    @Test
+    public void testNested() {
+        buildRule.executeTarget("nested");
+        assertEquals("/abc/a:/abc/b", buildRule.getLog());
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java b/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java
index f58a3f0..8a1c35a 100644
--- a/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/FileSetTest.java
@@ -1,36 +1,36 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-
-/**
- * JUnit 3 testcases for org.apache.tools.ant.types.FileSet.
- *
- * <p>This doesn't actually test much, mainly reference handling.
- *
- */
-
-public class FileSetTest extends AbstractFileSetTest {
-
-
-    protected AbstractFileSet getInstance() {
-        return new FileSet();
-    }
-
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+
+/**
+ * JUnit 3 testcases for org.apache.tools.ant.types.FileSet.
+ *
+ * <p>This doesn't actually test much, mainly reference handling.
+ *
+ */
+
+public class FileSetTest extends AbstractFileSetTest {
+
+
+    protected AbstractFileSet getInstance() {
+        return new FileSet();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java b/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java
index 7122ea1..9a17687 100644
--- a/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/FilterSetTest.java
@@ -1,239 +1,239 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileRule;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import java.io.File;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.util.Hashtable;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-/**
- * FilterSet testing
- *
- */
-public class FilterSetTest {
-
-    static private final int BUF_SIZE = 32768;
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-
-    @Before
-    public void setUp() {
-        buildRule.configureProject("src/etc/testcases/types/filterset.xml");
-    }
-
-    @After
-    public void tearDown() {
-        buildRule.executeTarget("cleanup");
-    }
-
-    @Test
-    public void test1() throws IOException {
-        buildRule.executeTarget("test1");
-        assertTrue("Filterset 1 failed", compareFiles("src/etc/testcases/types/gold/filterset1.txt",
-                                                      "src/etc/testcases/types/dest1.txt"));
-    }
-
-    @Test
-    public void test2() throws IOException {
-        buildRule.executeTarget("test2");
-        assertTrue("Filterset 2 failed", compareFiles("src/etc/testcases/types/gold/filterset2.txt",
-                                                      "src/etc/testcases/types/dest2.txt"));
-    }
-
-    @Test
-    public void test3() throws IOException {
-        buildRule.executeTarget("test3");
-        assertTrue("Filterset 3 failed", compareFiles("src/etc/testcases/types/gold/filterset3.txt",
-                                                      "src/etc/testcases/types/dest3.txt"));
-    }
-
-    /**
-     * This will test the recursive FilterSet.  Which means that if
-     * the filter value @test@ contains another filter value, it will
-     * actually resolve.
-     */
-    @Test
-    public void testRecursive() {
-        String result = "it works line";
-        String line="@test@ line";
-        FilterSet fs = new FilterSet();
-        fs.addFilter("test", "@test1@");
-        fs.addFilter("test1","@test2@");
-        fs.addFilter("test2", "it works");
-        fs.setBeginToken("@");
-        fs.setEndToken("@");
-        assertEquals(result, fs.replaceTokens(line));
-    }
-
-    /**
-     * Test to see what happens when the resolving occurs in an
-     * infinite loop.
-     */
-    @Test
-    public void testInfinite() {
-        String result = "@test@ line testvalue";
-        String line = "@test@ line @test3@";
-        FilterSet fs = new FilterSet();
-        fs.addFilter("test", "@test1@");
-        fs.addFilter("test1","@test2@");
-        fs.addFilter("test2", "@test@");
-        fs.addFilter("test3", "testvalue");
-        fs.setBeginToken("@");
-        fs.setEndToken("@");
-        assertEquals(result, fs.replaceTokens(line));
-    }
-
-    /**
-     * Test to see what happens when the resolving occurs in
-     * what would be an infinite loop, but with recursion disabled.
-     */
-    @Test
-    public void testRecursionDisabled() {
-        String result = "@test1@ line testvalue";
-        String line = "@test@ line @test2@";
-        FilterSet fs = new FilterSet();
-        fs.addFilter("test", "@test1@");
-        fs.addFilter("test1","@test@");
-        fs.addFilter("test2", "testvalue");
-        fs.setBeginToken("@");
-        fs.setEndToken("@");
-        fs.setRecurse(false);
-        assertEquals(result, fs.replaceTokens(line));
-    }
-
-    @Test
-    public void testNonInfiniteRecursiveMultipleOnSingleLine() {
-        FilterSet filters = new FilterSet();
-
-        filters.setBeginToken("<");
-        filters.setEndToken(">");
-
-        filters.addFilter("ul", "<itemizedlist>");
-        filters.addFilter("/ul", "</itemizedList>");
-        filters.addFilter("li", "<listitem>");
-        filters.addFilter("/li", "</listitem>");
-
-        String result = "<itemizedlist><listitem>Item 1</listitem> <listitem>Item 2</listitem></itemizedList>";
-        String line = "<ul><li>Item 1</li> <li>Item 2</li></ul>";
-
-        assertEquals(result, filters.replaceTokens(line));
-    }
-    
-    @Test
-    public void testNestedFilterSets() {
-        buildRule.executeTarget("test-nested-filtersets");
-
-        FilterSet fs = (FilterSet) buildRule.getProject().getReference("1");
-        Hashtable filters = fs.getFilterHash();
-        assertEquals(1, filters.size());
-        assertEquals("value1", filters.get("token1"));
-
-        fs = (FilterSet) buildRule.getProject().getReference("2");
-        filters = fs.getFilterHash();
-        assertEquals(2, filters.size());
-        assertEquals("1111", filters.get("aaaa"));
-        assertEquals("2222", filters.get("bbbb"));
-
-        fs = (FilterSet) buildRule.getProject().getReference("3");
-        filters = fs.getFilterHash();
-        assertEquals(1, filters.size());
-        assertEquals("value4", filters.get("token4"));
-
-        fs = (FilterSet) buildRule.getProject().getReference("5");
-        filters = fs.getFilterHash();
-        assertEquals(1, filters.size());
-        assertEquals("value1", filters.get("token1"));
-    }
-
-    @Test
-    public void testFiltersFileElement() {
-        buildRule.executeTarget("testFiltersFileElement");
-    }
-
-    @Test
-    public void testFiltersFileAttribute() {
-        buildRule.executeTarget("testFiltersFileAttribute");
-    }
-
-    @Test
-    public void testMultipleFiltersFiles() {
-        buildRule.executeTarget("testMultipleFiltersFiles");
-    }
-
-    @Test
-    public void testMissingFiltersFile() {
-        try {
-            buildRule.executeTarget("testMissingFiltersFile");
-            fail("should fail due to missing  filtersfile");
-        } catch (BuildException ex) {
-            //TODO assert exception text
-        }
-    }
-
-    @Test
-    public void testAllowMissingFiltersFile() {
-        buildRule.executeTarget("testAllowMissingFiltersFile");
-    }
-
-    private boolean compareFiles(String name1, String name2) throws IOException {
-        File file1 = new File(System.getProperty("root"), name1);
-        File file2 = new File(System.getProperty("root"), name2);
-
-
-        if (!file1.exists() || !file2.exists()) {
-            return false;
-        }
-
-        if (file1.length() != file2.length()) {
-            return false;
-        }
-
-        // byte - byte compare
-        byte[] buffer1 = new byte[BUF_SIZE];
-        byte[] buffer2 = new byte[BUF_SIZE];
-
-        FileInputStream fis1 = new FileInputStream(file1);
-        FileInputStream fis2 = new FileInputStream(file2);
-        int index = 0;
-        int read = 0;
-        while ((read = fis1.read(buffer1)) != -1) {
-            fis2.read(buffer2);
-            for (int i = 0; i < read; ++i, ++index) {
-                if (buffer1[i] != buffer2[i]) {
-                    return false;
-                }
-            }
-        }
-        return true;
-
-    }
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.util.Hashtable;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * FilterSet testing
+ *
+ */
+public class FilterSetTest {
+
+    static private final int BUF_SIZE = 32768;
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+
+    @Before
+    public void setUp() {
+        buildRule.configureProject("src/etc/testcases/types/filterset.xml");
+    }
+
+    @After
+    public void tearDown() {
+        buildRule.executeTarget("cleanup");
+    }
+
+    @Test
+    public void test1() throws IOException {
+        buildRule.executeTarget("test1");
+        assertTrue("Filterset 1 failed", compareFiles("src/etc/testcases/types/gold/filterset1.txt",
+                                                      "src/etc/testcases/types/dest1.txt"));
+    }
+
+    @Test
+    public void test2() throws IOException {
+        buildRule.executeTarget("test2");
+        assertTrue("Filterset 2 failed", compareFiles("src/etc/testcases/types/gold/filterset2.txt",
+                                                      "src/etc/testcases/types/dest2.txt"));
+    }
+
+    @Test
+    public void test3() throws IOException {
+        buildRule.executeTarget("test3");
+        assertTrue("Filterset 3 failed", compareFiles("src/etc/testcases/types/gold/filterset3.txt",
+                                                      "src/etc/testcases/types/dest3.txt"));
+    }
+
+    /**
+     * This will test the recursive FilterSet.  Which means that if
+     * the filter value @test@ contains another filter value, it will
+     * actually resolve.
+     */
+    @Test
+    public void testRecursive() {
+        String result = "it works line";
+        String line="@test@ line";
+        FilterSet fs = new FilterSet();
+        fs.addFilter("test", "@test1@");
+        fs.addFilter("test1","@test2@");
+        fs.addFilter("test2", "it works");
+        fs.setBeginToken("@");
+        fs.setEndToken("@");
+        assertEquals(result, fs.replaceTokens(line));
+    }
+
+    /**
+     * Test to see what happens when the resolving occurs in an
+     * infinite loop.
+     */
+    @Test
+    public void testInfinite() {
+        String result = "@test@ line testvalue";
+        String line = "@test@ line @test3@";
+        FilterSet fs = new FilterSet();
+        fs.addFilter("test", "@test1@");
+        fs.addFilter("test1","@test2@");
+        fs.addFilter("test2", "@test@");
+        fs.addFilter("test3", "testvalue");
+        fs.setBeginToken("@");
+        fs.setEndToken("@");
+        assertEquals(result, fs.replaceTokens(line));
+    }
+
+    /**
+     * Test to see what happens when the resolving occurs in
+     * what would be an infinite loop, but with recursion disabled.
+     */
+    @Test
+    public void testRecursionDisabled() {
+        String result = "@test1@ line testvalue";
+        String line = "@test@ line @test2@";
+        FilterSet fs = new FilterSet();
+        fs.addFilter("test", "@test1@");
+        fs.addFilter("test1","@test@");
+        fs.addFilter("test2", "testvalue");
+        fs.setBeginToken("@");
+        fs.setEndToken("@");
+        fs.setRecurse(false);
+        assertEquals(result, fs.replaceTokens(line));
+    }
+
+    @Test
+    public void testNonInfiniteRecursiveMultipleOnSingleLine() {
+        FilterSet filters = new FilterSet();
+
+        filters.setBeginToken("<");
+        filters.setEndToken(">");
+
+        filters.addFilter("ul", "<itemizedlist>");
+        filters.addFilter("/ul", "</itemizedList>");
+        filters.addFilter("li", "<listitem>");
+        filters.addFilter("/li", "</listitem>");
+
+        String result = "<itemizedlist><listitem>Item 1</listitem> <listitem>Item 2</listitem></itemizedList>";
+        String line = "<ul><li>Item 1</li> <li>Item 2</li></ul>";
+
+        assertEquals(result, filters.replaceTokens(line));
+    }
+
+    @Test
+    public void testNestedFilterSets() {
+        buildRule.executeTarget("test-nested-filtersets");
+
+        FilterSet fs = (FilterSet) buildRule.getProject().getReference("1");
+        Hashtable filters = fs.getFilterHash();
+        assertEquals(1, filters.size());
+        assertEquals("value1", filters.get("token1"));
+
+        fs = (FilterSet) buildRule.getProject().getReference("2");
+        filters = fs.getFilterHash();
+        assertEquals(2, filters.size());
+        assertEquals("1111", filters.get("aaaa"));
+        assertEquals("2222", filters.get("bbbb"));
+
+        fs = (FilterSet) buildRule.getProject().getReference("3");
+        filters = fs.getFilterHash();
+        assertEquals(1, filters.size());
+        assertEquals("value4", filters.get("token4"));
+
+        fs = (FilterSet) buildRule.getProject().getReference("5");
+        filters = fs.getFilterHash();
+        assertEquals(1, filters.size());
+        assertEquals("value1", filters.get("token1"));
+    }
+
+    @Test
+    public void testFiltersFileElement() {
+        buildRule.executeTarget("testFiltersFileElement");
+    }
+
+    @Test
+    public void testFiltersFileAttribute() {
+        buildRule.executeTarget("testFiltersFileAttribute");
+    }
+
+    @Test
+    public void testMultipleFiltersFiles() {
+        buildRule.executeTarget("testMultipleFiltersFiles");
+    }
+
+    @Test
+    public void testMissingFiltersFile() {
+        try {
+            buildRule.executeTarget("testMissingFiltersFile");
+            fail("should fail due to missing  filtersfile");
+        } catch (BuildException ex) {
+            //TODO assert exception text
+        }
+    }
+
+    @Test
+    public void testAllowMissingFiltersFile() {
+        buildRule.executeTarget("testAllowMissingFiltersFile");
+    }
+
+    private boolean compareFiles(String name1, String name2) throws IOException {
+        File file1 = new File(System.getProperty("root"), name1);
+        File file2 = new File(System.getProperty("root"), name2);
+
+
+        if (!file1.exists() || !file2.exists()) {
+            return false;
+        }
+
+        if (file1.length() != file2.length()) {
+            return false;
+        }
+
+        // byte - byte compare
+        byte[] buffer1 = new byte[BUF_SIZE];
+        byte[] buffer2 = new byte[BUF_SIZE];
+
+        FileInputStream fis1 = new FileInputStream(file1);
+        FileInputStream fis2 = new FileInputStream(file2);
+        int index = 0;
+        int read = 0;
+        while ((read = fis1.read(buffer1)) != -1) {
+            fis2.read(buffer2);
+            for (int i = 0; i < read; ++i, ++index) {
+                if (buffer1[i] != buffer2[i]) {
+                    return false;
+                }
+            }
+        }
+        return true;
+
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java b/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java
index 7435515..3e08b2c 100644
--- a/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java
+++ b/src/tests/junit/org/apache/tools/ant/types/FlexIntegerTest.java
@@ -1,74 +1,74 @@
-/*
- *  Licensed to the Apache Software Foundation (ASF) under one or more
- *  contributor license agreements.  See the NOTICE file distributed with
- *  this work for additional information regarding copyright ownership.
- *  The ASF licenses this file to You under the Apache License, Version 2.0
- *  (the "License"); you may not use this file except in compliance with
- *  the License.  You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- *  Unless required by applicable law or agreed to in writing, software
- *  distributed under the License is distributed on an "AS IS" BASIS,
- *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- *  See the License for the specific language governing permissions and
- *  limitations under the License.
- *
- */
-
-package org.apache.tools.ant.types;
-
-import org.apache.tools.ant.BuildFileRule;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.BuildException;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class FlexIntegerTest {
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-
-    @Before
-    public void setUp() {
-        buildRule.configureProject("src/etc/testcases/types/flexinteger.xml");
-    }
-
-    @Test
-    public void testFlexInteger() {
-        buildRule.executeTarget("test");
-        assertEquals(buildRule.getProject().getProperty("flexint.value1"), "10");
-        assertEquals(buildRule.getProject().getProperty("flexint.value2"), "8");
-    }
-
-    // This class acts as a custom Ant task also
-    // and uses these variables/methods in that mode
-    private Project taskProject;
-    String propName;
-    private FlexInteger value;
-
-
-
-    public void setPropName(String propName) {
-        this.propName = propName;
-    }
-
-    public void setValue(FlexInteger value) {
-        this.value = value;
-    }
-
-    public void setProject(Project project) {
-        taskProject = project;
-    }
-
-    public void execute() {
-        if (propName == null || value == null) {
-            throw new BuildException("name and value required");
-        }
-
-        taskProject.setNewProperty(propName, value.toString());
-    }
-}
+/*
+ *  Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  See the NOTICE file distributed with
+ *  this work for additional information regarding copyright ownership.
+ *  The ASF licenses this file to You under the Apache License, Version 2.0
+ *  (the "License"); you may not use this file except in compliance with
+ *  the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS,
+ *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ *
+ */
+
+package org.apache.tools.ant.types;
+
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.BuildException;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class FlexIntegerTest {
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+
+    @Before
+    public void setUp() {
+        buildRule.configureProject("src/etc/testcases/types/flexinteger.xml");
+    }
+
+    @Test
+    public void testFlexInteger() {
+        buildRule.executeTarget("test");
+        assertEquals(buildRule.getProject().getProperty("flexint.value1"), "10");
+        assertEquals(buildRule.getProject().getProperty("flexint.value2"), "8");
+    }
+
+    // This class acts as a custom Ant task also
+    // and uses these variables/methods in that mode
+    private Project taskProject;
+    String propName;
+    private FlexInteger value;
+
+
+
+    public void setPropName(String propName) {
+        this.propName = propName;
+    }
+
+    public void setValue(FlexInteger value) {
+        this.value = value;
+    }
+
+    public void setProject(Project project) {
+        taskProject = project;
+    }
+
+    public void execute() {
+        if (propName == null || value == null) {
+            throw new BuildException("name and value required");
+        }
+
+        taskProject.setNewProperty(propName, value.toString());
+    }
+}