package org.junit.tests.junit3compatibility; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import junit.framework.AssertionFailedError; import junit.framework.JUnit4TestAdapter; import junit.framework.TestListener; import junit.framework.TestResult; import org.junit.Before; import org.junit.Test; import org.junit.runner.Description; import org.junit.runner.RunWith; import org.junit.runner.Runner; import org.junit.runner.notification.RunNotifier; import org.junit.runners.BlockJUnit4ClassRunner; public class InitializationErrorForwardCompatibilityTest { public static class CantInitialize extends Runner { private static final String UNIQUE_ERROR_MESSAGE = "Unique error message"; public CantInitialize(Class<?> klass) throws Exception { throw new Exception(UNIQUE_ERROR_MESSAGE); } @Override public Description getDescription() { return Description.EMPTY; } @Override public void run(RunNotifier notifier) { } } @RunWith(CantInitialize.class) public static class CantInitializeTests { } private JUnit4TestAdapter fAdapter; @Before public void createAdapter() { fAdapter = new JUnit4TestAdapter( CantInitializeTests.class); } @Test public void initializationErrorsShowUpAsWarnings() { assertEquals(1, fAdapter.getTests().size()); } @Test public void initializationErrorsAreThrownAtRuntime() { TestResult result = new TestResult(); fAdapter.run(result); assertEquals(1, result.errorCount()); assertEquals(CantInitialize.UNIQUE_ERROR_MESSAGE, result.errors() .nextElement().exceptionMessage()); } private final class ErrorRememberingListener implements TestListener { private junit.framework.Test fError; public void addError(junit.framework.Test test, Throwable e) { fError = test; } public void addFailure(junit.framework.Test test, AssertionFailedError t) { } public void endTest(junit.framework.Test test) { } public void startTest(junit.framework.Test test) { } public junit.framework.Test getError() { return fError; } } @Test public void generatedErrorTestsMatchUp() { junit.framework.Test shouldFail = fAdapter.getTests().get(0); TestResult result = new TestResult(); ErrorRememberingListener listener = new ErrorRememberingListener(); result.addListener(listener); fAdapter.run(result); assertNotNull(listener.getError()); assertTrue(shouldFail == listener.getError()); } public static class InitializesWithError extends BlockJUnit4ClassRunner { public InitializesWithError(Class<?> klass) throws Exception { super(klass); throw new Exception(); } } }