FAQ
Repository: ant
Updated Branches:
   refs/heads/1.9.x de5b4058b -> e982f0195


linefeeds


Project: http://git-wip-us.apache.org/repos/asf/ant/repo
Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/3966616f
Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/3966616f
Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/3966616f

Branch: refs/heads/1.9.x
Commit: 3966616f2cf74ff6b9e1944ff7cf013a6a229d03
Parents: de5b405
Author: Stefan Bodewig <bodewig@apache.org>
Authored: Sun May 22 18:33:55 2016 +0200
Committer: Stefan Bodewig <bodewig@apache.org>
Committed: Sun May 22 18:33:55 2016 +0200

----------------------------------------------------------------------
  .../optional/junit/JUnitTestRunnerTest.java | 434 +++++++++----------
  1 file changed, 217 insertions(+), 217 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ant/blob/3966616f/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
----------------------------------------------------------------------
diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
index c0d33e6..a75c5cb 100644
--- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
+++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
@@ -1,217 +1,217 @@
-/*
- * 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.junit;
-
-import static org.junit.Assert.assertTrue;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.fail;
-
-import java.io.PrintWriter;
-import java.io.StringWriter;
-
-import junit.framework.AssertionFailedError;
-import junit.framework.TestCase;
-import junit.framework.TestSuite;
-
-import org.apache.tools.ant.BuildException;
-import org.junit.Test;
-
-/**
- * Small testcase for the runner, tests are very very very basics.
- * They must be enhanced with time.
- *
- */
-public class JUnitTestRunnerTest{
-
-
-
- // check that a valid method name generates no errors
- @Test
- public void testValidMethod(){
- TestRunner runner = createRunnerForTestMethod(ValidMethodTestCase.class,"testA");
- runner.run();
- assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
- }
-
- // check that having an invalid method name generates an error
- @Test
- public void testInvalidMethod(){
- TestRunner runner = createRunnerForTestMethod(InvalidMethodTestCase.class,"testInvalid");
- runner.run();
- String error = runner.getFormatter().getError();
- // might be FAILURES or ERRORS depending on JUnit version?
- assertTrue(error, runner.getRetCode() != JUnitTestRunner.SUCCESS);
- }
-
- // check that having no suite generates no errors
- @Test
- public void testNoSuite(){
- TestRunner runner = createRunner(NoSuiteTestCase.class);
- runner.run();
- assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
- }
-
- // check that a suite generates no errors
- @Test
- public void testSuite(){
- TestRunner runner = createRunner(SuiteTestCase.class);
- runner.run();
- assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
- }
-
- // check that an invalid suite generates an error.
- @Test
- public void testInvalidSuite(){
- TestRunner runner = createRunner(InvalidSuiteTestCase.class);
- runner.run();
- String error = runner.getFormatter().getError();
- assertEquals(error, JUnitTestRunner.ERRORS, runner.getRetCode());
- assertTrue(error, error.indexOf("thrown on purpose") != -1);
- }
-
- // check that something which is not a testcase generates no errors
- // at first even though this is incorrect.
- @Test
- public void testNoTestCase(){
- TestRunner runner = createRunner(NoTestCase.class);
- runner.run();
- // On junit3 this is a FAILURE, on junit4 this is an ERROR
- int ret = runner.getRetCode();
-
- if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
- fail("Unexpected result " + ret + " from junit runner");
- }
- // JUnit3 test
- //assertEquals(runner.getFormatter().getError(), JUnitTestRunner.FAILURES, runner.getRetCode());
- }
-
- // check that an exception in the constructor is noticed
- @Test
- public void testInvalidTestCase(){
- TestRunner runner = createRunner(InvalidTestCase.class);
- runner.run();
- // On junit3 this is a FAILURE, on junit4 this is an ERROR
- int ret = runner.getRetCode();
- if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
- fail("Unexpected result " + ret + " from junit runner");
- }
- // JUNIT3 test
- //assertEquals(error, JUnitTestRunner.FAILURES, runner.getRetCode());
- //@fixme as of now does not report the original stacktrace.
- //assertTrue(error, error.indexOf("thrown on purpose") != -1);
- }
-
- protected TestRunner createRunner(Class<?> clazz){
- return new TestRunner(new JUnitTest(clazz.getName()), null,
- true, true, true);
- }
-
- protected TestRunner createRunnerForTestMethod(Class<?> clazz, String method){
- return new TestRunner(new JUnitTest(clazz.getName()), new String[] {method},
- true, true, true);
- }
-
- // the test runner that wrap the dummy formatter that interests us
- private final static class TestRunner extends JUnitTestRunner {
- private ResultFormatter formatter = new ResultFormatter();
- TestRunner(JUnitTest test, String[] methods, boolean haltonerror,
- boolean filtertrace, boolean haltonfailure){
- super(test, methods, haltonerror, filtertrace, haltonfailure,
- false, false, TestRunner.class.getClassLoader());
- // use the classloader that loaded this class otherwise
- // it will not be able to run inner classes if this test
- // is ran in non-forked mode.
- addFormatter(formatter);
- }
- ResultFormatter getFormatter(){
- return formatter;
- }
- }
-
- // dummy formatter just to catch the error
- private final static class ResultFormatter implements JUnitResultFormatter {
- private Throwable error;
- public void setSystemOutput(String output){}
- public void setSystemError(String output){}
- public void startTestSuite(JUnitTest suite) throws BuildException{}
- public void endTestSuite(JUnitTest suite) throws BuildException{}
- public void setOutput(java.io.OutputStream out){}
- public void startTest(junit.framework.Test t) {}
- public void endTest(junit.framework.Test test) {}
- public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
- public void addError(junit.framework.Test test, Throwable t) {
- error = t;
- }
- String getError(){
- if (error == null){
- return "";
- }
- StringWriter sw = new StringWriter();
- error.printStackTrace(new PrintWriter(sw));
- return sw.toString();
- }
- }
-
- public static class NoTestCase {
- }
-
- public static class InvalidMethodTestCase extends TestCase {
- public InvalidMethodTestCase(String name){ super(name); }
- public void testA(){
- throw new NullPointerException("thrown on purpose");
- }
- }
-
- public static class ValidMethodTestCase extends TestCase {
- public ValidMethodTestCase(String name){ super(name); }
- public void testA(){
- // expected to be executed
- }
- public void testB(){
- // should not be executed
- throw new NullPointerException("thrown on purpose");
- }
- }
-
- public static class InvalidTestCase extends TestCase {
- public InvalidTestCase(String name){
- super(name);
- throw new NullPointerException("thrown on purpose");
- }
- }
-
- public static class NoSuiteTestCase extends TestCase {
- public NoSuiteTestCase(String name){ super(name); }
- public void testA(){}
- }
-
- public static class SuiteTestCase extends NoSuiteTestCase {
- public SuiteTestCase(String name){ super(name); }
- public static junit.framework.Test suite(){
- return new TestSuite(SuiteTestCase.class);
- }
- }
-
- public static class InvalidSuiteTestCase extends NoSuiteTestCase {
- public InvalidSuiteTestCase(String name){ super(name); }
- public static junit.framework.Test suite(){
- throw new NullPointerException("thrown on purpose");
- }
- }
-}
-
+/*
+ * 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.junit;
+
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.fail;
+
+import java.io.PrintWriter;
+import java.io.StringWriter;
+
+import junit.framework.AssertionFailedError;
+import junit.framework.TestCase;
+import junit.framework.TestSuite;
+
+import org.apache.tools.ant.BuildException;
+import org.junit.Test;
+
+/**
+ * Small testcase for the runner, tests are very very very basics.
+ * They must be enhanced with time.
+ *
+ */
+public class JUnitTestRunnerTest{
+
+
+
+ // check that a valid method name generates no errors
+ @Test
+ public void testValidMethod(){
+ TestRunner runner = createRunnerForTestMethod(ValidMethodTestCase.class,"testA");
+ runner.run();
+ assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
+ }
+
+ // check that having an invalid method name generates an error
+ @Test
+ public void testInvalidMethod(){
+ TestRunner runner = createRunnerForTestMethod(InvalidMethodTestCase.class,"testInvalid");
+ runner.run();
+ String error = runner.getFormatter().getError();
+ // might be FAILURES or ERRORS depending on JUnit version?
+ assertTrue(error, runner.getRetCode() != JUnitTestRunner.SUCCESS);
+ }
+
+ // check that having no suite generates no errors
+ @Test
+ public void testNoSuite(){
+ TestRunner runner = createRunner(NoSuiteTestCase.class);
+ runner.run();
+ assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
+ }
+
+ // check that a suite generates no errors
+ @Test
+ public void testSuite(){
+ TestRunner runner = createRunner(SuiteTestCase.class);
+ runner.run();
+ assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
+ }
+
+ // check that an invalid suite generates an error.
+ @Test
+ public void testInvalidSuite(){
+ TestRunner runner = createRunner(InvalidSuiteTestCase.class);
+ runner.run();
+ String error = runner.getFormatter().getError();
+ assertEquals(error, JUnitTestRunner.ERRORS, runner.getRetCode());
+ assertTrue(error, error.indexOf("thrown on purpose") != -1);
+ }
+
+ // check that something which is not a testcase generates no errors
+ // at first even though this is incorrect.
+ @Test
+ public void testNoTestCase(){
+ TestRunner runner = createRunner(NoTestCase.class);
+ runner.run();
+ // On junit3 this is a FAILURE, on junit4 this is an ERROR
+ int ret = runner.getRetCode();
+
+ if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
+ fail("Unexpected result " + ret + " from junit runner");
+ }
+ // JUnit3 test
+ //assertEquals(runner.getFormatter().getError(), JUnitTestRunner.FAILURES, runner.getRetCode());
+ }
+
+ // check that an exception in the constructor is noticed
+ @Test
+ public void testInvalidTestCase(){
+ TestRunner runner = createRunner(InvalidTestCase.class);
+ runner.run();
+ // On junit3 this is a FAILURE, on junit4 this is an ERROR
+ int ret = runner.getRetCode();
+ if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
+ fail("Unexpected result " + ret + " from junit runner");
+ }
+ // JUNIT3 test
+ //assertEquals(error, JUnitTestRunner.FAILURES, runner.getRetCode());
+ //@fixme as of now does not report the original stacktrace.
+ //assertTrue(error, error.indexOf("thrown on purpose") != -1);
+ }
+
+ protected TestRunner createRunner(Class<?> clazz){
+ return new TestRunner(new JUnitTest(clazz.getName()), null,
+ true, true, true);
+ }
+
+ protected TestRunner createRunnerForTestMethod(Class<?> clazz, String method){
+ return new TestRunner(new JUnitTest(clazz.getName()), new String[] {method},
+ true, true, true);
+ }
+
+ // the test runner that wrap the dummy formatter that interests us
+ private final static class TestRunner extends JUnitTestRunner {
+ private ResultFormatter formatter = new ResultFormatter();
+ TestRunner(JUnitTest test, String[] methods, boolean haltonerror,
+ boolean filtertrace, boolean haltonfailure){
+ super(test, methods, haltonerror, filtertrace, haltonfailure,
+ false, false, TestRunner.class.getClassLoader());
+ // use the classloader that loaded this class otherwise
+ // it will not be able to run inner classes if this test
+ // is ran in non-forked mode.
+ addFormatter(formatter);
+ }
+ ResultFormatter getFormatter(){
+ return formatter;
+ }
+ }
+
+ // dummy formatter just to catch the error
+ private final static class ResultFormatter implements JUnitResultFormatter {
+ private Throwable error;
+ public void setSystemOutput(String output){}
+ public void setSystemError(String output){}
+ public void startTestSuite(JUnitTest suite) throws BuildException{}
+ public void endTestSuite(JUnitTest suite) throws BuildException{}
+ public void setOutput(java.io.OutputStream out){}
+ public void startTest(junit.framework.Test t) {}
+ public void endTest(junit.framework.Test test) {}
+ public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
+ public void addError(junit.framework.Test test, Throwable t) {
+ error = t;
+ }
+ String getError(){
+ if (error == null){
+ return "";
+ }
+ StringWriter sw = new StringWriter();
+ error.printStackTrace(new PrintWriter(sw));
+ return sw.toString();
+ }
+ }
+
+ public static class NoTestCase {
+ }
+
+ public static class InvalidMethodTestCase extends TestCase {
+ public InvalidMethodTestCase(String name){ super(name); }
+ public void testA(){
+ throw new NullPointerException("thrown on purpose");
+ }
+ }
+
+ public static class ValidMethodTestCase extends TestCase {
+ public ValidMethodTestCase(String name){ super(name); }
+ public void testA(){
+ // expected to be executed
+ }
+ public void testB(){
+ // should not be executed
+ throw new NullPointerException("thrown on purpose");
+ }
+ }
+
+ public static class InvalidTestCase extends TestCase {
+ public InvalidTestCase(String name){
+ super(name);
+ throw new NullPointerException("thrown on purpose");
+ }
+ }
+
+ public static class NoSuiteTestCase extends TestCase {
+ public NoSuiteTestCase(String name){ super(name); }
+ public void testA(){}
+ }
+
+ public static class SuiteTestCase extends NoSuiteTestCase {
+ public SuiteTestCase(String name){ super(name); }
+ public static junit.framework.Test suite(){
+ return new TestSuite(SuiteTestCase.class);
+ }
+ }
+
+ public static class InvalidSuiteTestCase extends NoSuiteTestCase {
+ public InvalidSuiteTestCase(String name){ super(name); }
+ public static junit.framework.Test suite(){
+ throw new NullPointerException("thrown on purpose");
+ }
+ }
+}
+

