fix line-ends
diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..b412a8a
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,36 @@
+*.bat   eol=crlf
+*.bz2   binary
+*.cmd   eol=crlf
+*.css   text
+*.dtd   text
+*.g     text
+*.gif   binary
+*.gz    binary
+*.html  text diff=html
+*.ico   binary
+*.inc   text
+*.jar   binary
+*.jpg   binary
+*.jsp   text
+*.md    text
+*.md5   text
+*.md5sum text
+*.mf    text
+*.pl    text diff=perl
+*.properties text
+*.py    text diff=python
+*.result text
+*.sample     text
+*.sh            eol=lf
+*.tar   binary
+*.test  text
+*.txt   text
+*.wxs   text
+*.xml   text
+*.xsd   text
+*.xsl   text
+*.zip   binary
+.gitattributes text
+.gitignore text
+NOTICE  text
+README  text
diff --git a/src/main/org/apache/ant/antunit/junit3/ErrorTestCase.java b/src/main/org/apache/ant/antunit/junit3/ErrorTestCase.java
index 7975a43..3d528a4 100644
--- a/src/main/org/apache/ant/antunit/junit3/ErrorTestCase.java
+++ b/src/main/org/apache/ant/antunit/junit3/ErrorTestCase.java
@@ -1,56 +1,56 @@
-/*

- * 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.ant.antunit.junit3;

-

-import junit.framework.TestCase;

-

-import org.apache.tools.ant.BuildException;

-

-/**

- * A TestCase that will just report an error when running. This is pretty useful

- * when an error is detected during initialization.

- */

-public class ErrorTestCase extends TestCase {

-

-    /** The name we use for the error test case ('warning') */

-    public static final String NAME = "warning";

-

-    private final BuildException ex;

-

-    /**

-     * Creates a TestCase that will report the Ant BuildException when running.

-     * @param antScriptError The Ant BuildException that triggered the initialization 

-     * failure

-     */

-    public ErrorTestCase(BuildException antScriptError) {

-        super(NAME);

-        this.ex = antScriptError;

-    }

-

-    protected void runTest() throws BuildException {

-        throw ex;

-    }

-

-    public BuildException getAntScriptError() {

-        return ex;

-    }

-

-}

+/*
+ * 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.ant.antunit.junit3;
+
+import junit.framework.TestCase;
+
+import org.apache.tools.ant.BuildException;
+
+/**
+ * A TestCase that will just report an error when running. This is pretty useful
+ * when an error is detected during initialization.
+ */
+public class ErrorTestCase extends TestCase {
+
+    /** The name we use for the error test case ('warning') */
+    public static final String NAME = "warning";
+
+    private final BuildException ex;
+
+    /**
+     * Creates a TestCase that will report the Ant BuildException when running.
+     * @param antScriptError The Ant BuildException that triggered the initialization 
+     * failure
+     */
+    public ErrorTestCase(BuildException antScriptError) {
+        super(NAME);
+        this.ex = antScriptError;
+    }
+
+    protected void runTest() throws BuildException {
+        throw ex;
+    }
+
+    public BuildException getAntScriptError() {
+        return ex;
+    }
+
+}
diff --git a/src/main/org/apache/ant/antunit/listener/FailureAntUnitListener.java b/src/main/org/apache/ant/antunit/listener/FailureAntUnitListener.java
index 4337f32..6653fa5 100644
--- a/src/main/org/apache/ant/antunit/listener/FailureAntUnitListener.java
+++ b/src/main/org/apache/ant/antunit/listener/FailureAntUnitListener.java
@@ -1,206 +1,206 @@
-/*

- * 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.ant.antunit.listener;

-

-import java.io.File;

-import java.io.FileNotFoundException;

-import java.io.FileOutputStream;

-import java.io.IOException;

-import java.text.NumberFormat;

-import java.util.Iterator;

-import java.util.SortedSet;

-import java.util.TreeSet;

-

-import org.apache.ant.antunit.AssertionFailedException;

-import org.apache.tools.ant.BuildException;

-import org.apache.tools.ant.Project;

-import org.apache.tools.ant.util.FileUtils;

-

-/**

- * This AntUnitListener creates a new buildfile with a target for each

- * failed test target in the AntUnit run. The generated target calls

- * the failed target (with setUp and tearDown if present in the called

- * project). 

- * This is intended for rerunning just failed tests.

- */

