| package org.junit.tests.junit3compatibility; |
| |
| import static org.junit.Assert.assertEquals; |
| import static org.junit.Assert.assertNull; |
| import static org.junit.Assert.assertNotNull; |
| |
| import java.lang.annotation.ElementType; |
| import java.lang.annotation.Retention; |
| import java.lang.annotation.RetentionPolicy; |
| import java.lang.annotation.Target; |
| import junit.extensions.TestDecorator; |
| import junit.framework.JUnit4TestAdapter; |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| import org.junit.Assert; |
| import org.junit.Test; |
| import org.junit.internal.runners.JUnit38ClassRunner; |
| import org.junit.runner.Description; |
| import org.junit.runner.JUnitCore; |
| import org.junit.runner.Result; |
| import org.junit.runner.notification.Failure; |
| import org.junit.runner.notification.RunListener; |
| import org.junit.runner.manipulation.Filter; |
| import org.junit.runner.manipulation.NoTestsRemainException; |
| |
| public class JUnit38ClassRunnerTest { |
| public static class MyTest extends TestCase { |
| public void testA() { |
| |
| } |
| } |
| |
| @Test |
| public void plansDecoratorCorrectly() { |
| JUnit38ClassRunner runner = new JUnit38ClassRunner(new TestDecorator(new TestSuite(MyTest.class))); |
| assertEquals(1, runner.testCount()); |
| } |
| |
| public static class AnnotatedTest { |
| @Test |
| public void foo() { |
| Assert.fail(); |
| } |
| } |
| |
| @Test |
| public void canUnadaptAnAdapter() { |
| JUnit38ClassRunner runner = new JUnit38ClassRunner(new JUnit4TestAdapter(AnnotatedTest.class)); |
| Result result = new JUnitCore().run(runner); |
| Failure failure = result.getFailures().get(0); |
| assertEquals(Description.createTestDescription(AnnotatedTest.class, "foo"), failure.getDescription()); |
| } |
| |
| static int count; |
| |
| public static class OneTest extends TestCase { |
| public void testOne() { |
| } |
| } |
| |
| @Test |
| public void testListener() throws Exception { |
| JUnitCore runner = new JUnitCore(); |
| RunListener listener = new RunListener() { |
| @Override |
| public void testStarted(Description description) { |
| assertEquals(Description.createTestDescription(OneTest.class, "testOne"), |
| description); |
| count++; |
| } |
| }; |
| |
| runner.addListener(listener); |
| count = 0; |
| Result result = runner.run(OneTest.class); |
| assertEquals(1, count); |
| assertEquals(1, result.getRunCount()); |
| } |
| |
| public static class ClassWithInvalidMethod extends TestCase { |
| @SuppressWarnings("unused") |
| private void testInvalid() { |
| } |
| } |
| |
| @Test |
| public void invalidTestMethodReportedCorrectly() { |
| Result result = JUnitCore.runClasses(ClassWithInvalidMethod.class); |
| Failure failure = result.getFailures().get(0); |
| assertEquals("warning", failure.getDescription().getMethodName()); |
| assertEquals("junit.framework.TestSuite$1", failure.getDescription().getClassName()); |
| } |
| |
| @Retention(RetentionPolicy.RUNTIME) |
| @Target(ElementType.METHOD) |
| public static @interface MyAnnotation { |
| } |
| |
| public static class JUnit3ClassWithAnnotatedMethod extends TestCase { |
| @MyAnnotation |
| public void testAnnotated() { |
| } |
| |
| public void testNotAnnotated() { |
| } |
| } |
| |
| public static class DerivedAnnotatedMethod extends JUnit3ClassWithAnnotatedMethod { |
| } |
| |
| @Test |
| public void getDescriptionWithAnnotation() { |
| JUnit38ClassRunner runner = new JUnit38ClassRunner(JUnit3ClassWithAnnotatedMethod.class); |
| assertAnnotationFiltering(runner); |
| } |
| |
| @Test |
| public void getDescriptionWithAnnotationInSuper() { |
| JUnit38ClassRunner runner = new JUnit38ClassRunner(DerivedAnnotatedMethod.class); |
| assertAnnotationFiltering(runner); |
| } |
| |
| private void assertAnnotationFiltering(JUnit38ClassRunner runner) { |
| Description d = runner.getDescription(); |
| assertEquals(2, d.testCount()); |
| for (Description methodDesc : d.getChildren()) { |
| if (methodDesc.getMethodName().equals("testAnnotated")) { |
| assertNotNull(methodDesc.getAnnotation(MyAnnotation.class)); |
| } else { |
| assertNull(methodDesc.getAnnotation(MyAnnotation.class)); |
| } |
| } |
| } |
| |
| public static class RejectAllTestsFilter extends Filter { |
| @Override |
| public boolean shouldRun(Description description) { |
| return description.isSuite(); |
| } |
| |
| @Override |
| public String describe() { |
| return "filter all"; |
| } |
| } |
| |
| /** |
| * Test that NoTestsRemainException is thrown when all methods have been filtered. |
| */ |
| @Test(expected = NoTestsRemainException.class) |
| public void filterNoTestsRemain() throws NoTestsRemainException { |
| JUnit38ClassRunner runner = new JUnit38ClassRunner(OneTest.class); |
| runner.filter(new RejectAllTestsFilter()); |
| } |
| } |