>New Revision: 563053
>
>URL: http://svn.apache.org/viewvc?view=rev&rev=563053
>Log:
>New JUnit formatter: collects failing test cases (testXXX methods) for
a rerun.
>* works from command line
>* its own JUnit test scenario fails (for - to me - unknown reason)


Some ideas why the junit testcase fails and the run from the command
line not?


Jan


>+  <target name="failureRecorder.prepare">
>+    <property name="tmp.dir" value="out"/>
>+    <mkdir dir="${tmp.dir}/org"/>
>+    <echo file="${tmp.dir}/A.java">
>+        import junit.framework.*;
>+        public class A extends TestCase {
>+            public A(String s) { super(s); }
>+            public void test01() { System.out.println("A.test01"); }
>+            public void test02() { System.out.println("A.test02");
fail(); }
>+            public void test03() { System.out.println("A.test03");
fail(); }
>+      }
>+    </echo>
>+    <echo file="${tmp.dir}/B.java">
>+        import junit.framework.*;
>+        public class B extends TestCase {
>+            public B(String s) { super(s); }
>+            public void test04() { System.out.println("B.test04");
fail(); }
>+            public void test05() { System.out.println("B.test05"); }
>+            public void test06() { System.out.println("B.test06"); }
>+        }
>+    </echo>
>+    <echo file="${tmp.dir}/C.java">
>+        import junit.framework.*;
>+        public class C extends TestCase {
>+            public C(String s) { super(s); }
>+            public void test07() { System.out.println("C.test07"); }
>+            public void test08() { System.out.println("C.test08"); }
>+            public void test09() { System.out.println("C.test09"); }
>+        }
>+    </echo>
>+    <echo file="${tmp.dir}/org/D.java">
>+      package org;
>+        import junit.framework.*;
>+        public class D extends TestCase {
>+            public D(String s) { super(s); }
>+            public void test10() { System.out.println("D.test10");
fail(); }
>+        }
>+    </echo>
>+    <javac srcdir="${tmp.dir}" destdir="${tmp.dir}"/>
>+  </target>
>+
>+  <target name="failureRecorder.internal">  
>+    <property name="tmp.dir" value="out"/>
>+    <!-- 
>+    <delete>
>+      <fileset dir="${tmp.dir}" includes="FailedTests*.class"/>
>+    </delete>
>+     -->
>+    <!-- compile the FailedTests class if present --> 
>+    <javac srcdir="${tmp.dir}" destdir="${tmp.dir}"/>
>+    <available file="${tmp.dir}/FailedTests.class"
property="hasFailingTests"/>
>+    <junit haltonerror="false" haltonfailure="false">
>+      <sysproperty key="ant.junit.failureCollector"
value="${tmp.dir}/FailedTests"/>
>+      <classpath>
>+        <pathelement location="${tmp.dir}"/>
>+      </classpath>
>+      <batchtest todir="${tmp.dir}" unless="hasFailingTests">
>+        <fileset dir="${tmp.dir}" includes="**/*.java"
excludes="**/FailedTests.*"/>
>+        <!-- for initial creation of the FailingTests.java -->
>+        <formatter type="failure"/>
>+        <!-- I want to see something ... -->
>+        <formatter type="plain" usefile="false"/>
>+      </batchtest>
>+      <test name="FailedTests" if="hasFailingTests">
>+              <!-- update the FailingTests.java -->
>+        <formatter type="failure"/>
>+        <!-- again, I want to see something -->
>+        <formatter type="plain" usefile="false"/>
>+      </test>
>+    </junit>
>+  </target>
>+  
>+  <target name="failureRecorder.runtest">
>+      <ant target="failureRecorder.internal" antfile="junit.xml"
inheritAll="false"/>
>+  </target>
>+  
>+  <target name="failureRecorder.fixing">
>+    <property name="tmp.dir" value="out"/>
>+    <echo file="${tmp.dir}/A.java">
>+        import junit.framework.*;
>+        public class A extends TestCase {
>+            public A(String s) { super(s); }
>+            public void test01() { System.out.println("A.test01"); }
>+            public void test02() { System.out.println("A.test02"); }
>+            public void test03() { System.out.println("A.test03"); }
>+      }
>+    </echo>
>+  </target>
>+