-public class FailureAntUnitListener extends BaseAntUnitListener {

- 

-    /** LineSeparator just for beautifying the output. */

-    private static final String BR = System.getProperty("line.separator"); 

-

-    /** A sorted list (without duplicates) of failed tests. */

-    private static SortedSet failedTests = new TreeSet();

-    

-    /** Where to write the generated buildfile. */

-    private static File failureBuildfile;

-    

-    /** The current running test project. Needed for addError()/addFailure(). */

-    private Project currentTestProject;

-

-    /** The current running build file. Needed for addError()/addFailure(). */

-    private String currentBuildFile;

-    

-    

-    /** No-arg constructor. */

-    public FailureAntUnitListener() {

-        super(new BaseAntUnitListener.SendLogTo(SendLogTo.ANT_LOG), "txt");

-    }

-

-    public void setFile(File file) {

-        failureBuildfile = file;

-    }

-

-    public void startTestSuite(Project testProject, String buildFile) {

-        super.startTestSuite(testProject, buildFile);

-        currentTestProject = testProject;

-        currentBuildFile = buildFile;

-    }

-    

-    public void addError(String target, Throwable ae) {

-        super.addError(target, ae);

-        failedTests.add(new TestInfos(currentTestProject, currentBuildFile, target, ae.getMessage()));

-    }

-    

-    public void addFailure(String target, AssertionFailedException ae) {

-        super.addFailure(target, ae);

-        failedTests.add(new TestInfos(currentTestProject, currentBuildFile, target, ae.getMessage()));

-    } 

-    

-    /** not in use */

-    public void endTest(String target) { 

-    }

-

-    public void endTestSuite(Project testProject, String buildFile) {

-        StringBuffer sb = new StringBuffer();

-        // <project> and antunit-target for direct run

-        sb.append("<project default=\"antunit\" xmlns:au=\"antlib:org.apache.ant.antunit\">");

-        sb.append(BR);

-        sb.append(BR);

-        sb.append("  <target name=\"antunit\">").append(BR);

-        sb.append("    <au:antunit>").append(BR);

-        sb.append("      <au:plainlistener/>").append(BR);

-        sb.append("      <file file=\"${ant.file}\"/>").append(BR);

-        sb.append("    </au:antunit>").append(BR);

-        sb.append("  </target>").append(BR);

-        sb.append(BR);

-        sb.append(BR);

-        

-        // one target for each failed test

-        int testNumber = 0;

-        NumberFormat f = NumberFormat.getIntegerInstance();

-        for (Iterator it = failedTests.iterator(); it.hasNext();) {

-            sb.append("  <target name=\"test");

-            sb.append(f.format(testNumber++));

-            sb.append("\">").append(BR);

-            TestInfos testInfos = (TestInfos) it.next();

-            sb.append(testInfos);

-            sb.append("  </target>").append(BR);

-            sb.append(BR);

-        }

-        

-        // close the <project>

-        sb.append("</project>").append(BR);

-        

-        // write the whole file

-        try {

-            FileOutputStream fos = new FileOutputStream(failureBuildfile);

-            fos.write(sb.toString().getBytes());

-            FileUtils.close(fos);

-        } catch (FileNotFoundException e) {

-            throw new BuildException(e);

-        } catch (IOException e) {

-            throw new BuildException(e);

-        }

-    }

-    

-    

-    /**

-     * Class for collecting needed information about failed tests.

-     */

-    public class TestInfos implements Comparable {

-        /** Does the project has a setUp target? */

-        boolean projectHasSetup = false;

-        

-        /** Does the project has a tearDown target? */

-        boolean projectHasTearDown = false;

-        

-        /** The called target. */

-        String target;

-        

-        /** The buildfile of the project. */

-        String buildfile;

-        

-        /** The error message which was shown. */

-        String errorMessage;

-        

-        public TestInfos(Project project, String buildfile, String target, String errorMessage) {

-            projectHasSetup = project.getTargets().containsKey("setUp");

-            projectHasTearDown = project.getTargets().containsKey("tearDown");

-            this.buildfile = buildfile;

-            this.target = target; 

-            this.errorMessage = errorMessage;

-        }

-        

-        /** 

-         * Creates an &lt;ant&gt; call according to the stored information. 

-         * @see java.lang.Object#toString()

-         */

-        public String toString() {

-            StringBuffer sb = new StringBuffer();

-            // make the reader of the buildfile happy

-            sb.append("    <!-- ");

-            sb.append(errorMessage);

-            sb.append(" -->").append(BR);

-            // <ant antfile="" inheritAll="false">

-            sb.append("    <ant ");

-            sb.append("antfile=\"");

-            sb.append(buildfile.replace('\\', '/'));

-            sb.append("\" ");

-            sb.append("inheritAll=\"false\">");

-            sb.append(BR);

-            // <target name=""/>

-            if (projectHasSetup) {

-                sb.append("      <target name=\"setUp\"/>").append(BR);

-            }

-            sb.append("      <target name=\"");

-            sb.append(target);

-            sb.append("\"/>");

-            sb.append(BR);

-            if (projectHasTearDown) {

-                sb.append("      <target name=\"tearDown\"/>").append(BR);

-            }

-            // </ant>

-            sb.append("    </ant>").append(BR);

-            return sb.toString();

-        }

-        

-        // Needed, so that a SortedSet could sort this class into the list.

-        public int compareTo(Object other) {

-            if (!(other instanceof TestInfos)) {

-                return -1;

-            } else {

-                TestInfos that = (TestInfos)other;

-                return this.toString().compareTo(that.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.ant.antunit.listener;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.text.NumberFormat;
+import java.util.Iterator;
+import java.util.SortedSet;
+import java.util.TreeSet;
+
+import org.apache.ant.antunit.AssertionFailedException;
+import org.apache.tools.ant.BuildException;
+import org.apache.tools.ant.Project;
+import org.apache.tools.ant.util.FileUtils;
+
+/**
+ * This AntUnitListener creates a new buildfile with a target for each
+ * failed test target in the AntUnit run. The generated target calls
+ * the failed target (with setUp and tearDown if present in the called
+ * project). 
+ * This is intended for rerunning just failed tests.
+ */
+public class FailureAntUnitListener extends BaseAntUnitListener {
+ 
+    /** LineSeparator just for beautifying the output. */
+    private static final String BR = System.getProperty("line.separator"); 
+
+    /** A sorted list (without duplicates) of failed tests. */
+    private static SortedSet failedTests = new TreeSet();
+    
+    /** Where to write the generated buildfile. */
+    private static File failureBuildfile;
+    
+    /** The current running test project. Needed for addError()/addFailure(). */
+    private Project currentTestProject;
+
+    /** The current running build file. Needed for addError()/addFailure(). */
+    private String currentBuildFile;
+    
+    
+    /** No-arg constructor. */
+    public FailureAntUnitListener() {
+        super(new BaseAntUnitListener.SendLogTo(SendLogTo.ANT_LOG), "txt");
+    }
+
+    public void setFile(File file) {
+        failureBuildfile = file;
+    }
+
+    public void startTestSuite(Project testProject, String buildFile) {
+        super.startTestSuite(testProject, buildFile);
+        currentTestProject = testProject;
+        currentBuildFile = buildFile;
+    }
+    
+    public void addError(String target, Throwable ae) {
+        super.addError(target, ae);
+        failedTests.add(new TestInfos(currentTestProject, currentBuildFile, target, ae.getMessage()));
+    }
+    
+    public void addFailure(String target, AssertionFailedException ae) {
+        super.addFailure(target, ae);
+        failedTests.add(new TestInfos(currentTestProject, currentBuildFile, target, ae.getMessage()));
+    } 
+    
+    /** not in use */
+    public void endTest(String target) { 
+    }
+
+    public void endTestSuite(Project testProject, String buildFile) {
+        StringBuffer sb = new StringBuffer();
+        // <project> and antunit-target for direct run
+        sb.append("<project default=\"antunit\" xmlns:au=\"antlib:org.apache.ant.antunit\">");
+        sb.append(BR);
+        sb.append(BR);
+        sb.append("  <target name=\"antunit\">").append(BR);
+        sb.append("    <au:antunit>").append(BR);
+        sb.append("      <au:plainlistener/>").append(BR);
+        sb.append("      <file file=\"${ant.file}\"/>").append(BR);
+        sb.append("    </au:antunit>").append(BR);
+        sb.append("  </target>").append(BR);
+        sb.append(BR);
+        sb.append(BR);
+        
+        // one target for each failed test
+        int testNumber = 0;
+        NumberFormat f = NumberFormat.getIntegerInstance();
+        for (Iterator it = failedTests.iterator(); it.hasNext();) {
+            sb.append("  <target name=\"test");
+            sb.append(f.format(testNumber++));
+            sb.append("\">").append(BR);
+            TestInfos testInfos = (TestInfos) it.next();
+            sb.append(testInfos);
+            sb.append("  </target>").append(BR);
+            sb.append(BR);
+        }
+        
+        // close the <project>
+        sb.append("</project>").append(BR);
+        
+        // write the whole file
+        try {
+            FileOutputStream fos = new FileOutputStream(failureBuildfile);
+            fos.write(sb.toString().getBytes());
+            FileUtils.close(fos);
+        } catch (FileNotFoundException e) {
+            throw new BuildException(e);
+        } catch (IOException e) {
+            throw new BuildException(e);
+        }
+    }
+    
+    
+    /**
+     * Class for collecting needed information about failed tests.
+     */
+    public class TestInfos implements Comparable {
+        /** Does the project has a setUp target? */
+        boolean projectHasSetup = false;
+        
+        /** Does the project has a tearDown target? */
+        boolean projectHasTearDown = false;
+        
+        /** The called target. */
+        String target;
+        
+        /** The buildfile of the project. */
+        String buildfile;
+        
+        /** The error message which was shown. */
+        String errorMessage;
+        
+        public TestInfos(Project project, String buildfile, String target, String errorMessage) {
+            projectHasSetup = project.getTargets().containsKey("setUp");
+            projectHasTearDown = project.getTargets().containsKey("tearDown");
+            this.buildfile = buildfile;
+            this.target = target; 
+            this.errorMessage = errorMessage;
+        }
+        
+        /** 
+         * Creates an &lt;ant&gt; call according to the stored information. 
+         * @see java.lang.Object#toString()
+         */
+        public String toString() {
+            StringBuffer sb = new StringBuffer();
+            // make the reader of the buildfile happy
+            sb.append("    <!-- ");
+            sb.append(errorMessage);
+            sb.append(" -->").append(BR);
+            // <ant antfile="" inheritAll="false">
+            sb.append("    <ant ");
+            sb.append("antfile=\"");
+            sb.append(buildfile.replace('\\', '/'));
+            sb.append("\" ");
+            sb.append("inheritAll=\"false\">");
+            sb.append(BR);
+            // <target name=""/>
+            if (projectHasSetup) {
+                sb.append("      <target name=\"setUp\"/>").append(BR);
+            }
+            sb.append("      <target name=\"");
+            sb.append(target);
+            sb.append("\"/>");
+            sb.append(BR);
+            if (projectHasTearDown) {
+                sb.append("      <target name=\"tearDown\"/>").append(BR);
+            }
+            // </ant>
+            sb.append("    </ant>").append(BR);
+            return sb.toString();
+        }
+        
+        // Needed, so that a SortedSet could sort this class into the list.
+        public int compareTo(Object other) {
+            if (!(other instanceof TestInfos)) {
+                return -1;
+            } else {
+                TestInfos that = (TestInfos)other;
+                return this.toString().compareTo(that.toString());   
+            }
+        }
+    }
+
+}