Author: mclarke
Date: Sat Sep 14 09:21:05 2013
New Revision: 1523198
URL: http://svn.apache.org/r1523198
Log:
Allow JUnit task to skip non tests rather than report errors
Added:
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestNotMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/NonTestMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/TestNotMissed.java
ant/core/trunk/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java
Modified:
ant/core/trunk/manual/Tasks/junit.html
ant/core/trunk/src/etc/testcases/taskdefs/optional/junit.xml
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java
Modified: ant/core/trunk/manual/Tasks/junit.html
URL:
http://svn.apache.org/viewvc/ant/core/trunk/manual/Tasks/junit.html?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
--- ant/core/trunk/manual/Tasks/junit.html (original)
+++ ant/core/trunk/manual/Tasks/junit.html Sat Sep 14 09:21:05 2013
@@ -526,6 +526,18 @@ the name of the resulting class (without
<td valign="top">Only run test <a href="../properties.html#if+unless">if
the named property is <b>not</b> set</a>.</td>
<td align="center" valign="top">No</td>
</tr>
+ <tr>
+ <td valign="top">skipNonTests</td>
+ <td valign="top">Do not pass any classes that do not contain JUnit tests
to the test runner.
+ This prevents non tests from appearing as test errors in test
results.<br />
+ Tests are identified by looking for the <code>@Test</code>
annotation on any methods in concrete classes
+ that don't extend <code>junit.framework.TestCase</code>, or for
public/protected methods with
+ names starting with 'test' in concrete classes that extend
<code>junit.framework.TestCase</code>.
+ Classes marked with the JUnit4 <code>org.junit.runner.RunWith</code>
or
+ <code>org.junit.runner.Suite.SuiteClasses</code> annotations are
also passed to JUnit for execution,
+ as is any class with a public/protected no-argument
<code>suite</code> method.</td>
+ <td align="center" valign="top">No. Default is false.</td>
+ </tr>
</table>
<p>Tests can define their own formatters via nested
@@ -604,6 +616,18 @@ supported.</p>
<td valign="top">Only run tests <a href="../properties.html#if+unless">if
the named property is <strong>not</strong> set</a>.</td>
<td align="center" valign="top">No</td>
</tr>
+ <tr>
+ <td valign="top">skipNonTests</td>
+ <td valign="top">Do not pass any classes that do not contain JUnit tests
to the test runner.
+ This prevents non tests from appearing as test
errors in test results.<br />
+ Tests are identified by looking for the
<code>@Test</code> annotation on any methods in concrete classes
+ that don't extend
<code>junit.framework.TestCase</code>, or for public/protected methods with
+ names starting with 'test' in concrete classes that
extend <code>junit.framework.TestCase</code>.
+ Classes marked with the JUnit4
<code>org.junit.runner.RunWith</code> or
+ <code>org.junit.runner.Suite.SuiteClasses</code>
annotations are also passed to JUnit for execution,
+ as is any class with a public/protected no-argument
<code>suite</code> method.</td>
+ <td align="center" valign="top">No. Default is false.</td>
+ </tr>
</table>
<p>Batchtests can define their own formatters via nested
@@ -649,7 +673,7 @@ supported.</p>
<p>to your <code>junit</code> task.</p>
-<h3><a
name="enabletestlistenerevents"><code>ant.junit.enabletestlistenerevents</a>
+<h3><a
name="enabletestlistenerevents"><code>ant.junit.enabletestlistenerevents</code></a>
magic property</h3>
<p><em>Since Ant 1.8.2</em> the <code>enableTestListenerEvents</code>
Modified: ant/core/trunk/src/etc/testcases/taskdefs/optional/junit.xml
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/etc/testcases/taskdefs/optional/junit.xml?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
--- ant/core/trunk/src/etc/testcases/taskdefs/optional/junit.xml (original)
+++ ant/core/trunk/src/etc/testcases/taskdefs/optional/junit.xml Sat Sep 14
09:21:05 2013
@@ -292,6 +292,39 @@
</junit>
</target>
+
+ <!-- Skipping classes that are not tests -->
+ <target name="testNonTests">
+ <mkdir dir="out"/>
+ <junit fork="true">
+ <classpath refid="test"/>
+ <formatter type="xml"/>
+ <classpath refid="test"/>
+ <batchtest todir="out" skipNonTests="true">
+ <fileset dir="../../../../tests/junit">
+ <include name="org/example/junit/*Missed.java"/>
+ <!-- tests remove out-dir on tearDown -->
+ </fileset>
+ </batchtest>
+ </junit>
+ </target>
+
+ <!-- Not skipping classes that are not tests -->
+ <target name="testNonTestsRun">
+ <mkdir dir="out"/>
+ <junit fork="true">
+ <classpath refid="test"/>
+ <formatter type="xml"/>
+ <classpath refid="test"/>
+ <batchtest todir="out" skipNonTests="false">
+ <fileset dir="../../../../tests/junit">
+ <include name="org/example/junit/*Missed.java"/>
+ <!-- tests remove out-dir on tearDown -->
+ </fileset>
+ </batchtest>
+ </junit>
+ </target>
+
<target name="testTestMethods" >
<property name="tmp.dir" value="out"/>
<echo file="${tmp.dir}/T1.java">public class T1 extends
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BaseTest.java
Sat Sep 14 09:21:05 2013
@@ -42,6 +42,7 @@ public abstract class BaseTest {
// CheckStyle:VisibilityModifier ON
private Object ifCond, unlessCond;
+ private boolean skipNonTests;
/**
* Set the filtertrace attribute.
@@ -229,4 +230,12 @@ public abstract class BaseTest {
public void setErrorProperty(String errorProperty) {
this.errorProperty = errorProperty;
}
+
+ public void setSkipNonTests(boolean skipNonTests) {
+ this.skipNonTests = skipNonTests;
+ }
+
+ public boolean isSkipNonTests() {
+ return skipNonTests;
+ }
}
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/BatchTest.java
Sat Sep 14 09:21:05 2013
@@ -191,6 +191,7 @@ public final class BatchTest extends Bas
test.setTodir(this.destDir);
test.setFailureProperty(failureProperty);
test.setErrorProperty(errorProperty);
+ test.setSkipNonTests(isSkipNonTests());
Enumeration list = this.formatters.elements();
while (list.hasMoreElements()) {
test.addFormatter((FormatterElement) list.nextElement());
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/Constants.java
Sat Sep 14 09:21:05 2013
@@ -37,4 +37,5 @@ public class Constants {
static final String TESTSFILE = "testsfile=";
static final String TERMINATED_SUCCESSFULLY = "terminated successfully";
static final String LOG_FAILED_TESTS="logfailedtests=";
+ static final String SKIP_NON_TESTS = "skipNonTests=";
}
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/FormatterElement.java
Sat Sep 14 09:21:05 2013
@@ -20,6 +20,7 @@ package org.apache.tools.ant.taskdefs.op
import java.io.File;
import java.io.FileOutputStream;
+import java.io.IOException;
import java.io.OutputStream;
import java.io.BufferedOutputStream;
import java.lang.reflect.Field;
@@ -310,11 +311,7 @@ public class FormatterElement {
JUnitTaskMirror.JUnitResultFormatterMirror r =
(JUnitTaskMirror.JUnitResultFormatterMirror) o;
if (useFile && outFile != null) {
- try {
- out = new BufferedOutputStream(new FileOutputStream(outFile));
- } catch (java.io.IOException e) {
- throw new BuildException("Unable to open file " + outFile, e);
- }
+ out = new DelayedFileOutputStream(outFile);
}
r.setOutput(out);
@@ -361,4 +358,44 @@ public class FormatterElement {
return new String[] {"plain", "xml", "brief", "failure"};
}
}
+
+ /**
+ * A standard FileOutputStream creates a file as soon as it's opened. This
+ * class delays the creation of the file until the first time a caller
attempts
+ * to write to it so we don't end up with empty files if the listeners
don't use
+ * them.
+ */
+ private static class DelayedFileOutputStream extends OutputStream {
+
+ private BufferedOutputStream outputStream;
+ private final File file;
+
+ public DelayedFileOutputStream(File file) {
+ this.file = file;
+ }
+
+ @Override
+ public void write(int b) throws IOException {
+ synchronized (this) {
+ if (outputStream == null) {
+ outputStream = new BufferedOutputStream(new
FileOutputStream(file));
+ }
+ }
+ outputStream.write(b);
+ }
+
+ @Override
+ public void flush() throws IOException {
+ if (outputStream != null) {
+ outputStream.flush();
+ }
+ }
+
+ @Override
+ public void close() throws IOException {
+ if (outputStream != null) {
+ outputStream.close();
+ }
+ }
+ }
}
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTask.java
Sat Sep 14 09:21:05 2013
@@ -976,6 +976,7 @@ public class JUnitTask extends Task {
cmd.createArgument().setValue(Constants.TESTSFILE + casesFile);
}
+ cmd.createArgument().setValue(Constants.SKIP_NON_TESTS +
String.valueOf(test.isSkipNonTests()));
cmd.createArgument().setValue(Constants.FILTERTRACE +
test.getFiltertrace());
cmd.createArgument().setValue(Constants.HALT_ON_ERROR +
test.getHaltonerror());
cmd.createArgument().setValue(Constants.HALT_ON_FAILURE
Modified:
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
(original)
+++
ant/core/trunk/src/main/org/apache/tools/ant/taskdefs/optional/junit/JUnitTestRunner.java
Sat Sep 14 09:21:05 2013
@@ -30,6 +30,7 @@ import java.io.PrintStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Properties;
@@ -37,6 +38,7 @@ import java.util.StringTokenizer;
import java.util.Vector;
import junit.framework.AssertionFailedError;
import junit.framework.Test;
+import junit.framework.TestCase;
import junit.framework.TestFailure;
import junit.framework.TestListener;
import junit.framework.TestResult;
@@ -71,7 +73,7 @@ public class JUnitTestRunner implements
/**
* Holds the registered formatters.
*/
- private Vector formatters = new Vector();
+ private Vector<JUnitTaskMirror.JUnitResultFormatterMirror> formatters =
new Vector();
/**
* Collects TestResults.
@@ -463,6 +465,13 @@ public class JUnitTestRunner implements
}
junit4 = junit4TestAdapterClass != null;
+ if (junitTest.isSkipNonTests()) {
+ if (!containsTests( testClass, junit4)) {
+ return;
+ }
+ }
+
+
if (junit4) {
// Let's use it!
Class[] formalParams;
@@ -563,6 +572,93 @@ public class JUnitTestRunner implements
}
}
+ private static boolean containsTests(Class<?> testClass, boolean isJUnit4)
{
+ Class testAnnotation = null;
+ Class suiteAnnotation = null;
+ Class runWithAnnotation = null;
+
+ try {
+ testAnnotation = Class.forName("org.junit.Test");
+ } catch (ClassNotFoundException e) {
+ if (isJUnit4) {
+ // odd - we think we're JUnit4 but don't support the test
annotation. We therefore can't have any tests!
+ return false;
+ }
+ // else... we're a JUnit3 test and don't need the annotation
+ }
+
+ try {
+ suiteAnnotation = Class.forName("org.junit.Suite.SuiteClasses");
+ } catch(ClassNotFoundException ex) {
+ // ignore - we don't have this annotation so make sure we don't
check for it
+ }
+ try {
+ runWithAnnotation = Class.forName("org.junit.runner.RunWith");
+ } catch(ClassNotFoundException ex) {
+ // also ignore as this annotation doesn't exist so tests can't use
it
+ }
+
+
+ if (!isJUnit4 && !TestCase.class.isAssignableFrom(testClass)) {
+ //a test we think is JUnit3 but does not extend TestCase. Can't
really be a test.
+ return false;
+ }
+
+ // check if we have any inner classes that contain suitable test
methods
+ for (Class<?> innerClass : testClass.getDeclaredClasses()) {
+ if (containsTests(innerClass, isJUnit4) ||
containsTests(innerClass, !isJUnit4)) {
+ return true;
+ }
+ }
+
+ if (Modifier.isAbstract(testClass.getModifiers()) ||
Modifier.isInterface(testClass.getModifiers())) {
+ // can't instantiate class and no inner classes are tests either
+ return false;
+ }
+
+ if (isJUnit4) {
+ if (suiteAnnotation != null &&
testClass.getAnnotation(suiteAnnotation) != null) {
+ // class is marked as a suite. Let JUnit try and work its
magic on it.
+ return true;
+ }
+ if (runWithAnnotation != null &&
testClass.getAnnotation(runWithAnnotation) != null) {
+ /* Class is marked with @RunWith. If this class is badly
written (no test methods, multiple
+ * constructors, private constructor etc) then the class is
automatically run and fails in the
+ * IDEs I've tried... so I'm happy handing the class to JUnit
to try and run, and let JUnit
+ * report a failure if a bad test case is provided. Trying to
do anything else is likely to
+ * result in us filtering out cases that could be valid for
future versions of JUnit so would
+ * just increase future maintenance work.
+ */
+ return true;
+ }
+ }
+
+ for (Method m : testClass.getMethods()) {
+ if (isJUnit4) {
+ // check if suspected JUnit4 classes have methods with @Test
annotation
+ if (m.getAnnotation(testAnnotation) != null) {
+ return true;
+ }
+ } else {
+ // check if JUnit3 class have public or protected no-args
methods starting with names starting with test
+ if (m.getName().startsWith("test") &&
m.getParameterTypes().length == 0
+ && (Modifier.isProtected(m.getModifiers()) ||
Modifier.isPublic(m.getModifiers()))) {
+ return true;
+ }
+ }
+ // check if JUnit3 or JUnit4 test have a public or protected,
static,
+ // no-args 'suite' method
+ if (m.getName().equals("suite") && m.getParameterTypes().length == 0
+ && (Modifier.isProtected(m.getModifiers()) ||
Modifier.isPublic(m.getModifiers()))
+ && Modifier.isStatic(m.getModifiers())) {
+ return true;
+ }
+ }
+
+ // no test methods found
+ return false;
+ }
+
/**
* Returns what System.exit() would return in the standalone version.
*
@@ -792,6 +888,7 @@ public class JUnitTestRunner implements
boolean outputToFormat = true;
boolean logFailedTests = true;
boolean logTestListenerEvents = false;
+ boolean skipNonTests = false;
if (args.length == 0) {
@@ -845,6 +942,9 @@ public class JUnitTestRunner implements
} else if (args[i].startsWith(Constants.LOG_FAILED_TESTS)) {
logFailedTests = Project.toBoolean(
args[i].substring(Constants.LOG_FAILED_TESTS.length()));
+ } else if (args[i].startsWith(Constants.SKIP_NON_TESTS)) {
+ skipNonTests = Project.toBoolean(
+ args[i].substring(Constants.SKIP_NON_TESTS.length()));
}
}
@@ -884,6 +984,7 @@ public class JUnitTestRunner implements
t.setTodir(new File(st.nextToken()));
t.setOutfile(st.nextToken());
t.setProperties(props);
+ t.setSkipNonTests(skipNonTests);
code = launch(t, testMethodNames, haltError, stackfilter,
haltFail,
showOut, outputToFormat,
logTestListenerEvents);
@@ -911,6 +1012,7 @@ public class JUnitTestRunner implements
} else {
JUnitTest t = new JUnitTest(args[0]);
t.setProperties(props);
+ t.setSkipNonTests(skipNonTests);
returnCode = launch(
t, methods, haltError, stackfilter, haltFail,
showOut, outputToFormat, logTestListenerEvents);
Modified:
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java?rev=1523198&r1=1523197&r2=1523198&view=diff
==============================================================================
---
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java
(original)
+++
ant/core/trunk/src/tests/junit/org/apache/tools/ant/taskdefs/optional/junit/JUnitTaskTest.java
Sat Sep 14 09:21:05 2013
@@ -333,4 +333,29 @@ public class JUnitTaskTest extends Build
executeTarget("testTestMethods");
}
+ public void testNonTestsSkipped() throws Exception {
+ executeTarget("testNonTests");
+ assertFalse("Test result should not exist as test was skipped -
TEST-org.example.junit.NonTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.NonTestMissed.xml").isExists());
+ assertFalse("Test result should not exist as test was skipped -
TEST-org.example.junit.JUnit3NonTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.JUnit3TestMissed.xml").isExists());
+ assertFalse("Test result should not exist as test was skipped -
TEST-org.example.junit.AbstractTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractTestMissed.xml").isExists());
+ assertFalse("Test result should not exist as test was skipped -
TEST-org.example.junit.AbstractJUnit3TestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractJUnit3TestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.AbstractTestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractTestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.AbstractJUnit3TestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractJUnit3TestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.TestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.TestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.JUnit3TestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.JUnit3TestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.TestWithSuiteNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.TestWithSuiteNotMissed.xml").isExists());
+
+ executeTarget("testNonTestsRun");
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.NonTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.NonTestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.JUnit3NonTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.JUnit3NonTestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.TestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.TestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.JUnit3TestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.JUnit3TestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.AbstractTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractTestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.AbstractTestNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractTestNotMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.AbstractJUnit3TestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.AbstractJUnit3TestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.JUnit3NonTestMissed.xml",
getProject().getResource("out/TEST-org.example.junit.JUnit3NonTestMissed.xml").isExists());
+ assertTrue("Test result should exist as test was not skipped -
TEST-org.example.junit.TestWithSuiteNotMissed.xml",
getProject().getResource("out/TEST-org.example.junit.TestWithSuiteNotMissed.xml").isExists());
+
+ }
+
}
Added:
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java?rev=1523198&view=auto
==============================================================================
---
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java
(added)
+++
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,27 @@
+/*
+ * 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.example.junit;
+
+import junit.framework.TestCase;
+
+public abstract class AbstractJUnit3TestMissed extends TestCase {
+
+ public void testNothing() {
+ }
+
+}
Added:
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java?rev=1523198&view=auto
==============================================================================
---
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java
(added)
+++
ant/core/trunk/src/tests/junit/org/example/junit/AbstractJUnit3TestNotMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,31 @@
+/*
+ * 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.example.junit;
+
+import junit.framework.TestCase;
+
+public abstract class AbstractJUnit3TestNotMissed extends TestCase {
+
+ public void testNothing() {
+ }
+
+ public static class InnerAbstractTestNotMissed extends
AbstractJUnit3TestNotMissed {
+
+ }
+
+}
Added: ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestMissed.java
(added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,29 @@
+/*
+ * 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.example.junit;
+
+import org.junit.Test;
+
+
+public abstract class AbstractTestMissed {
+
+ @Test
+ public void testNothing() {
+ }
+
+}
Added:
ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestNotMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestNotMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestNotMissed.java
(added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/AbstractTestNotMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,32 @@
+/*
+ * 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.example.junit;
+
+import org.junit.Test;
+
+public abstract class AbstractTestNotMissed {
+
+ @Test
+ public void testNothing() {
+ }
+
+ public static class InnerAbstractTestNotMissed extends
AbstractTestNotMissed {
+
+ }
+
+}
Added: ant/core/trunk/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java
(added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/JUnit3NonTestMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,27 @@
+/*
+ * 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.example.junit;
+
+import junit.framework.TestCase;
+
+public class JUnit3NonTestMissed extends TestCase {
+
+ public void notATest() {
+ //this isn't a test but shouldn't case an error
+ }
+}
Added: ant/core/trunk/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java
(added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/JUnit3TestNotMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,28 @@
+/*
+ * 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.example.junit;
+
+import junit.framework.TestCase;
+
+public class JUnit3TestNotMissed extends TestCase {
+
+ public void testNothing() {
+ // don't fail
+ }
+
+}
Added: ant/core/trunk/src/tests/junit/org/example/junit/NonTestMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/NonTestMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/NonTestMissed.java (added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/NonTestMissed.java Sat Sep
14 09:21:05 2013
@@ -0,0 +1,25 @@
+/*
+ * 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.example.junit;
+
+public class NonTestMissed {
+
+ public void notATest() {
+ //this isn't a test but shouldn't case an error
+ }
+}
Added: ant/core/trunk/src/tests/junit/org/example/junit/TestNotMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/TestNotMissed.java?rev=1523198&view=auto
==============================================================================
--- ant/core/trunk/src/tests/junit/org/example/junit/TestNotMissed.java (added)
+++ ant/core/trunk/src/tests/junit/org/example/junit/TestNotMissed.java Sat Sep
14 09:21:05 2013
@@ -0,0 +1,29 @@
+/*
+ * 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.example.junit;
+
+
+import org.junit.Test;
+
+public class TestNotMissed {
+
+ @Test
+ public void testNothing() {
+ // don't fail
+ }
+}
Added:
ant/core/trunk/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java
URL:
http://svn.apache.org/viewvc/ant/core/trunk/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java?rev=1523198&view=auto
==============================================================================
---
ant/core/trunk/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java
(added)
+++
ant/core/trunk/src/tests/junit/org/example/junit/TestWithSuiteNotMissed.java
Sat Sep 14 09:21:05 2013
@@ -0,0 +1,32 @@
+/*
+ * 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.example.junit;
+
+import junit.framework.Test;
+import junit.framework.TestSuite;
+
+public class TestWithSuiteNotMissed {
+
+ public static Test suite() {
+ TestSuite test = new TestSuite("meh");
+ JUnit3TestNotMissed testCase = new JUnit3TestNotMissed();
+ testCase.setName("testNothing");
+ test.addTest(testCase);
+ return test;
+ }
+}