>+    /* Bugzilla Report 42984 */
>+    //TODO This scenario works from command line, but not from JUnit
...
>+    //     See the _run.bat attachement of the bug.
>+    public void _testFailureRecorder() {
>+        File testDir = new File(getProjectDir(), "out");
>+        File collectorFile = new File(getProjectDir(),
"out/FailedTests.java");
>+
>+        // ensure that there is a clean test environment
>+        assertFalse("Test directory must not exist before the test
preparation.", 
>+                testDir.exists());
>+        assertFalse("The collector file must not exist before the test
preparation.", 
>+                collectorFile.exists());
>+
>+        // prepare the test environment
>+        executeTarget("failureRecorder.prepare");
>+        assertTrue("Test directory was not created.",
testDir.exists());
>+        assertTrue("There should be one class.", (new File(testDir,
"A.class")).exists());
>+        assertFalse("The collector file " +
collectorFile.getAbsolutePath() 
>+                + " should not exist before the 1st run.",
collectorFile.exists());
>+
>+        // 1st junit run: should do all tests - failing and not
failing tests
>+        executeTarget("failureRecorder.runtest");
>+        assertTrue("The collector file " +
collectorFile.getAbsolutePath() 
>+                + " should exist after the 1st run.",
collectorFile.exists());
>+        // the passing test cases
>+        assertOutputContaining("1st run: should run A.test01",
"A.test01");
>+        assertOutputContaining("1st run: should run B.test05",
"B.test05");
>+        assertOutputContaining("1st run: should run B.test06",
"B.test06");
>+        assertOutputContaining("1st run: should run C.test07",
"C.test07");
>+        assertOutputContaining("1st run: should run C.test08",
"C.test08");
>+        assertOutputContaining("1st run: should run C.test09",
"C.test09");
>+        // the failing test cases
>+        assertOutputContaining("1st run: should run A.test02",
"A.test02");
>+        assertOutputContaining("1st run: should run A.test03",
"A.test03");
>+        assertOutputContaining("1st run: should run B.test04",
"B.test04");
>+        assertOutputContaining("1st run: should run D.test10",
"D.test10");
>+
>+        // 2nd junit run: should do only failing tests
>+        executeTarget("failureRecorder.runtest");
>+        assertTrue("The collector file " +
collectorFile.getAbsolutePath() 
>+                + " should exist after the 2nd run.",
collectorFile.exists());
>+        // the passing test cases
>+        assertOutputNotContaining("2nd run: should not run A.test01",
"A.test01");
>+        assertOutputNotContaining("2nd run: should not run A.test05",
"B.test05");
>+        assertOutputNotContaining("2nd run: should not run B.test06",
"B.test06");
>+        assertOutputNotContaining("2nd run: should not run C.test07",
"C.test07");
>+        assertOutputNotContaining("2nd run: should not run C.test08",
"C.test08");
>+        assertOutputNotContaining("2nd run: should not run C.test09",
"C.test09");
>+        // the failing test cases
>+        assertOutputContaining("2nd run: should run A.test02",
"A.test02");
>+        assertOutputContaining("2nd run: should run A.test03",
"A.test03");
>+        assertOutputContaining("2nd run: should run B.test04",
"B.test04");
>+        assertOutputContaining("2nd run: should run D.test10",
"D.test10");
>+        
>+        // "fix" errors in class A
>+        executeTarget("failureRecorder.fixing");
>+        
>+        // 3rd run: four running tests with two errors
>+        executeTarget("failureRecorder.runtest");
>+        assertTrue("The collector file " +
collectorFile.getAbsolutePath() 
>+                + " should exist after the 3rd run.",
collectorFile.exists());
>+        assertOutputContaining("3rd run: should run A.test02",
"A.test02");
>+        assertOutputContaining("3rd run: should run A.test03",
"A.test03");
>+        assertOutputContaining("3rd run: should run B.test04",
"B.test04");
>+        assertOutputContaining("3rd run: should run D.test10",
"D.test10");
>+        
>+        // 4rd run: two running tests with errors
>+        executeTarget("failureRecorder.runtest");
>+        assertTrue("The collector file " +
collectorFile.getAbsolutePath() 
>+                + " should exist after the 4th run.",
collectorFile.exists());
>+        assertOutputNotContaining("4th run: should not run A.test02",
"A.test02");
>+        assertOutputNotContaining("4th run: should not run A.test03",
"A.test03");
>+        assertOutputContaining("4th run: should run B.test04",
"B.test04");
>+        assertOutputContaining("4th run: should run D.test10",
"D.test10");
>+    }

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to