| /******************************************************************************* |
| * Copyright (c) 2006, 2015 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.jdt.junit.tests; |
| |
| import org.eclipse.jdt.junit.JUnitCore; |
| import org.eclipse.jdt.junit.TestRunListener; |
| import org.eclipse.jdt.junit.model.ITestElement.FailureTrace; |
| import org.eclipse.jdt.junit.model.ITestElement.ProgressState; |
| import org.eclipse.jdt.junit.model.ITestElement.Result; |
| import org.eclipse.jdt.testplugin.JavaProjectHelper; |
| |
| import org.eclipse.jdt.core.IClasspathEntry; |
| import org.eclipse.jdt.core.IType; |
| import org.eclipse.jdt.core.JavaCore; |
| |
| import org.eclipse.jdt.internal.junit.JUnitMessages; |
| import org.eclipse.jdt.internal.junit.launcher.TestKindRegistry; |
| |
| public class TestRunListenerTest3 extends AbstractTestRunListenerTest { |
| |
| private String[] runSequenceTest(IType typeToLaunch) throws Exception { |
| TestRunLog log= new TestRunLog(); |
| final TestRunListener testRunListener= new TestRunListeners.SequenceTest(log); |
| JUnitCore.addTestRunListener(testRunListener); |
| try { |
| return launchJUnit(typeToLaunch, log); |
| } finally { |
| JUnitCore.removeTestRunListener(testRunListener); |
| } |
| } |
| |
| private String[] runTreeTest(IType typeToLaunch, int step) throws Exception { |
| TestRunLog log= new TestRunLog(); |
| final TestRunListener testRunListener= new TestRunListeners.TreeTest(log, step); |
| JUnitCore.addTestRunListener(testRunListener); |
| try { |
| return launchJUnit(typeToLaunch, TestKindRegistry.JUNIT3_TEST_KIND_ID, log); |
| } finally { |
| JUnitCore.removeTestRunListener(testRunListener); |
| } |
| } |
| |
| public void testOK() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.TestCase;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public void testSucceed() { }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedSequence= new String[] { |
| "sessionStarted-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.UNDEFINED, 0), |
| "testCaseStarted-" + TestRunListeners.testCaseAsString("testSucceed", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 0), |
| "testCaseFinished-" + TestRunListeners.testCaseAsString("testSucceed", "pack.ATestCase", ProgressState.COMPLETED, Result.OK, null, 0), |
| "sessionFinished-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.COMPLETED, Result.OK, 0) |
| }; |
| String[] actual= runSequenceTest(aTestCase); |
| assertEqualLog(expectedSequence, actual); |
| } |
| |
| public void testFail() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.TestCase;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public void testFail() { fail(); }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedSequence= new String[] { |
| "sessionStarted-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.UNDEFINED, 0), |
| "testCaseStarted-" + TestRunListeners.testCaseAsString("testFail", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 0), |
| "testCaseFinished-" + TestRunListeners.testCaseAsString("testFail", "pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.AssertionFailedError", null, null), 0), |
| "sessionFinished-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.COMPLETED, Result.FAILURE, 0) |
| }; |
| String[] actual= runSequenceTest(aTestCase); |
| assertEqualLog(expectedSequence, actual); |
| } |
| |
| public void testSimpleTest() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.*;\n" + |
| "\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " protected int fValue1;\n" + |
| " protected int fValue2;\n" + |
| "\n" + |
| " public ATestCase(String name) {\n" + |
| " super(name);\n" + |
| " }\n" + |
| " protected void setUp() {\n" + |
| " fValue1= 2;\n" + |
| " fValue2= 3;\n" + |
| " }\n" + |
| " public static Test suite() {\n" + |
| " // ensure ordering:\n" + |
| " TestSuite result= new TestSuite(\"ATestCase\");\n" + |
| " result.addTest(new ATestCase(\"testAdd\"));\n" + |
| " result.addTest(new ATestCase(\"testDivideByZero\"));\n" + |
| " result.addTest(new ATestCase(\"testEquals\"));\n" + |
| " return result;\n" + |
| " }\n" + |
| " public void testAdd() {\n" + |
| " double result= fValue1 + fValue2;\n" + |
| " // forced failure result == 5\n" + |
| " assertTrue(result == 6);\n" + |
| " }\n" + |
| " public void testDivideByZero() {\n" + |
| " int zero= 0;\n" + |
| " int result= 8/zero;\n" + |
| " }\n" + |
| " public void testEquals() {\n" + |
| " assertEquals(12, 12);\n" + |
| " assertEquals(12L, 12L);\n" + |
| " assertEquals(new Long(12), new Long(12));\n" + |
| "\n" + |
| " assertEquals(\"Size\", String.valueOf(12), String.valueOf(13));\n" + |
| " }\n" + |
| " public static void main (String[] args) {\n" + |
| " junit.textui.TestRunner.run(suite());\n" + |
| " }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedSequence= new String[] { |
| "sessionStarted-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.UNDEFINED, 0), |
| "testCaseStarted-" + TestRunListeners.testCaseAsString("testAdd", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 0), |
| "testCaseFinished-" + TestRunListeners.testCaseAsString("testAdd", "pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.AssertionFailedError", null, null), 0), |
| "testCaseStarted-" + TestRunListeners.testCaseAsString("testDivideByZero", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 0), |
| "testCaseFinished-" + TestRunListeners.testCaseAsString("testDivideByZero", "pack.ATestCase", ProgressState.COMPLETED, Result.ERROR, new FailureTrace("java.lang.ArithmeticException", null, null), 0), |
| "testCaseStarted-" + TestRunListeners.testCaseAsString("testEquals", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 0), |
| "testCaseFinished-" + TestRunListeners.testCaseAsString("testEquals", "pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.ComparisonFailure", "12", "13"), 0), |
| "sessionFinished-" + TestRunListeners.sessionAsString("ATestCase", ProgressState.COMPLETED, Result.ERROR, 0) |
| }; |
| String[] actual= runSequenceTest(aTestCase); |
| assertEqualLog(expectedSequence, actual); |
| } |
| |
| |
| public void testTreeOnSessionStarted() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.TestCase;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public void testSucceed() { }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.UNDEFINED, 0), |
| TestRunListeners.suiteAsString("pack.ATestCase", ProgressState.NOT_STARTED, Result.UNDEFINED, null, 1), |
| TestRunListeners.testCaseAsString("testSucceed", "pack.ATestCase", ProgressState.NOT_STARTED, Result.UNDEFINED, null, 2), |
| }; |
| String[] actual= runTreeTest(aTestCase, 1); |
| assertEqualLog(expectedTree, actual); |
| } |
| |
| public void testTreeOnSessionEnded() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.TestCase;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public void testFail() { fail(); }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("ATestCase", ProgressState.COMPLETED, Result.FAILURE, 0), |
| TestRunListeners.suiteAsString("pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, null, 1), |
| TestRunListeners.testCaseAsString("testFail", "pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.AssertionFailedError", null, null), 2), |
| }; |
| String[] actual= runTreeTest(aTestCase, 4); |
| assertEqualLog(expectedTree, actual); |
| } |
| |
| public void testTreeOnSecondTestStarted() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.*;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public static Test suite() {\n" + |
| " // ensure ordering:\n" + |
| " TestSuite result= new TestSuite(\"pack.ATestCase\");\n" + |
| " result.addTest(new ATestCase(\"testSucceed\"));\n" + |
| " result.addTest(new ATestCase(\"testFail\"));\n" + |
| " return result;\n" + |
| " }\n" + |
| " public ATestCase(String name) {\n" + |
| " super(name);\n" + |
| " }\n" + |
| " public void testSucceed() { }\n" + |
| " public void testFail() { fail(); }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.UNDEFINED, 0), |
| TestRunListeners.suiteAsString("pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 1), |
| TestRunListeners.testCaseAsString("testSucceed", "pack.ATestCase", ProgressState.COMPLETED, Result.OK, null, 2), |
| TestRunListeners.testCaseAsString("testFail", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 2), |
| }; |
| String[] actual= runTreeTest(aTestCase, 4); |
| assertEqualLog(expectedTree, actual); |
| } |
| |
| public void testTreeOnSecondTestStarted2() throws Exception { |
| String source= |
| "package pack;\n" + |
| "import junit.framework.*;\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public static Test suite() {\n" + |
| " // ensure ordering:\n" + |
| " TestSuite result= new TestSuite(\"pack.ATestCase\");\n" + |
| " result.addTest(new ATestCase(\"testFail\"));\n" + |
| " result.addTest(new ATestCase(\"testSucceed\"));\n" + |
| " return result;\n" + |
| " }\n" + |
| " public ATestCase(String name) {\n" + |
| " super(name);\n" + |
| " }\n" + |
| " public void testFail() { fail(); }\n" + |
| " public void testSucceed() { }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("ATestCase", ProgressState.RUNNING, Result.FAILURE, 0), |
| TestRunListeners.suiteAsString("pack.ATestCase", ProgressState.RUNNING, Result.FAILURE, null, 1), |
| TestRunListeners.testCaseAsString("testFail", "pack.ATestCase", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.AssertionFailedError", null, null), 2), |
| TestRunListeners.testCaseAsString("testSucceed", "pack.ATestCase", ProgressState.RUNNING, Result.UNDEFINED, null, 2), |
| }; |
| String[] actual= runTreeTest(aTestCase, 4); |
| assertEqualLog(expectedTree, actual); |
| } |
| |
| public void testTreeUnrootedEnded() throws Exception { |
| // regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=153807 |
| String source= |
| "package pack;\n" + |
| "\n" + |
| "import junit.framework.TestCase;\n" + |
| "import junit.framework.TestResult;\n" + |
| "import junit.framework.TestSuite;\n" + |
| "\n" + |
| "public class ATestCase extends TestCase {\n" + |
| " public static class RealTest extends TestCase {\n" + |
| " public RealTest(String name) {\n" + |
| " super(name);\n" + |
| " }\n" + |
| "\n" + |
| " public void myTest1() throws Exception { }\n" + |
| "\n" + |
| " public void myTest2() throws Exception {\n" + |
| " fail();\n" + |
| " }\n" + |
| " }\n" + |
| "\n" + |
| " public void testAllTests() { }\n" + |
| "\n" + |
| " public void run(TestResult result) {\n" + |
| " TestSuite suite = new TestSuite(\"MySuite\");\n" + |
| " suite.addTest(new RealTest(\"myTest1\"));\n" + |
| " suite.addTest(new RealTest(\"myTest2\"));\n" + |
| " suite.run(result);\n" + |
| " }\n" + |
| "}"; |
| IType aTestCase= createType(source, "pack", "ATestCase.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("ATestCase", ProgressState.COMPLETED, Result.FAILURE, 0), |
| TestRunListeners.suiteAsString("pack.ATestCase", ProgressState.NOT_STARTED, Result.UNDEFINED, null, 1), |
| TestRunListeners.testCaseAsString("testAllTests", "pack.ATestCase", ProgressState.NOT_STARTED, Result.UNDEFINED, null, 2), |
| TestRunListeners.suiteAsString(JUnitMessages.TestRunSession_unrootedTests, ProgressState.COMPLETED, Result.FAILURE, null, 1), |
| TestRunListeners.testCaseAsString("myTest1", "pack.ATestCase.RealTest", ProgressState.COMPLETED, Result.OK, null, 2), |
| TestRunListeners.testCaseAsString("myTest2", "pack.ATestCase.RealTest", ProgressState.COMPLETED, Result.FAILURE, new FailureTrace("junit.framework.AssertionFailedError", null, null), 2), |
| }; |
| String[] actual= runTreeTest(aTestCase, 6); |
| assertEqualLog(expectedTree, actual); |
| } |
| |
| public void testTreeJUnit4TestAdapter() throws Exception { |
| // regression test for https://bugs.eclipse.org/bugs/show_bug.cgi?id=397747 |
| IClasspathEntry cpe= JavaCore.newContainerEntry(JUnitCore.JUNIT4_CONTAINER_PATH); |
| JavaProjectHelper.clear(fProject, new IClasspathEntry[] { cpe }); |
| JavaProjectHelper.addRTJar15(fProject); |
| |
| String source= |
| "package test;\n" + |
| "\n" + |
| "import junit.framework.JUnit4TestAdapter;\n" + |
| "import junit.framework.TestCase;\n" + |
| "import junit.framework.TestSuite;\n" + |
| "\n" + |
| "import org.junit.Test;\n" + |
| "import org.junit.runner.RunWith;\n" + |
| "import org.junit.runners.Suite;\n" + |
| "import org.junit.runners.Suite.SuiteClasses;\n" + |
| "\n" + |
| "public class MyTestSuite {\n" + |
| " public static junit.framework.Test suite() {\n" + |
| " TestSuite suite = new TestSuite();\n" + |
| " suite.addTest(new JUnit4TestAdapter(JUnit4TestSuite.class));\n" + |
| " suite.addTestSuite(JUnit3TestCase.class);\n" + |
| " return suite;\n" + |
| " }\n" + |
| " \n" + |
| " @RunWith(Suite.class)\n" + |
| " @SuiteClasses({JUnit4TestCase.class})\n" + |
| " public static class JUnit4TestSuite {}\n" + |
| " \n" + |
| " public static class JUnit4TestCase {\n" + |
| " @Test public void testA() {}\n" + |
| " @Test public void testB() {}\n" + |
| " }\n" + |
| " \n" + |
| " public static class JUnit3TestCase extends TestCase {\n" + |
| " public void testC() {}\n" + |
| " public void testD() {}\n" + |
| " public void testE() {}\n" + |
| " }\n" + |
| "}\n"; |
| IType aTestCase= createType(source, "test", "MyTestSuite.java"); |
| |
| String[] expectedTree= new String[] { |
| TestRunListeners.sessionAsString("MyTestSuite", ProgressState.COMPLETED, Result.OK, 0), |
| TestRunListeners.suiteAsString("junit.framework.TestSuite", ProgressState.COMPLETED, Result.OK, null, 1), |
| |
| TestRunListeners.suiteAsString("test.MyTestSuite.JUnit4TestSuite", ProgressState.COMPLETED, Result.OK, null, 2), |
| TestRunListeners.suiteAsString("test.MyTestSuite.JUnit4TestCase", ProgressState.COMPLETED, Result.OK, null, 3), |
| TestRunListeners.testCaseAsString("testA", "test.MyTestSuite.JUnit4TestCase", ProgressState.COMPLETED, Result.OK, null, 4), |
| TestRunListeners.testCaseAsString("testB", "test.MyTestSuite.JUnit4TestCase", ProgressState.COMPLETED, Result.OK, null, 4), |
| |
| TestRunListeners.suiteAsString("test.MyTestSuite.JUnit3TestCase", ProgressState.COMPLETED, Result.OK, null, 2), |
| TestRunListeners.testCaseAsString("testC", "test.MyTestSuite.JUnit3TestCase", ProgressState.COMPLETED, Result.OK, null, 3), |
| TestRunListeners.testCaseAsString("testD", "test.MyTestSuite.JUnit3TestCase", ProgressState.COMPLETED, Result.OK, null, 3), |
| TestRunListeners.testCaseAsString("testE", "test.MyTestSuite.JUnit3TestCase", ProgressState.COMPLETED, Result.OK, null, 3), |
| }; |
| String[] actual= runTreeTest(aTestCase, 12); |
| assertEqualLog(expectedTree, actual); |
| } |
| } |