Search Discussions

  • Bodewig at May 22, 2016 at 4:39 pm
    Preserve cause of AssertionError

    … when converting to AssertionFailedError in JUnitTestRunner.


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/421ae34d
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/421ae34d
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/421ae34d

    Branch: refs/heads/1.9.x
    Commit: 421ae34d7037a8cbdb372e938e269caa081b7166
    Parents: 3966616
    Author: Dana Dahlstrom <dahlstrom+apache@googlers.com>
    Authored: Mon Feb 8 21:40:56 2016 -0800
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:34:28 2016 +0200

    ----------------------------------------------------------------------
      .../optional/junit/JUnitTestRunner.java | 1 +
      .../optional/junit/JUnitTestRunnerTest.java | 30 +++++++++++++++++++-
      2 files changed, 30 insertions(+), 1 deletion(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/421ae34d/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    ----------------------------------------------------------------------
    diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    index a457375..0397d84 100644
    --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    @@ -1240,6 +1240,7 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR
                          final String msg = t.getMessage();
                          final AssertionFailedError failure = msg != null
                              ? new AssertionFailedError(msg) : new AssertionFailedError();
    + failure.initCause(t.getCause());
                          failure.setStackTrace(t.getStackTrace());
                          testListener.addFailure(test, failure);
                      } else {

    http://git-wip-us.apache.org/repos/asf/ant/blob/421ae34d/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    ----------------------------------------------------------------------
    diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    index a75c5cb..e5092fe 100644
    --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    @@ -116,6 +116,20 @@ public class JUnitTestRunnerTest{
              //assertTrue(error, error.indexOf("thrown on purpose") != -1);
          }

    + // check that JUnit 4 synthetic AssertionFailedError gets message and cause from AssertionError
    + @Test
    + public void testJUnit4AssertionError(){
    + TestRunner runner = createRunnerForTestMethod(AssertionErrorTest.class,"throwsAssertionError");
    + runner.run();
    +
    + AssertionFailedError failure = runner.getFormatter().getFailure();
    + assertEquals("failure message", failure.getMessage());
    +
    + Throwable cause = failure.getCause();
    + assertEquals(RuntimeException.class, cause.getClass());
    + assertEquals("cause message", cause.getMessage());
    + }
    +
          protected TestRunner createRunner(Class<?> clazz){
              return new TestRunner(new JUnitTest(clazz.getName()), null,
                                                  true, true, true);
    @@ -145,6 +159,7 @@ public class JUnitTestRunnerTest{

          // dummy formatter just to catch the error
          private final static class ResultFormatter implements JUnitResultFormatter {
    + private AssertionFailedError failure;
              private Throwable error;
              public void setSystemOutput(String output){}
              public void setSystemError(String output){}
    @@ -153,7 +168,12 @@ public class JUnitTestRunnerTest{
              public void setOutput(java.io.OutputStream out){}
              public void startTest(junit.framework.Test t) {}
              public void endTest(junit.framework.Test test) {}
    - public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
    + public void addFailure(junit.framework.Test test, AssertionFailedError t) {
    + failure = t;
    + }
    + AssertionFailedError getFailure() {
    + return failure;
    + }
              public void addError(junit.framework.Test test, Throwable t) {
                  error = t;
              }
    @@ -213,5 +233,13 @@ public class JUnitTestRunnerTest{
                  throw new NullPointerException("thrown on purpose");
              }
          }
    +
    + public static class AssertionErrorTest {
    + @Test public void throwsAssertionError() {
    + AssertionError assertionError = new AssertionError("failure message");
    + assertionError.initCause(new RuntimeException("cause message"));
    + throw assertionError;
    + }
    + }
      }
  • Bodewig at May 22, 2016 at 4:39 pm
    record fix for 58982 by Dana Dahlstrom

    https://bz.apache.org/bugzilla/show_bug.cgi?id=58982


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/e982f019
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/e982f019
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/e982f019

    Branch: refs/heads/1.9.x
    Commit: e982f01953984e633e1415b7c06d56afcc2048d7
    Parents: 421ae34
    Author: Stefan Bodewig <bodewig@apache.org>
    Authored: Sun May 22 18:38:10 2016 +0200
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:38:10 2016 +0200

    ----------------------------------------------------------------------
      CONTRIBUTORS | 1 +
      WHATSNEW | 4 ++++
      contributors.xml | 4 ++++
      3 files changed, 9 insertions(+)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/CONTRIBUTORS
    ----------------------------------------------------------------------
    diff --git a/CONTRIBUTORS b/CONTRIBUTORS
    index 8e47e05..3b7b5ab 100644
    --- a/CONTRIBUTORS
    +++ b/CONTRIBUTORS
    @@ -77,6 +77,7 @@ D'Arcy Smith
      Dale Anson
      Dale Sherwood
      Dan Armbrust
    +Dana Dahlstrom
      Daniel Henrique
      Daniel Ribagnac
      Daniel Spilker

    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/WHATSNEW
    ----------------------------------------------------------------------
    diff --git a/WHATSNEW b/WHATSNEW
    index 25a0464..cddd662 100644
    --- a/WHATSNEW
    +++ b/WHATSNEW
    @@ -27,6 +27,10 @@ Fixed bugs:
      Other changes:
      --------------

    + * <junit> now initializes the cause of the AssertionFailedError when
    + converting from AssertionError.
    + Bugzilla Report 58982
    +
      Changes from Ant 1.9.6 TO Ant 1.9.7
      ===================================


    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/contributors.xml
    ----------------------------------------------------------------------
    diff --git a/contributors.xml b/contributors.xml
    index 2bfa1b0..0a079d2 100644
    --- a/contributors.xml
    +++ b/contributors.xml
    @@ -332,6 +332,10 @@
          <last>Armbrust</last>
        </name>
        <name>
    + <first>Dana</first>
    + <last>Dahlstrom</last>
    + </name>
    + <name>
          <first>Daniel</first>
          <last>Henrique</last>
        </name>
  • Bodewig at May 22, 2016 at 4:39 pm
    Repository: ant
    Updated Branches:
       refs/heads/master 440021dbf -> d5f2b0c0b


    linefeeds


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/3966616f
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/3966616f
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/3966616f

    Branch: refs/heads/master
    Commit: 3966616f2cf74ff6b9e1944ff7cf013a6a229d03
    Parents: de5b405
    Author: Stefan Bodewig <bodewig@apache.org>
    Authored: Sun May 22 18:33:55 2016 +0200
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:33:55 2016 +0200

    ----------------------------------------------------------------------
      .../optional/junit/JUnitTestRunnerTest.java | 434 +++++++++----------
      1 file changed, 217 insertions(+), 217 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/3966616f/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    ----------------------------------------------------------------------
    diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    index c0d33e6..a75c5cb 100644
    --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    @@ -1,217 +1,217 @@
    -/*
    - * 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.junit;
    -
    -import static org.junit.Assert.assertTrue;
    -import static org.junit.Assert.assertEquals;
    -import static org.junit.Assert.fail;
    -
    -import java.io.PrintWriter;
    -import java.io.StringWriter;
    -
    -import junit.framework.AssertionFailedError;
    -import junit.framework.TestCase;
    -import junit.framework.TestSuite;
    -
    -import org.apache.tools.ant.BuildException;
    -import org.junit.Test;
    -
    -/**
    - * Small testcase for the runner, tests are very very very basics.
    - * They must be enhanced with time.
    - *
    - */
    -public class JUnitTestRunnerTest{
    -
    -
    -
    - // check that a valid method name generates no errors
    - @Test
    - public void testValidMethod(){
    - TestRunner runner = createRunnerForTestMethod(ValidMethodTestCase.class,"testA");
    - runner.run();
    - assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    - }
    -
    - // check that having an invalid method name generates an error
    - @Test
    - public void testInvalidMethod(){
    - TestRunner runner = createRunnerForTestMethod(InvalidMethodTestCase.class,"testInvalid");
    - runner.run();
    - String error = runner.getFormatter().getError();
    - // might be FAILURES or ERRORS depending on JUnit version?
    - assertTrue(error, runner.getRetCode() != JUnitTestRunner.SUCCESS);
    - }
    -
    - // check that having no suite generates no errors
    - @Test
    - public void testNoSuite(){
    - TestRunner runner = createRunner(NoSuiteTestCase.class);
    - runner.run();
    - assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    - }
    -
    - // check that a suite generates no errors
    - @Test
    - public void testSuite(){
    - TestRunner runner = createRunner(SuiteTestCase.class);
    - runner.run();
    - assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    - }
    -
    - // check that an invalid suite generates an error.
    - @Test
    - public void testInvalidSuite(){
    - TestRunner runner = createRunner(InvalidSuiteTestCase.class);
    - runner.run();
    - String error = runner.getFormatter().getError();
    - assertEquals(error, JUnitTestRunner.ERRORS, runner.getRetCode());
    - assertTrue(error, error.indexOf("thrown on purpose") != -1);
    - }
    -
    - // check that something which is not a testcase generates no errors
    - // at first even though this is incorrect.
    - @Test
    - public void testNoTestCase(){
    - TestRunner runner = createRunner(NoTestCase.class);
    - runner.run();
    - // On junit3 this is a FAILURE, on junit4 this is an ERROR
    - int ret = runner.getRetCode();
    -
    - if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
    - fail("Unexpected result " + ret + " from junit runner");
    - }
    - // JUnit3 test
    - //assertEquals(runner.getFormatter().getError(), JUnitTestRunner.FAILURES, runner.getRetCode());
    - }
    -
    - // check that an exception in the constructor is noticed
    - @Test
    - public void testInvalidTestCase(){
    - TestRunner runner = createRunner(InvalidTestCase.class);
    - runner.run();
    - // On junit3 this is a FAILURE, on junit4 this is an ERROR
    - int ret = runner.getRetCode();
    - if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
    - fail("Unexpected result " + ret + " from junit runner");
    - }
    - // JUNIT3 test
    - //assertEquals(error, JUnitTestRunner.FAILURES, runner.getRetCode());
    - //@fixme as of now does not report the original stacktrace.
    - //assertTrue(error, error.indexOf("thrown on purpose") != -1);
    - }
    -
    - protected TestRunner createRunner(Class<?> clazz){
    - return new TestRunner(new JUnitTest(clazz.getName()), null,
    - true, true, true);
    - }
    -
    - protected TestRunner createRunnerForTestMethod(Class<?> clazz, String method){
    - return new TestRunner(new JUnitTest(clazz.getName()), new String[] {method},
    - true, true, true);
    - }
    -
    - // the test runner that wrap the dummy formatter that interests us
    - private final static class TestRunner extends JUnitTestRunner {
    - private ResultFormatter formatter = new ResultFormatter();
    - TestRunner(JUnitTest test, String[] methods, boolean haltonerror,
    - boolean filtertrace, boolean haltonfailure){
    - super(test, methods, haltonerror, filtertrace, haltonfailure,
    - false, false, TestRunner.class.getClassLoader());
    - // use the classloader that loaded this class otherwise
    - // it will not be able to run inner classes if this test
    - // is ran in non-forked mode.
    - addFormatter(formatter);
    - }
    - ResultFormatter getFormatter(){
    - return formatter;
    - }
    - }
    -
    - // dummy formatter just to catch the error
    - private final static class ResultFormatter implements JUnitResultFormatter {
    - private Throwable error;
    - public void setSystemOutput(String output){}
    - public void setSystemError(String output){}
    - public void startTestSuite(JUnitTest suite) throws BuildException{}
    - public void endTestSuite(JUnitTest suite) throws BuildException{}
    - public void setOutput(java.io.OutputStream out){}
    - public void startTest(junit.framework.Test t) {}
    - public void endTest(junit.framework.Test test) {}
    - public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
    - public void addError(junit.framework.Test test, Throwable t) {
    - error = t;
    - }
    - String getError(){
    - if (error == null){
    - return "";
    - }
    - StringWriter sw = new StringWriter();
    - error.printStackTrace(new PrintWriter(sw));
    - return sw.toString();
    - }
    - }
    -
    - public static class NoTestCase {
    - }
    -
    - public static class InvalidMethodTestCase extends TestCase {
    - public InvalidMethodTestCase(String name){ super(name); }
    - public void testA(){
    - throw new NullPointerException("thrown on purpose");
    - }
    - }
    -
    - public static class ValidMethodTestCase extends TestCase {
    - public ValidMethodTestCase(String name){ super(name); }
    - public void testA(){
    - // expected to be executed
    - }
    - public void testB(){
    - // should not be executed
    - throw new NullPointerException("thrown on purpose");
    - }
    - }
    -
    - public static class InvalidTestCase extends TestCase {
    - public InvalidTestCase(String name){
    - super(name);
    - throw new NullPointerException("thrown on purpose");
    - }
    - }
    -
    - public static class NoSuiteTestCase extends TestCase {
    - public NoSuiteTestCase(String name){ super(name); }
    - public void testA(){}
    - }
    -
    - public static class SuiteTestCase extends NoSuiteTestCase {
    - public SuiteTestCase(String name){ super(name); }
    - public static junit.framework.Test suite(){
    - return new TestSuite(SuiteTestCase.class);
    - }
    - }
    -
    - public static class InvalidSuiteTestCase extends NoSuiteTestCase {
    - public InvalidSuiteTestCase(String name){ super(name); }
    - public static junit.framework.Test suite(){
    - throw new NullPointerException("thrown on purpose");
    - }
    - }
    -}
    -
    +/*
    + * 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.junit;
    +
    +import static org.junit.Assert.assertTrue;
    +import static org.junit.Assert.assertEquals;
    +import static org.junit.Assert.fail;
    +
    +import java.io.PrintWriter;
    +import java.io.StringWriter;
    +
    +import junit.framework.AssertionFailedError;
    +import junit.framework.TestCase;
    +import junit.framework.TestSuite;
    +
    +import org.apache.tools.ant.BuildException;
    +import org.junit.Test;
    +
    +/**
    + * Small testcase for the runner, tests are very very very basics.
    + * They must be enhanced with time.
    + *
    + */
    +public class JUnitTestRunnerTest{
    +
    +
    +
    + // check that a valid method name generates no errors
    + @Test
    + public void testValidMethod(){
    + TestRunner runner = createRunnerForTestMethod(ValidMethodTestCase.class,"testA");
    + runner.run();
    + assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    + }
    +
    + // check that having an invalid method name generates an error
    + @Test
    + public void testInvalidMethod(){
    + TestRunner runner = createRunnerForTestMethod(InvalidMethodTestCase.class,"testInvalid");
    + runner.run();
    + String error = runner.getFormatter().getError();
    + // might be FAILURES or ERRORS depending on JUnit version?
    + assertTrue(error, runner.getRetCode() != JUnitTestRunner.SUCCESS);
    + }
    +
    + // check that having no suite generates no errors
    + @Test
    + public void testNoSuite(){
    + TestRunner runner = createRunner(NoSuiteTestCase.class);
    + runner.run();
    + assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    + }
    +
    + // check that a suite generates no errors
    + @Test
    + public void testSuite(){
    + TestRunner runner = createRunner(SuiteTestCase.class);
    + runner.run();
    + assertEquals(runner.getFormatter().getError(), JUnitTestRunner.SUCCESS, runner.getRetCode());
    + }
    +
    + // check that an invalid suite generates an error.
    + @Test
    + public void testInvalidSuite(){
    + TestRunner runner = createRunner(InvalidSuiteTestCase.class);
    + runner.run();
    + String error = runner.getFormatter().getError();
    + assertEquals(error, JUnitTestRunner.ERRORS, runner.getRetCode());
    + assertTrue(error, error.indexOf("thrown on purpose") != -1);
    + }
    +
    + // check that something which is not a testcase generates no errors
    + // at first even though this is incorrect.
    + @Test
    + public void testNoTestCase(){
    + TestRunner runner = createRunner(NoTestCase.class);
    + runner.run();
    + // On junit3 this is a FAILURE, on junit4 this is an ERROR
    + int ret = runner.getRetCode();
    +
    + if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
    + fail("Unexpected result " + ret + " from junit runner");
    + }
    + // JUnit3 test
    + //assertEquals(runner.getFormatter().getError(), JUnitTestRunner.FAILURES, runner.getRetCode());
    + }
    +
    + // check that an exception in the constructor is noticed
    + @Test
    + public void testInvalidTestCase(){
    + TestRunner runner = createRunner(InvalidTestCase.class);
    + runner.run();
    + // On junit3 this is a FAILURE, on junit4 this is an ERROR
    + int ret = runner.getRetCode();
    + if (ret != JUnitTestRunner.FAILURES && ret != JUnitTestRunner.ERRORS) {
    + fail("Unexpected result " + ret + " from junit runner");
    + }
    + // JUNIT3 test
    + //assertEquals(error, JUnitTestRunner.FAILURES, runner.getRetCode());
    + //@fixme as of now does not report the original stacktrace.
    + //assertTrue(error, error.indexOf("thrown on purpose") != -1);
    + }
    +
    + protected TestRunner createRunner(Class<?> clazz){
    + return new TestRunner(new JUnitTest(clazz.getName()), null,
    + true, true, true);
    + }
    +
    + protected TestRunner createRunnerForTestMethod(Class<?> clazz, String method){
    + return new TestRunner(new JUnitTest(clazz.getName()), new String[] {method},
    + true, true, true);
    + }
    +
    + // the test runner that wrap the dummy formatter that interests us
    + private final static class TestRunner extends JUnitTestRunner {
    + private ResultFormatter formatter = new ResultFormatter();
    + TestRunner(JUnitTest test, String[] methods, boolean haltonerror,
    + boolean filtertrace, boolean haltonfailure){
    + super(test, methods, haltonerror, filtertrace, haltonfailure,
    + false, false, TestRunner.class.getClassLoader());
    + // use the classloader that loaded this class otherwise
    + // it will not be able to run inner classes if this test
    + // is ran in non-forked mode.
    + addFormatter(formatter);
    + }
    + ResultFormatter getFormatter(){
    + return formatter;
    + }
    + }
    +
    + // dummy formatter just to catch the error
    + private final static class ResultFormatter implements JUnitResultFormatter {
    + private Throwable error;
    + public void setSystemOutput(String output){}
    + public void setSystemError(String output){}
    + public void startTestSuite(JUnitTest suite) throws BuildException{}
    + public void endTestSuite(JUnitTest suite) throws BuildException{}
    + public void setOutput(java.io.OutputStream out){}
    + public void startTest(junit.framework.Test t) {}
    + public void endTest(junit.framework.Test test) {}
    + public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
    + public void addError(junit.framework.Test test, Throwable t) {
    + error = t;
    + }
    + String getError(){
    + if (error == null){
    + return "";
    + }
    + StringWriter sw = new StringWriter();
    + error.printStackTrace(new PrintWriter(sw));
    + return sw.toString();
    + }
    + }
    +
    + public static class NoTestCase {
    + }
    +
    + public static class InvalidMethodTestCase extends TestCase {
    + public InvalidMethodTestCase(String name){ super(name); }
    + public void testA(){
    + throw new NullPointerException("thrown on purpose");
    + }
    + }
    +
    + public static class ValidMethodTestCase extends TestCase {
    + public ValidMethodTestCase(String name){ super(name); }
    + public void testA(){
    + // expected to be executed
    + }
    + public void testB(){
    + // should not be executed
    + throw new NullPointerException("thrown on purpose");
    + }
    + }
    +
    + public static class InvalidTestCase extends TestCase {
    + public InvalidTestCase(String name){
    + super(name);
    + throw new NullPointerException("thrown on purpose");
    + }
    + }
    +
    + public static class NoSuiteTestCase extends TestCase {
    + public NoSuiteTestCase(String name){ super(name); }
    + public void testA(){}
    + }
    +
    + public static class SuiteTestCase extends NoSuiteTestCase {
    + public SuiteTestCase(String name){ super(name); }
    + public static junit.framework.Test suite(){
    + return new TestSuite(SuiteTestCase.class);
    + }
    + }
    +
    + public static class InvalidSuiteTestCase extends NoSuiteTestCase {
    + public InvalidSuiteTestCase(String name){ super(name); }
    + public static junit.framework.Test suite(){
    + throw new NullPointerException("thrown on purpose");
    + }
    + }
    +}
    +
  • Bodewig at May 22, 2016 at 4:39 pm
    Preserve cause of AssertionError

    … when converting to AssertionFailedError in JUnitTestRunner.


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/421ae34d
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/421ae34d
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/421ae34d

    Branch: refs/heads/master
    Commit: 421ae34d7037a8cbdb372e938e269caa081b7166
    Parents: 3966616
    Author: Dana Dahlstrom <dahlstrom+apache@googlers.com>
    Authored: Mon Feb 8 21:40:56 2016 -0800
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:34:28 2016 +0200

    ----------------------------------------------------------------------
      .../optional/junit/JUnitTestRunner.java | 1 +
      .../optional/junit/JUnitTestRunnerTest.java | 30 +++++++++++++++++++-
      2 files changed, 30 insertions(+), 1 deletion(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/421ae34d/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    ----------------------------------------------------------------------
    diff --git a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    index a457375..0397d84 100644
    --- a/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    +++ b/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
    @@ -1240,6 +1240,7 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR
                          final String msg = t.getMessage();
                          final AssertionFailedError failure = msg != null
                              ? new AssertionFailedError(msg) : new AssertionFailedError();
    + failure.initCause(t.getCause());
                          failure.setStackTrace(t.getStackTrace());
                          testListener.addFailure(test, failure);
                      } else {

    http://git-wip-us.apache.org/repos/asf/ant/blob/421ae34d/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    ----------------------------------------------------------------------
    diff --git a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    index a75c5cb..e5092fe 100644
    --- a/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    +++ b/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunnerTest.java
    @@ -116,6 +116,20 @@ public class JUnitTestRunnerTest{
              //assertTrue(error, error.indexOf("thrown on purpose") != -1);
          }

    + // check that JUnit 4 synthetic AssertionFailedError gets message and cause from AssertionError
    + @Test
    + public void testJUnit4AssertionError(){
    + TestRunner runner = createRunnerForTestMethod(AssertionErrorTest.class,"throwsAssertionError");
    + runner.run();
    +
    + AssertionFailedError failure = runner.getFormatter().getFailure();
    + assertEquals("failure message", failure.getMessage());
    +
    + Throwable cause = failure.getCause();
    + assertEquals(RuntimeException.class, cause.getClass());
    + assertEquals("cause message", cause.getMessage());
    + }
    +
          protected TestRunner createRunner(Class<?> clazz){
              return new TestRunner(new JUnitTest(clazz.getName()), null,
                                                  true, true, true);
    @@ -145,6 +159,7 @@ public class JUnitTestRunnerTest{

          // dummy formatter just to catch the error
          private final static class ResultFormatter implements JUnitResultFormatter {
    + private AssertionFailedError failure;
              private Throwable error;
              public void setSystemOutput(String output){}
              public void setSystemError(String output){}
    @@ -153,7 +168,12 @@ public class JUnitTestRunnerTest{
              public void setOutput(java.io.OutputStream out){}
              public void startTest(junit.framework.Test t) {}
              public void endTest(junit.framework.Test test) {}
    - public void addFailure(junit.framework.Test test, AssertionFailedError t) { }
    + public void addFailure(junit.framework.Test test, AssertionFailedError t) {
    + failure = t;
    + }
    + AssertionFailedError getFailure() {
    + return failure;
    + }
              public void addError(junit.framework.Test test, Throwable t) {
                  error = t;
              }
    @@ -213,5 +233,13 @@ public class JUnitTestRunnerTest{
                  throw new NullPointerException("thrown on purpose");
              }
          }
    +
    + public static class AssertionErrorTest {
    + @Test public void throwsAssertionError() {
    + AssertionError assertionError = new AssertionError("failure message");
    + assertionError.initCause(new RuntimeException("cause message"));
    + throw assertionError;
    + }
    + }
      }
  • Bodewig at May 22, 2016 at 4:39 pm
    Merge branch '1.9.x'


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/d5f2b0c0
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/d5f2b0c0
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/d5f2b0c0

    Branch: refs/heads/master
    Commit: d5f2b0c0b9ac2d1ec1f6475ed4c59562d6c09175
    Parents: 440021d e982f01
    Author: Stefan Bodewig <bodewig@apache.org>
    Authored: Sun May 22 18:39:40 2016 +0200
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:39:40 2016 +0200

    ----------------------------------------------------------------------
      CONTRIBUTORS | 1 +
      WHATSNEW | 4 +
      contributors.xml | 4 +
      .../optional/junit/JUnitTestRunner.java | 1 +
      .../optional/junit/JUnitTestRunnerTest.java | 462 ++++++++++---------
      5 files changed, 255 insertions(+), 217 deletions(-)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/d5f2b0c0/WHATSNEW
    ----------------------------------------------------------------------
    diff --cc WHATSNEW
    index d91c476,cddd662..729644e
    --- a/WHATSNEW
    +++ b/WHATSNEW
    @@@ -33,11 -27,10 +33,15 @@@ Fixed bugs
       Other changes:
       --------------

      + * New file selectors <executable>, <symlink> and <ownedBy>.
      +
      + * New task <setpermissions> that provides the ability to set POSIX
      + compatible permssions via NIO's PosixFilePermission
      +
    + * <junit> now initializes the cause of the AssertionFailedError when
    + converting from AssertionError.
    + Bugzilla Report 58982
    +
       Changes from Ant 1.9.6 TO Ant 1.9.7
       ===================================
  • Bodewig at May 22, 2016 at 4:39 pm
    record fix for 58982 by Dana Dahlstrom

    https://bz.apache.org/bugzilla/show_bug.cgi?id=58982


    Project: http://git-wip-us.apache.org/repos/asf/ant/repo
    Commit: http://git-wip-us.apache.org/repos/asf/ant/commit/e982f019
    Tree: http://git-wip-us.apache.org/repos/asf/ant/tree/e982f019
    Diff: http://git-wip-us.apache.org/repos/asf/ant/diff/e982f019

    Branch: refs/heads/master
    Commit: e982f01953984e633e1415b7c06d56afcc2048d7
    Parents: 421ae34
    Author: Stefan Bodewig <bodewig@apache.org>
    Authored: Sun May 22 18:38:10 2016 +0200
    Committer: Stefan Bodewig <bodewig@apache.org>
    Committed: Sun May 22 18:38:10 2016 +0200

    ----------------------------------------------------------------------
      CONTRIBUTORS | 1 +
      WHATSNEW | 4 ++++
      contributors.xml | 4 ++++
      3 files changed, 9 insertions(+)
    ----------------------------------------------------------------------


    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/CONTRIBUTORS
    ----------------------------------------------------------------------
    diff --git a/CONTRIBUTORS b/CONTRIBUTORS
    index 8e47e05..3b7b5ab 100644
    --- a/CONTRIBUTORS
    +++ b/CONTRIBUTORS
    @@ -77,6 +77,7 @@ D'Arcy Smith
      Dale Anson
      Dale Sherwood
      Dan Armbrust
    +Dana Dahlstrom
      Daniel Henrique
      Daniel Ribagnac
      Daniel Spilker

    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/WHATSNEW
    ----------------------------------------------------------------------
    diff --git a/WHATSNEW b/WHATSNEW
    index 25a0464..cddd662 100644
    --- a/WHATSNEW
    +++ b/WHATSNEW
    @@ -27,6 +27,10 @@ Fixed bugs:
      Other changes:
      --------------

    + * <junit> now initializes the cause of the AssertionFailedError when
    + converting from AssertionError.
    + Bugzilla Report 58982
    +
      Changes from Ant 1.9.6 TO Ant 1.9.7
      ===================================


    http://git-wip-us.apache.org/repos/asf/ant/blob/e982f019/contributors.xml
    ----------------------------------------------------------------------
    diff --git a/contributors.xml b/contributors.xml
    index 2bfa1b0..0a079d2 100644
    --- a/contributors.xml
    +++ b/contributors.xml
    @@ -332,6 +332,10 @@
          <last>Armbrust</last>
        </name>
        <name>
    + <first>Dana</first>
    + <last>Dahlstrom</last>
    + </name>
    + <name>
          <first>Daniel</first>
          <last>Henrique</last>
        </name>

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
groupnotifications @
categoriesant
postedMay 22, '16 at 4:39p
activeMay 22, '16 at 4:39p
posts7
users1
websiteant.apache.org

1 user in discussion

Bodewig: 7 posts

People

Translate

site design / logo © 2018 Grokbase