View Javadoc
1   package org.junit.tests.junit3compatibility;
2   
3   import static org.junit.Assert.assertEquals;
4   import static org.junit.Assert.assertNotNull;
5   import static org.junit.Assert.assertTrue;
6   
7   import junit.framework.AssertionFailedError;
8   import junit.framework.JUnit4TestAdapter;
9   import junit.framework.TestListener;
10  import junit.framework.TestResult;
11  import org.junit.Before;
12  import org.junit.Test;
13  import org.junit.runner.Description;
14  import org.junit.runner.RunWith;
15  import org.junit.runner.Runner;
16  import org.junit.runner.notification.RunNotifier;
17  import org.junit.runners.BlockJUnit4ClassRunner;
18  
19  public class InitializationErrorForwardCompatibilityTest {
20      public static class CantInitialize extends Runner {
21          private static final String UNIQUE_ERROR_MESSAGE = "Unique error message";
22  
23          public CantInitialize(Class<?> klass) throws Exception {
24              throw new Exception(UNIQUE_ERROR_MESSAGE);
25          }
26  
27          @Override
28          public Description getDescription() {
29              return Description.EMPTY;
30          }
31  
32          @Override
33          public void run(RunNotifier notifier) {
34          }
35      }
36  
37      @RunWith(CantInitialize.class)
38      public static class CantInitializeTests {
39      }
40  
41      private JUnit4TestAdapter fAdapter;
42  
43      @Before
44      public void createAdapter() {
45          fAdapter = new JUnit4TestAdapter(
46                  CantInitializeTests.class);
47      }
48  
49      @Test
50      public void initializationErrorsShowUpAsWarnings() {
51          assertEquals(1, fAdapter.getTests().size());
52      }
53  
54      @Test
55      public void initializationErrorsAreThrownAtRuntime() {
56          TestResult result = new TestResult();
57          fAdapter.run(result);
58          assertEquals(1, result.errorCount());
59          assertEquals(CantInitialize.UNIQUE_ERROR_MESSAGE, result.errors()
60                  .nextElement().exceptionMessage());
61      }
62  
63      private final class ErrorRememberingListener implements TestListener {
64          private junit.framework.Test fError;
65  
66          public void addError(junit.framework.Test test, Throwable e) {
67              fError = test;
68          }
69  
70          public void addFailure(junit.framework.Test test,
71                  AssertionFailedError t) {
72          }
73  
74          public void endTest(junit.framework.Test test) {
75          }
76  
77          public void startTest(junit.framework.Test test) {
78          }
79  
80          public junit.framework.Test getError() {
81              return fError;
82          }
83      }
84  
85      @Test
86      public void generatedErrorTestsMatchUp() {
87          junit.framework.Test shouldFail = fAdapter.getTests().get(0);
88          TestResult result = new TestResult();
89          ErrorRememberingListener listener = new ErrorRememberingListener();
90          result.addListener(listener);
91          fAdapter.run(result);
92          assertNotNull(listener.getError());
93          assertTrue(shouldFail == listener.getError());
94      }
95  
96      public static class InitializesWithError extends BlockJUnit4ClassRunner {
97          public InitializesWithError(Class<?> klass) throws Exception {
98              super(klass);
99              throw new Exception();
100         }
101     }
102 }