git-svn-id: https://svn.apache.org/repos/asf/ant/core/trunk@1523198 13f79535-47bb-0310-9956-ffa450edef68master
| @@ -526,6 +526,18 @@ the name of the resulting class (without suffix). It defaults to <i>java-tmp-dir | |||
| <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> | |||
| @@ -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 | |||
| @@ -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; | |||
| } | |||
| } | |||
| @@ -191,6 +191,7 @@ public final class BatchTest extends BaseTest { | |||
| 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()); | |||
| @@ -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="; | |||
| } | |||
| @@ -20,6 +20,7 @@ package org.apache.tools.ant.taskdefs.optional.junit; | |||
| 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(); | |||
| } | |||
| } | |||
| } | |||
| } | |||
| @@ -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 | |||
| @@ -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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| /** | |||
| * 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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| } | |||
| 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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| } | |||
| } | |||
| 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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| boolean outputToFormat = true; | |||
| boolean logFailedTests = true; | |||
| boolean logTestListenerEvents = false; | |||
| boolean skipNonTests = false; | |||
| if (args.length == 0) { | |||
| @@ -845,6 +942,9 @@ public class JUnitTestRunner implements TestListener, JUnitTaskMirror.JUnitTestR | |||
| } 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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| 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 TestListener, JUnitTaskMirror.JUnitTestR | |||
| } else { | |||
| JUnitTest t = new JUnitTest(args[0]); | |||
| t.setProperties(props); | |||
| t.setSkipNonTests(skipNonTests); | |||
| returnCode = launch( | |||
| t, methods, haltError, stackfilter, haltFail, | |||
| showOut, outputToFormat, logTestListenerEvents); | |||
| @@ -333,4 +333,29 @@ public class JUnitTaskTest extends BuildFileTest { | |||
| 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()); | |||
| } | |||
| } | |||
| @@ -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() { | |||
| } | |||
| } | |||
| @@ -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 { | |||
| } | |||
| } | |||
| @@ -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() { | |||
| } | |||
| } | |||
| @@ -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 { | |||
| } | |||
| } | |||
| @@ -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 | |||
| } | |||
| } | |||
| @@ -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 | |||
| } | |||
| } | |||
| @@ -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 | |||
| } | |||
| } | |||
| @@ -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 | |||
| } | |||
| } | |||
| @@ -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; | |||
| } | |||
| } | |||