You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@ant.apache.org by gi...@apache.org on 2017/11/29 22:06:12 UTC

[16/22] 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/taskdefs/optional/sos/SOSTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java
index aebc9e2..c45ec17 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/sos/SOSTest.java
@@ -1,351 +1,351 @@
-/*
- *  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.taskdefs.optional.sos;
-
-import java.io.File;
-
-import org.apache.tools.ant.BuildException;
-import org.apache.tools.ant.BuildFileRule;
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.types.Commandline;
-import org.apache.tools.ant.types.Path;
-import org.junit.After;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-/**
- *  Testcase to ensure that command line generation and required attributes are
- *  correct.
- *
- */
-public class SOSTest {
-
-    private Commandline commandline;
-
-    private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini";
-    private static final String VSS_PROJECT_PATH = "/SourceRoot/Project";
-    private static final String DS_VSS_PROJECT_PATH = "$/SourceRoot/Project";
-    private static final String SOS_SERVER_PATH = "192.168.0.1:8888";
-    private static final String SOS_USERNAME = "ant";
-    private static final String SOS_PASSWORD = "rocks";
-    private static final String LOCAL_PATH = "testdir";
-    private static final String SRC_FILE = "Class1.java";
-    private static final String SRC_LABEL = "label1";
-    private static final String SRC_COMMENT = "I fixed a bug";
-    private static final String SOS_HOME = "/home/user/.sos";
-    private static final String VERSION = "007";
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-    private Project project;
-
-    @Before
-    public void setUp() {
-        project = new Project();
-        project.init();
-        project.setBasedir(".");
-    }
-
-    @After
-    public void tearDown() {
-        File file = new File(project.getBaseDir(), LOCAL_PATH);
-        if (file.exists()) {
-            file.delete();
-        }
-    }
-
-    /**  Test SOSGetFile flags & commandline generation  */
-    @Test
-    public void testGetFileFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "GetFile", "-file",
-                SRC_FILE, "-revision", "007", "-server", SOS_SERVER_PATH, "-name",
-                SOS_USERNAME, "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH,
-                "-project", DS_VSS_PROJECT_PATH, "-verbose", "-nocompress",
-                "-nocache", "-workdir", project.getBaseDir().getAbsolutePath()
-                 + File.separator + LOCAL_PATH};
-
-        // Set up a SOSGet task
-        SOSGet sosGet = new SOSGet();
-        sosGet.setProject(project);
-        sosGet.setVssServerPath(VSS_SERVER_PATH);
-        sosGet.setSosServerPath(SOS_SERVER_PATH);
-        sosGet.setProjectPath(VSS_PROJECT_PATH);
-        sosGet.setFile(SRC_FILE);
-        sosGet.setUsername(SOS_USERNAME);
-        sosGet.setPassword(SOS_PASSWORD);
-        sosGet.setVersion(VERSION);
-        sosGet.setLocalPath(new Path(project, LOCAL_PATH));
-        sosGet.setNoCache(true);
-        sosGet.setNoCompress(true);
-        sosGet.setVerbose(true);
-        sosGet.setRecursive(true);
-
-        commandline = sosGet.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test SOSGetProject flags & commandline generation  */
-    @Test
-    public void testGetProjectFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "GetProject", "-recursive",
-                "-label", SRC_LABEL, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-                "-password", "", "-database", VSS_SERVER_PATH, "-project",
-                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-                project.getBaseDir().getAbsolutePath()};
-
-        // Set up a SOSGet task
-        SOSGet sosGet = new SOSGet();
-        sosGet.setProject(project);
-        sosGet.setVssServerPath(VSS_SERVER_PATH);
-        sosGet.setSosServerPath(SOS_SERVER_PATH);
-        sosGet.setProjectPath(DS_VSS_PROJECT_PATH);
-        sosGet.setLabel(SRC_LABEL);
-        sosGet.setUsername(SOS_USERNAME);
-        sosGet.setSosHome(SOS_HOME);
-        sosGet.setNoCache(true);
-        sosGet.setNoCompress(false);
-        sosGet.setVerbose(false);
-        sosGet.setRecursive(true);
-
-        commandline = sosGet.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Tests SOSGet required attributes.  */
-    @Test
-    public void testGetExceptions() {
-        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
-        expectSpecificBuildException("sosget.1", "some cause", "sosserverpath attribute must be set!");
-        expectSpecificBuildException("sosget.2", "some cause", "username attribute must be set!");
-        expectSpecificBuildException("sosget.3", "some cause", "vssserverpath attribute must be set!");
-        expectSpecificBuildException("sosget.4", "some cause", "projectpath attribute must be set!");
-    }
-
-    /**  Test CheckInFile option flags  */
-    @Test
-    public void testCheckinFileFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "CheckInFile", "-file",
-                SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-                "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
-                DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
-                "-workdir", project.getBaseDir().getAbsolutePath() + File.separator
-                 + LOCAL_PATH, "-log", SRC_COMMENT};
-
-        // Set up a SOSCheckin task
-        SOSCheckin sosCheckin = new SOSCheckin();
-        sosCheckin.setProject(project);
-        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckin.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckin.setFile(SRC_FILE);
-        sosCheckin.setComment(SRC_COMMENT);
-        sosCheckin.setUsername(SOS_USERNAME);
-        sosCheckin.setPassword(SOS_PASSWORD);
-        sosCheckin.setLocalPath(new Path(project, LOCAL_PATH));
-        sosCheckin.setNoCache(true);
-        sosCheckin.setNoCompress(true);
-        sosCheckin.setVerbose(true);
-        sosCheckin.setRecursive(true);
-
-        commandline = sosCheckin.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test CheckInProject option flags  */
-    @Test
-    public void testCheckinProjectFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "CheckInProject",
-                "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-                "-password", "", "-database", VSS_SERVER_PATH, "-project",
-                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-                project.getBaseDir().getAbsolutePath(), "-log", SRC_COMMENT,};
-
-        // Set up a SOSCheckin task
-        SOSCheckin sosCheckin = new SOSCheckin();
-        sosCheckin.setProject(project);
-        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckin.setProjectPath(DS_VSS_PROJECT_PATH);
-        sosCheckin.setComment(SRC_COMMENT);
-        sosCheckin.setUsername(SOS_USERNAME);
-        sosCheckin.setSosHome(SOS_HOME);
-        sosCheckin.setNoCache(true);
-        sosCheckin.setNoCompress(false);
-        sosCheckin.setVerbose(false);
-        sosCheckin.setRecursive(true);
-
-        commandline = sosCheckin.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test SOSCheckIn required attributes.  */
-    @Test
-    public void testCheckinExceptions() {
-        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
-        expectSpecificBuildException("soscheckin.1", "some cause", "sosserverpath attribute must be set!");
-        expectSpecificBuildException("soscheckin.2", "some cause", "username attribute must be set!");
-        expectSpecificBuildException("soscheckin.3", "some cause", "vssserverpath attribute must be set!");
-        expectSpecificBuildException("soscheckin.4", "some cause", "projectpath attribute must be set!");
-    }
-
-    /**  Test CheckOutFile option flags  */
-    @Test
-    public void testCheckoutFileFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "CheckOutFile", "-file",
-                SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-                "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
-                DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
-                "-workdir", project.getBaseDir().getAbsolutePath()
-                 + File.separator + LOCAL_PATH};
-
-        // Set up a SOSCheckout task
-        SOSCheckout sosCheckout = new SOSCheckout();
-        sosCheckout.setProject(project);
-        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckout.setProjectPath(DS_VSS_PROJECT_PATH);
-        sosCheckout.setFile(SRC_FILE);
-        sosCheckout.setUsername(SOS_USERNAME);
-        sosCheckout.setPassword(SOS_PASSWORD);
-        sosCheckout.setLocalPath(new Path(project, LOCAL_PATH));
-        sosCheckout.setNoCache(true);
-        sosCheckout.setNoCompress(true);
-        sosCheckout.setVerbose(true);
-        sosCheckout.setRecursive(true);
-
-        commandline = sosCheckout.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test CheckOutProject option flags  */
-    @Test
-    public void testCheckoutProjectFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "CheckOutProject",
-                "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
-                "-password", "", "-database", VSS_SERVER_PATH, "-project",
-                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
-                project.getBaseDir().getAbsolutePath()};
-
-        // Set up a sosCheckout task
-        SOSCheckout sosCheckout = new SOSCheckout();
-        sosCheckout.setProject(project);
-        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
-        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
-        sosCheckout.setProjectPath(VSS_PROJECT_PATH);
-        sosCheckout.setUsername(SOS_USERNAME);
-        sosCheckout.setSosHome(SOS_HOME);
-        sosCheckout.setNoCache(true);
-        sosCheckout.setNoCompress(false);
-        sosCheckout.setVerbose(false);
-        sosCheckout.setRecursive(true);
-
-        commandline = sosCheckout.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test SOSCheckout required attributes.  */
-    @Test
-    public void testCheckoutExceptions() {
-        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
-        expectSpecificBuildException("soscheckout.1", "some cause", "sosserverpath attribute must be set!");
-        expectSpecificBuildException("soscheckout.2", "some cause", "username attribute must be set!");
-        expectSpecificBuildException("soscheckout.3", "some cause", "vssserverpath attribute must be set!");
-        expectSpecificBuildException("soscheckout.4", "some cause", "projectpath attribute must be set!");
-    }
-
-    /**  Test Label option flags  */
-    @Test
-    public void testLabelFlags() {
-        String[] sTestCmdLine = {"soscmd", "-command", "AddLabel", "-server",
-                SOS_SERVER_PATH, "-name", SOS_USERNAME, "-password", "", "-database",
-                VSS_SERVER_PATH, "-project", DS_VSS_PROJECT_PATH, "-label",
-                SRC_LABEL, "-verbose", "-log", SRC_COMMENT};
-
-        // Set up a sosCheckout task
-        SOSLabel sosLabel = new SOSLabel();
-        sosLabel.setVssServerPath(VSS_SERVER_PATH);
-        sosLabel.setSosServerPath(SOS_SERVER_PATH);
-        sosLabel.setProjectPath(DS_VSS_PROJECT_PATH);
-        sosLabel.setUsername(SOS_USERNAME);
-        sosLabel.setSosHome(SOS_HOME);
-        sosLabel.setComment(SRC_COMMENT);
-        sosLabel.setLabel(SRC_LABEL);
-        sosLabel.setNoCache(true);
-        sosLabel.setNoCompress(false);
-        sosLabel.setVerbose(true);
-
-        commandline = sosLabel.buildCmdLine();
-
-        checkCommandLines(sTestCmdLine, commandline.getCommandline());
-    }
-
-    /**  Test SOSLabel required attributes.  */
-    @Test
-    public void testLabelExceptions() {
-        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
-        expectSpecificBuildException("soslabel.1", "some cause", "sosserverpath attribute must be set!");
-        expectSpecificBuildException("soslabel.2", "some cause", "username attribute must be set!");
-        expectSpecificBuildException("soslabel.3", "some cause", "vssserverpath attribute must be set!");
-        expectSpecificBuildException("soslabel.4", "some cause", "projectpath attribute must be set!");
-        expectSpecificBuildException("soslabel.5", "some cause", "label attribute must be set!");
-    }
-
-    private void expectSpecificBuildException(String target, String errorMessage,
-                                              String exceptionMessage) {
-        try {
-            buildRule.executeTarget(target);
-            fail(errorMessage);
-        } catch(BuildException ex) {
-            assertEquals(exceptionMessage, ex.getMessage());
-        }
-    }
-
-    /**
-     *  Iterate through the generated command line comparing it to reference
-     *  one.
-     *
-     * @param  sTestCmdLine       The reference command line;
-     * @param  sGeneratedCmdLine  The generated command line;
-     */
-    private void checkCommandLines(String[] sTestCmdLine, String[] sGeneratedCmdLine) {
-        int length = sTestCmdLine.length;
-        for (int i = 0; i < length; i++) {
-            try {
-                assertEquals("arg # " + String.valueOf(i),
-                        sTestCmdLine[i],
-                        sGeneratedCmdLine[i]);
-            } catch (ArrayIndexOutOfBoundsException aioob) {
-                fail("missing arg " + sTestCmdLine[i]);
-            }
-        }
-        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
-            // We have extra elements
-            fail("extra args");
-        }
-    }
-}
+/*
+ *  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.taskdefs.optional.sos;
+
+import java.io.File;
+
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.types.Commandline;
+import org.apache.tools.ant.types.Path;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+/**
+ *  Testcase to ensure that command line generation and required attributes are
+ *  correct.
+ *
+ */
+public class SOSTest {
+
+    private Commandline commandline;
+
+    private static final String VSS_SERVER_PATH = "\\\\server\\vss\\srcsafe.ini";
+    private static final String VSS_PROJECT_PATH = "/SourceRoot/Project";
+    private static final String DS_VSS_PROJECT_PATH = "$/SourceRoot/Project";
+    private static final String SOS_SERVER_PATH = "192.168.0.1:8888";
+    private static final String SOS_USERNAME = "ant";
+    private static final String SOS_PASSWORD = "rocks";
+    private static final String LOCAL_PATH = "testdir";
+    private static final String SRC_FILE = "Class1.java";
+    private static final String SRC_LABEL = "label1";
+    private static final String SRC_COMMENT = "I fixed a bug";
+    private static final String SOS_HOME = "/home/user/.sos";
+    private static final String VERSION = "007";
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+    private Project project;
+
+    @Before
+    public void setUp() {
+        project = new Project();
+        project.init();
+        project.setBasedir(".");
+    }
+
+    @After
+    public void tearDown() {
+        File file = new File(project.getBaseDir(), LOCAL_PATH);
+        if (file.exists()) {
+            file.delete();
+        }
+    }
+
+    /**  Test SOSGetFile flags & commandline generation  */
+    @Test
+    public void testGetFileFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "GetFile", "-file",
+                SRC_FILE, "-revision", "007", "-server", SOS_SERVER_PATH, "-name",
+                SOS_USERNAME, "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH,
+                "-project", DS_VSS_PROJECT_PATH, "-verbose", "-nocompress",
+                "-nocache", "-workdir", project.getBaseDir().getAbsolutePath()
+                 + File.separator + LOCAL_PATH};
+
+        // Set up a SOSGet task
+        SOSGet sosGet = new SOSGet();
+        sosGet.setProject(project);
+        sosGet.setVssServerPath(VSS_SERVER_PATH);
+        sosGet.setSosServerPath(SOS_SERVER_PATH);
+        sosGet.setProjectPath(VSS_PROJECT_PATH);
+        sosGet.setFile(SRC_FILE);
+        sosGet.setUsername(SOS_USERNAME);
+        sosGet.setPassword(SOS_PASSWORD);
+        sosGet.setVersion(VERSION);
+        sosGet.setLocalPath(new Path(project, LOCAL_PATH));
+        sosGet.setNoCache(true);
+        sosGet.setNoCompress(true);
+        sosGet.setVerbose(true);
+        sosGet.setRecursive(true);
+
+        commandline = sosGet.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test SOSGetProject flags & commandline generation  */
+    @Test
+    public void testGetProjectFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "GetProject", "-recursive",
+                "-label", SRC_LABEL, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
+                "-password", "", "-database", VSS_SERVER_PATH, "-project",
+                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
+                project.getBaseDir().getAbsolutePath()};
+
+        // Set up a SOSGet task
+        SOSGet sosGet = new SOSGet();
+        sosGet.setProject(project);
+        sosGet.setVssServerPath(VSS_SERVER_PATH);
+        sosGet.setSosServerPath(SOS_SERVER_PATH);
+        sosGet.setProjectPath(DS_VSS_PROJECT_PATH);
+        sosGet.setLabel(SRC_LABEL);
+        sosGet.setUsername(SOS_USERNAME);
+        sosGet.setSosHome(SOS_HOME);
+        sosGet.setNoCache(true);
+        sosGet.setNoCompress(false);
+        sosGet.setVerbose(false);
+        sosGet.setRecursive(true);
+
+        commandline = sosGet.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Tests SOSGet required attributes.  */
+    @Test
+    public void testGetExceptions() {
+        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
+        expectSpecificBuildException("sosget.1", "some cause", "sosserverpath attribute must be set!");
+        expectSpecificBuildException("sosget.2", "some cause", "username attribute must be set!");
+        expectSpecificBuildException("sosget.3", "some cause", "vssserverpath attribute must be set!");
+        expectSpecificBuildException("sosget.4", "some cause", "projectpath attribute must be set!");
+    }
+
+    /**  Test CheckInFile option flags  */
+    @Test
+    public void testCheckinFileFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "CheckInFile", "-file",
+                SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
+                "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
+                DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
+                "-workdir", project.getBaseDir().getAbsolutePath() + File.separator
+                 + LOCAL_PATH, "-log", SRC_COMMENT};
+
+        // Set up a SOSCheckin task
+        SOSCheckin sosCheckin = new SOSCheckin();
+        sosCheckin.setProject(project);
+        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
+        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
+        sosCheckin.setProjectPath(VSS_PROJECT_PATH);
+        sosCheckin.setFile(SRC_FILE);
+        sosCheckin.setComment(SRC_COMMENT);
+        sosCheckin.setUsername(SOS_USERNAME);
+        sosCheckin.setPassword(SOS_PASSWORD);
+        sosCheckin.setLocalPath(new Path(project, LOCAL_PATH));
+        sosCheckin.setNoCache(true);
+        sosCheckin.setNoCompress(true);
+        sosCheckin.setVerbose(true);
+        sosCheckin.setRecursive(true);
+
+        commandline = sosCheckin.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test CheckInProject option flags  */
+    @Test
+    public void testCheckinProjectFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "CheckInProject",
+                "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
+                "-password", "", "-database", VSS_SERVER_PATH, "-project",
+                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
+                project.getBaseDir().getAbsolutePath(), "-log", SRC_COMMENT,};
+
+        // Set up a SOSCheckin task
+        SOSCheckin sosCheckin = new SOSCheckin();
+        sosCheckin.setProject(project);
+        sosCheckin.setVssServerPath(VSS_SERVER_PATH);
+        sosCheckin.setSosServerPath(SOS_SERVER_PATH);
+        sosCheckin.setProjectPath(DS_VSS_PROJECT_PATH);
+        sosCheckin.setComment(SRC_COMMENT);
+        sosCheckin.setUsername(SOS_USERNAME);
+        sosCheckin.setSosHome(SOS_HOME);
+        sosCheckin.setNoCache(true);
+        sosCheckin.setNoCompress(false);
+        sosCheckin.setVerbose(false);
+        sosCheckin.setRecursive(true);
+
+        commandline = sosCheckin.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test SOSCheckIn required attributes.  */
+    @Test
+    public void testCheckinExceptions() {
+        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
+        expectSpecificBuildException("soscheckin.1", "some cause", "sosserverpath attribute must be set!");
+        expectSpecificBuildException("soscheckin.2", "some cause", "username attribute must be set!");
+        expectSpecificBuildException("soscheckin.3", "some cause", "vssserverpath attribute must be set!");
+        expectSpecificBuildException("soscheckin.4", "some cause", "projectpath attribute must be set!");
+    }
+
+    /**  Test CheckOutFile option flags  */
+    @Test
+    public void testCheckoutFileFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "CheckOutFile", "-file",
+                SRC_FILE, "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
+                "-password", SOS_PASSWORD, "-database", VSS_SERVER_PATH, "-project",
+                DS_VSS_PROJECT_PATH, "-verbose", "-nocompress", "-nocache",
+                "-workdir", project.getBaseDir().getAbsolutePath()
+                 + File.separator + LOCAL_PATH};
+
+        // Set up a SOSCheckout task
+        SOSCheckout sosCheckout = new SOSCheckout();
+        sosCheckout.setProject(project);
+        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
+        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
+        sosCheckout.setProjectPath(DS_VSS_PROJECT_PATH);
+        sosCheckout.setFile(SRC_FILE);
+        sosCheckout.setUsername(SOS_USERNAME);
+        sosCheckout.setPassword(SOS_PASSWORD);
+        sosCheckout.setLocalPath(new Path(project, LOCAL_PATH));
+        sosCheckout.setNoCache(true);
+        sosCheckout.setNoCompress(true);
+        sosCheckout.setVerbose(true);
+        sosCheckout.setRecursive(true);
+
+        commandline = sosCheckout.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test CheckOutProject option flags  */
+    @Test
+    public void testCheckoutProjectFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "CheckOutProject",
+                "-recursive", "-server", SOS_SERVER_PATH, "-name", SOS_USERNAME,
+                "-password", "", "-database", VSS_SERVER_PATH, "-project",
+                DS_VSS_PROJECT_PATH, "", "", "-soshome", SOS_HOME, "-workdir",
+                project.getBaseDir().getAbsolutePath()};
+
+        // Set up a sosCheckout task
+        SOSCheckout sosCheckout = new SOSCheckout();
+        sosCheckout.setProject(project);
+        sosCheckout.setVssServerPath(VSS_SERVER_PATH);
+        sosCheckout.setSosServerPath(SOS_SERVER_PATH);
+        sosCheckout.setProjectPath(VSS_PROJECT_PATH);
+        sosCheckout.setUsername(SOS_USERNAME);
+        sosCheckout.setSosHome(SOS_HOME);
+        sosCheckout.setNoCache(true);
+        sosCheckout.setNoCompress(false);
+        sosCheckout.setVerbose(false);
+        sosCheckout.setRecursive(true);
+
+        commandline = sosCheckout.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test SOSCheckout required attributes.  */
+    @Test
+    public void testCheckoutExceptions() {
+        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
+        expectSpecificBuildException("soscheckout.1", "some cause", "sosserverpath attribute must be set!");
+        expectSpecificBuildException("soscheckout.2", "some cause", "username attribute must be set!");
+        expectSpecificBuildException("soscheckout.3", "some cause", "vssserverpath attribute must be set!");
+        expectSpecificBuildException("soscheckout.4", "some cause", "projectpath attribute must be set!");
+    }
+
+    /**  Test Label option flags  */
+    @Test
+    public void testLabelFlags() {
+        String[] sTestCmdLine = {"soscmd", "-command", "AddLabel", "-server",
+                SOS_SERVER_PATH, "-name", SOS_USERNAME, "-password", "", "-database",
+                VSS_SERVER_PATH, "-project", DS_VSS_PROJECT_PATH, "-label",
+                SRC_LABEL, "-verbose", "-log", SRC_COMMENT};
+
+        // Set up a sosCheckout task
+        SOSLabel sosLabel = new SOSLabel();
+        sosLabel.setVssServerPath(VSS_SERVER_PATH);
+        sosLabel.setSosServerPath(SOS_SERVER_PATH);
+        sosLabel.setProjectPath(DS_VSS_PROJECT_PATH);
+        sosLabel.setUsername(SOS_USERNAME);
+        sosLabel.setSosHome(SOS_HOME);
+        sosLabel.setComment(SRC_COMMENT);
+        sosLabel.setLabel(SRC_LABEL);
+        sosLabel.setNoCache(true);
+        sosLabel.setNoCompress(false);
+        sosLabel.setVerbose(true);
+
+        commandline = sosLabel.buildCmdLine();
+
+        checkCommandLines(sTestCmdLine, commandline.getCommandline());
+    }
+
+    /**  Test SOSLabel required attributes.  */
+    @Test
+    public void testLabelExceptions() {
+        buildRule.configureProject("src/etc/testcases/taskdefs/optional/sos/sos.xml");
+        expectSpecificBuildException("soslabel.1", "some cause", "sosserverpath attribute must be set!");
+        expectSpecificBuildException("soslabel.2", "some cause", "username attribute must be set!");
+        expectSpecificBuildException("soslabel.3", "some cause", "vssserverpath attribute must be set!");
+        expectSpecificBuildException("soslabel.4", "some cause", "projectpath attribute must be set!");
+        expectSpecificBuildException("soslabel.5", "some cause", "label attribute must be set!");
+    }
+
+    private void expectSpecificBuildException(String target, String errorMessage,
+                                              String exceptionMessage) {
+        try {
+            buildRule.executeTarget(target);
+            fail(errorMessage);
+        } catch(BuildException ex) {
+            assertEquals(exceptionMessage, ex.getMessage());
+        }
+    }
+
+    /**
+     *  Iterate through the generated command line comparing it to reference
+     *  one.
+     *
+     * @param  sTestCmdLine       The reference command line;
+     * @param  sGeneratedCmdLine  The generated command line;
+     */
+    private void checkCommandLines(String[] sTestCmdLine, String[] sGeneratedCmdLine) {
+        int length = sTestCmdLine.length;
+        for (int i = 0; i < length; i++) {
+            try {
+                assertEquals("arg # " + String.valueOf(i),
+                        sTestCmdLine[i],
+                        sGeneratedCmdLine[i]);
+            } catch (ArrayIndexOutOfBoundsException aioob) {
+                fail("missing arg " + sTestCmdLine[i]);
+            }
+        }
+        if (sGeneratedCmdLine.length > sTestCmdLine.length) {
+            // We have extra elements
+            fail("extra args");
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java
index b9fa0b5..dfec9f5 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/splash/SplashScreenTest.java
@@ -1,50 +1,49 @@
-/*
- *  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.taskdefs.optional.splash;
-
-import org.apache.tools.ant.Project;
-
-/**
- * This is an "interactive" test, it passes if the splash screen
- * disappears after the "finished" but before the "exiting" message.
- *
- * This even isn't a JUnit test case.
- *
- * @since Ant 1.5.2
- */
-public class SplashScreenTest {
-
-    public static void main(String[] args) throws InterruptedException {
-        Project p = new Project();
-        SplashTask t = new SplashTask();
-        t.setProject(p);
-        t.execute();
-
-        // give it some time to display
-        Thread.sleep(2000);
-
-        p.fireBuildFinished(null);
-        System.err.println("finished");
-
-        Thread.sleep(2000);
-        System.err.println("exiting");
-        System.exit(0);
-    }
-}
-
+/*
+ *  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.taskdefs.optional.splash;
+
+import org.apache.tools.ant.Project;
+
+/**
+ * This is an "interactive" test, it passes if the splash screen
+ * disappears after the "finished" but before the "exiting" message.
+ *
+ * This even isn't a JUnit test case.
+ *
+ * @since Ant 1.5.2
+ */
+public class SplashScreenTest {
+
+    public static void main(String[] args) throws InterruptedException {
+        Project p = new Project();
+        SplashTask t = new SplashTask();
+        t.setProject(p);
+        t.execute();
+
+        // give it some time to display
+        Thread.sleep(2000);
+
+        p.fireBuildFinished(null);
+        System.err.println("finished");
+
+        Thread.sleep(2000);
+        System.err.println("exiting");
+        System.exit(0);
+    }
+}

http://git-wip-us.apache.org/repos/asf/ant/blob/0ed7f4ab/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
index 0ac0746..e36d683 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/unix/SymlinkTest.java
@@ -1,297 +1,297 @@
-/*
- *  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.
- *
- */
-
-/*
- * Since the initial version of this file was deveolped on the clock on
- * an NSF grant I should say the following boilerplate:
- *
- * This material is based upon work supported by the National Science
- * Foundaton under Grant No. EIA-0196404. Any opinions, findings, and
- * conclusions or recommendations expressed in this material are those
- * of the author and do not necessarily reflect the views of the
- * National Science Foundation.
- */
-
-package org.apache.tools.ant.taskdefs.optional.unix;
-
-import org.apache.tools.ant.BuildFileRule;
-import org.apache.tools.ant.taskdefs.condition.Os;
-
-import org.apache.tools.ant.Project;
-import org.apache.tools.ant.util.SymbolicLinkUtils;
-import org.junit.After;
-import org.junit.Assume;
-import org.junit.Before;
-import org.junit.Rule;
-import org.junit.Test;
-
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.fail;
-
-import java.io.File;
-
-/**
- * Test cases for the Symlink task. Link creation, link deletion, recording
- * of links in multiple directories, and restoration of links recorded are
- * all tested. A separate test for the utility method Symlink.deleteSymlink
- * is not included because action="delete" only prints a message and calls
- * Symlink.deleteSymlink, making a separate test redundant.
- *
- */
-
-public class SymlinkTest {
-
-    @Rule
-    public BuildFileRule buildRule = new BuildFileRule();
-
-    private boolean supportsSymlinks = Os.isFamily("unix");
-
-    @Before
-    public void setUp() {
-        Assume.assumeTrue("Symlinks not supported on current operating system", supportsSymlinks);
-        buildRule.configureProject("src/etc/testcases/taskdefs/optional/unix/symlink.xml");
-        buildRule.executeTarget("setUp");
-    }
-
-    @Test
-    public void testSingle() {
-        buildRule.executeTarget("test-single");
-        Project p = buildRule.getProject();
-        assertNotNull("Failed to create file",
-                          p.getProperty("test.single.file.created"));
-        assertNotNull("Failed to create link",
-                          p.getProperty("test.single.link.created"));
-    }
-
-    @Test
-    public void testDelete() {
-        buildRule.executeTarget("test-delete");
-        Project p = buildRule.getProject();
-        String linkDeleted = p.getProperty("test.delete.link.still.there");
-        assertNotNull("Actual file deleted by symlink",
-                      p.getProperty("test.delete.file.still.there"));
-        if (linkDeleted != null) {
-            fail(linkDeleted);
-        }
-    }
-
-    @Test
-    public void testRecord() {
-        buildRule.executeTarget("test-record");
-        Project p = buildRule.getProject();
-
-        assertNotNull("Failed to create dir1",
-                      p.getProperty("test.record.dir1.created"));
-
-        assertNotNull("Failed to create dir2",
-                      p.getProperty("test.record.dir2.created"));
-
-        assertNotNull("Failed to create file1",
-                      p.getProperty("test.record.file1.created"));
-
-        assertNotNull("Failed to create file2",
-                      p.getProperty("test.record.file2.created"));
-
-        assertNotNull("Failed to create fileA",
-                      p.getProperty("test.record.fileA.created"));
-
-        assertNotNull("Failed to create fileB",
-                      p.getProperty("test.record.fileB.created"));
-
-        assertNotNull("Failed to create fileC",
-                      p.getProperty("test.record.fileC.created"));
-
-        assertNotNull("Failed to create link1",
-                      p.getProperty("test.record.link1.created"));
-
-        assertNotNull("Failed to create link2",
-                      p.getProperty("test.record.link2.created"));
-
-        assertNotNull("Failed to create link3",
-                      p.getProperty("test.record.link3.created"));
-
-        assertNotNull("Failed to create dirlink",
-                      p.getProperty("test.record.dirlink.created"));
-
-        assertNotNull("Failed to create dirlink2",
-                      p.getProperty("test.record.dirlink2.created"));
-
-        assertNotNull("Couldn't record links in dir1",
-                      p.getProperty("test.record.dir1.recorded"));
-
-        assertNotNull("Couldn't record links in dir2",
-                      p.getProperty("test.record.dir2.recorded"));
-
-        String dir3rec = p.getProperty("test.record.dir3.recorded");
-
-        if (dir3rec != null) {
-            fail(dir3rec);
-        }
-
-    }
-
-    @Test
-    public void testRecreate() {
-        buildRule.executeTarget("test-recreate");
-        Project p = buildRule.getProject();
-        String link1Rem = p.getProperty("test.recreate.link1.not.removed");
-        String link2Rem = p.getProperty("test.recreate.link2.not.removed");
-        String link3Rem = p.getProperty("test.recreate.link3.not.removed");
-        String dirlinkRem = p.getProperty("test.recreate.dirlink.not.removed");
-        if (link1Rem != null) {
-            fail(link1Rem);
-        }
-        if (link2Rem != null) {
-            fail(link2Rem);
-        }
-        if (link3Rem != null) {
-            fail(link3Rem);
-        }
-        if (dirlinkRem != null) {
-            fail(dirlinkRem);
-        }
-        assertNotNull("Failed to recreate link1",
-                      p.getProperty("test.recreate.link1.recreated"));
-        assertNotNull("Failed to recreate link2",
-                      p.getProperty("test.recreate.link2.recreated"));
-        assertNotNull("Failed to recreate link3",
-                      p.getProperty("test.recreate.link3.recreated"));
-        assertNotNull("Failed to recreate dirlink",
-                      p.getProperty("test.recreate.dirlink.recreated"));
-
-        String doubleRecreate = p.getProperty("test.recreate.dirlink2.recreated.twice");
-
-        if (doubleRecreate != null) {
-            fail(doubleRecreate);
-        }
-
-        assertNotNull("Failed to alter dirlink3",
-                      p.getProperty("test.recreate.dirlink3.was.altered"));
-    }
-
-    @Test
-    public void testSymbolicLinkUtilsMethods() throws Exception {
-
-        buildRule.executeTarget("test-fileutils");
-        SymbolicLinkUtils su = SymbolicLinkUtils.getSymbolicLinkUtils();
-
-        java.io.File f = new File(buildRule.getOutputDir(), "file1");
-        assertTrue(f.exists());
-        assertFalse(f.isDirectory());
-        assertTrue(f.isFile());
-        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isSymbolicLink(f.getParentFile(),
-                                      f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-        f = new File(buildRule.getOutputDir(), "dir1");
-        assertTrue(f.exists());
-        assertTrue(f.isDirectory());
-        assertFalse(f.isFile());
-        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isSymbolicLink(f.getParentFile(),
-                                      f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-        f = new File(buildRule.getOutputDir(), "file2");
-        assertFalse(f.exists());
-        assertFalse(f.isDirectory());
-        assertFalse(f.isFile());
-        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isSymbolicLink(f.getParentFile(),
-                                      f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-        f = new File(buildRule.getOutputDir(), "dir2");
-        assertFalse(f.exists());
-        assertFalse(f.isDirectory());
-        assertFalse(f.isFile());
-        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isSymbolicLink(f.getParentFile(),
-                                      f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-
-        f = new File(buildRule.getOutputDir(), "file.there");
-        assertTrue(f.exists());
-        assertFalse(f.isDirectory());
-        assertTrue(f.isFile());
-        assertTrue(su.isSymbolicLink(f.getAbsolutePath()));
-        assertTrue(su.isSymbolicLink(f.getParentFile(),
-                                     f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-        f = new File(buildRule.getOutputDir(), "dir.there");
-        assertTrue(f.exists());
-        assertTrue(f.isDirectory());
-        assertFalse(f.isFile());
-        assertTrue(su.isSymbolicLink(f.getAbsolutePath()));
-        assertTrue(su.isSymbolicLink(f.getParentFile(),
-                                     f.getName()));
-        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
-                                              f.getName()));
-
-        // it is not possible to find out that symbolic links pointing
-        // to inexistent files or directories are symbolic links
-        // it used to be possible to detect this on Mac
-        // this is not true under Snow Leopard and JDK 1.5
-        // Removing special handling of MacOS until someone shouts
-        // Antoine
-        f = new File(buildRule.getOutputDir(), "file.notthere");
-        assertFalse(f.exists());
-        assertFalse(f.isDirectory());
-        assertFalse(f.isFile());
-        assertTrue(su.isSymbolicLink(f.getAbsolutePath()) == false);
-        assertTrue(su.isSymbolicLink(f.getParentFile(), f.getName()) == false);
-        assertTrue(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertTrue(su.isDanglingSymbolicLink(f.getParentFile(),
-                                             f.getName()));
-
-        f = new File(buildRule.getOutputDir(), "dir.notthere");
-        assertFalse(f.exists());
-        assertFalse(f.isDirectory());
-        assertFalse(f.isFile());
-        assertTrue(su.isSymbolicLink(f.getAbsolutePath()) == false);
-        assertTrue(su.isSymbolicLink(f.getParentFile(), f.getName()) == false);
-        assertTrue(su.isDanglingSymbolicLink(f.getAbsolutePath()));
-        assertTrue(su.isDanglingSymbolicLink(f.getParentFile(),
-                                             f.getName()));
-
-    }
-
-    @After
-    public void tearDown() {
-        if (buildRule.getProject() != null) {
-            buildRule.executeTarget("tearDown");
-        }
-    }
-
-}
+/*
+ *  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.
+ *
+ */
+
+/*
+ * Since the initial version of this file was deveolped on the clock on
+ * an NSF grant I should say the following boilerplate:
+ *
+ * This material is based upon work supported by the National Science
+ * Foundaton under Grant No. EIA-0196404. Any opinions, findings, and
+ * conclusions or recommendations expressed in this material are those
+ * of the author and do not necessarily reflect the views of the
+ * National Science Foundation.
+ */
+
+package org.apache.tools.ant.taskdefs.optional.unix;
+
+import org.apache.tools.ant.BuildFileRule;
+import org.apache.tools.ant.taskdefs.condition.Os;
+
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.util.SymbolicLinkUtils;
+import org.junit.After;
+import org.junit.Assume;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+import java.io.File;
+
+/**
+ * Test cases for the Symlink task. Link creation, link deletion, recording
+ * of links in multiple directories, and restoration of links recorded are
+ * all tested. A separate test for the utility method Symlink.deleteSymlink
+ * is not included because action="delete" only prints a message and calls
+ * Symlink.deleteSymlink, making a separate test redundant.
+ *
+ */
+
+public class SymlinkTest {
+
+    @Rule
+    public BuildFileRule buildRule = new BuildFileRule();
+
+    private boolean supportsSymlinks = Os.isFamily("unix");
+
+    @Before
+    public void setUp() {
+        Assume.assumeTrue("Symlinks not supported on current operating system", supportsSymlinks);
+        buildRule.configureProject("src/etc/testcases/taskdefs/optional/unix/symlink.xml");
+        buildRule.executeTarget("setUp");
+    }
+
+    @Test
+    public void testSingle() {
+        buildRule.executeTarget("test-single");
+        Project p = buildRule.getProject();
+        assertNotNull("Failed to create file",
+                          p.getProperty("test.single.file.created"));
+        assertNotNull("Failed to create link",
+                          p.getProperty("test.single.link.created"));
+    }
+
+    @Test
+    public void testDelete() {
+        buildRule.executeTarget("test-delete");
+        Project p = buildRule.getProject();
+        String linkDeleted = p.getProperty("test.delete.link.still.there");
+        assertNotNull("Actual file deleted by symlink",
+                      p.getProperty("test.delete.file.still.there"));
+        if (linkDeleted != null) {
+            fail(linkDeleted);
+        }
+    }
+
+    @Test
+    public void testRecord() {
+        buildRule.executeTarget("test-record");
+        Project p = buildRule.getProject();
+
+        assertNotNull("Failed to create dir1",
+                      p.getProperty("test.record.dir1.created"));
+
+        assertNotNull("Failed to create dir2",
+                      p.getProperty("test.record.dir2.created"));
+
+        assertNotNull("Failed to create file1",
+                      p.getProperty("test.record.file1.created"));
+
+        assertNotNull("Failed to create file2",
+                      p.getProperty("test.record.file2.created"));
+
+        assertNotNull("Failed to create fileA",
+                      p.getProperty("test.record.fileA.created"));
+
+        assertNotNull("Failed to create fileB",
+                      p.getProperty("test.record.fileB.created"));
+
+        assertNotNull("Failed to create fileC",
+                      p.getProperty("test.record.fileC.created"));
+
+        assertNotNull("Failed to create link1",
+                      p.getProperty("test.record.link1.created"));
+
+        assertNotNull("Failed to create link2",
+                      p.getProperty("test.record.link2.created"));
+
+        assertNotNull("Failed to create link3",
+                      p.getProperty("test.record.link3.created"));
+
+        assertNotNull("Failed to create dirlink",
+                      p.getProperty("test.record.dirlink.created"));
+
+        assertNotNull("Failed to create dirlink2",
+                      p.getProperty("test.record.dirlink2.created"));
+
+        assertNotNull("Couldn't record links in dir1",
+                      p.getProperty("test.record.dir1.recorded"));
+
+        assertNotNull("Couldn't record links in dir2",
+                      p.getProperty("test.record.dir2.recorded"));
+
+        String dir3rec = p.getProperty("test.record.dir3.recorded");
+
+        if (dir3rec != null) {
+            fail(dir3rec);
+        }
+
+    }
+
+    @Test
+    public void testRecreate() {
+        buildRule.executeTarget("test-recreate");
+        Project p = buildRule.getProject();
+        String link1Rem = p.getProperty("test.recreate.link1.not.removed");
+        String link2Rem = p.getProperty("test.recreate.link2.not.removed");
+        String link3Rem = p.getProperty("test.recreate.link3.not.removed");
+        String dirlinkRem = p.getProperty("test.recreate.dirlink.not.removed");
+        if (link1Rem != null) {
+            fail(link1Rem);
+        }
+        if (link2Rem != null) {
+            fail(link2Rem);
+        }
+        if (link3Rem != null) {
+            fail(link3Rem);
+        }
+        if (dirlinkRem != null) {
+            fail(dirlinkRem);
+        }
+        assertNotNull("Failed to recreate link1",
+                      p.getProperty("test.recreate.link1.recreated"));
+        assertNotNull("Failed to recreate link2",
+                      p.getProperty("test.recreate.link2.recreated"));
+        assertNotNull("Failed to recreate link3",
+                      p.getProperty("test.recreate.link3.recreated"));
+        assertNotNull("Failed to recreate dirlink",
+                      p.getProperty("test.recreate.dirlink.recreated"));
+
+        String doubleRecreate = p.getProperty("test.recreate.dirlink2.recreated.twice");
+
+        if (doubleRecreate != null) {
+            fail(doubleRecreate);
+        }
+
+        assertNotNull("Failed to alter dirlink3",
+                      p.getProperty("test.recreate.dirlink3.was.altered"));
+    }
+
+    @Test
+    public void testSymbolicLinkUtilsMethods() throws Exception {
+
+        buildRule.executeTarget("test-fileutils");
+        SymbolicLinkUtils su = SymbolicLinkUtils.getSymbolicLinkUtils();
+
+        java.io.File f = new File(buildRule.getOutputDir(), "file1");
+        assertTrue(f.exists());
+        assertFalse(f.isDirectory());
+        assertTrue(f.isFile());
+        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isSymbolicLink(f.getParentFile(),
+                                      f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+        f = new File(buildRule.getOutputDir(), "dir1");
+        assertTrue(f.exists());
+        assertTrue(f.isDirectory());
+        assertFalse(f.isFile());
+        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isSymbolicLink(f.getParentFile(),
+                                      f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+        f = new File(buildRule.getOutputDir(), "file2");
+        assertFalse(f.exists());
+        assertFalse(f.isDirectory());
+        assertFalse(f.isFile());
+        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isSymbolicLink(f.getParentFile(),
+                                      f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+        f = new File(buildRule.getOutputDir(), "dir2");
+        assertFalse(f.exists());
+        assertFalse(f.isDirectory());
+        assertFalse(f.isFile());
+        assertFalse(su.isSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isSymbolicLink(f.getParentFile(),
+                                      f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+
+        f = new File(buildRule.getOutputDir(), "file.there");
+        assertTrue(f.exists());
+        assertFalse(f.isDirectory());
+        assertTrue(f.isFile());
+        assertTrue(su.isSymbolicLink(f.getAbsolutePath()));
+        assertTrue(su.isSymbolicLink(f.getParentFile(),
+                                     f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+        f = new File(buildRule.getOutputDir(), "dir.there");
+        assertTrue(f.exists());
+        assertTrue(f.isDirectory());
+        assertFalse(f.isFile());
+        assertTrue(su.isSymbolicLink(f.getAbsolutePath()));
+        assertTrue(su.isSymbolicLink(f.getParentFile(),
+                                     f.getName()));
+        assertFalse(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertFalse(su.isDanglingSymbolicLink(f.getParentFile(),
+                                              f.getName()));
+
+        // it is not possible to find out that symbolic links pointing
+        // to inexistent files or directories are symbolic links
+        // it used to be possible to detect this on Mac
+        // this is not true under Snow Leopard and JDK 1.5
+        // Removing special handling of MacOS until someone shouts
+        // Antoine
+        f = new File(buildRule.getOutputDir(), "file.notthere");
+        assertFalse(f.exists());
+        assertFalse(f.isDirectory());
+        assertFalse(f.isFile());
+        assertTrue(su.isSymbolicLink(f.getAbsolutePath()) == false);
+        assertTrue(su.isSymbolicLink(f.getParentFile(), f.getName()) == false);
+        assertTrue(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertTrue(su.isDanglingSymbolicLink(f.getParentFile(),
+                                             f.getName()));
+
+        f = new File(buildRule.getOutputDir(), "dir.notthere");
+        assertFalse(f.exists());
+        assertFalse(f.isDirectory());
+        assertFalse(f.isFile());
+        assertTrue(su.isSymbolicLink(f.getAbsolutePath()) == false);
+        assertTrue(su.isSymbolicLink(f.getParentFile(), f.getName()) == false);
+        assertTrue(su.isDanglingSymbolicLink(f.getAbsolutePath()));
+        assertTrue(su.isDanglingSymbolicLink(f.getParentFile(),
+                                             f.getName()));
+
+    }
+
+    @After
+    public void tearDown() {
+        if (buildRule.getProject() != null) {
+            buildRule.executeTarget("tearDown");
+        }
+    }
+
+}