package org.junit.tests.junit3compatibility; import static org.junit.Assert.assertEquals; import java.util.Collections; import junit.framework.JUnit4TestAdapter; import junit.framework.TestCase; import junit.framework.TestResult; import junit.framework.TestSuite; import org.junit.Test; import org.junit.runner.JUnitCore; import org.junit.runner.Result; import org.junit.runner.RunWith; import org.junit.runners.Suite; public class JUnit4TestAdapterTest { private static void doTest(Class<?> clazz) { // JUnit 4 runner: Result result = JUnitCore.runClasses(clazz); assertEquals(1, result.getRunCount()); assertEquals(0, result.getFailureCount()); assertEquals(0, result.getIgnoreCount()); // JUnit 3 runner: TestResult testResult = new TestResult(); new JUnit4TestAdapter(clazz).run(testResult); assertEquals(1, testResult.runCount()); assertEquals(0, testResult.failureCount()); assertEquals(Collections.emptyList(), Collections.list(testResult.errors())); } public static class Test4 { @Test public void pass() throws Exception { //pass } } @RunWith(Suite.class) @Suite.SuiteClasses(Test4.class) public static class TestSuiteFor4 { } @Test public void testJUnit4Suite() { doTest(TestSuiteFor4.class); } public static class Test3 extends TestCase { public void testPass() throws Exception { //pass } } @RunWith(Suite.class) @Suite.SuiteClasses(Test3.class) public static class TestSuiteFor3 { } @Test public void testJUnit3Suite() { doTest(TestSuiteFor3.class); } public static class TestSuite3 { public static junit.framework.Test suite() { return new TestSuite(Test3.class); } } @RunWith(Suite.class) @Suite.SuiteClasses(TestSuite3.class) public static class TestSuite4ForTestSuite3 { } @Test public void testJUnit4SuiteThatContainsJUnit3SuiteClass() { doTest(TestSuite4ForTestSuite3.class); } }