View Javadoc
1   package junit.framework;
2   
3   import java.util.ArrayList;
4   import java.util.Arrays;
5   import java.util.HashMap;
6   import java.util.List;
7   
8   import org.junit.runner.Description;
9   import org.junit.runner.notification.Failure;
10  import org.junit.runner.notification.RunListener;
11  import org.junit.runner.notification.RunNotifier;
12  
13  public class JUnit4TestAdapterCache extends HashMap<Description, Test> {
14      private static final long serialVersionUID = 1L;
15      private static final JUnit4TestAdapterCache fInstance = new JUnit4TestAdapterCache();
16  
17      public static JUnit4TestAdapterCache getDefault() {
18          return fInstance;
19      }
20  
21      public Test asTest(Description description) {
22          if (description.isSuite()) {
23              return createTest(description);
24          } else {
25              if (!containsKey(description)) {
26                  put(description, createTest(description));
27              }
28              return get(description);
29          }
30      }
31  
32      Test createTest(Description description) {
33          if (description.isTest()) {
34              return new JUnit4TestCaseFacade(description);
35          } else {
36              TestSuite suite = new TestSuite(description.getDisplayName());
37              for (Description child : description.getChildren()) {
38                  suite.addTest(asTest(child));
39              }
40              return suite;
41          }
42      }
43  
44      public RunNotifier getNotifier(final TestResult result, final JUnit4TestAdapter adapter) {
45          RunNotifier notifier = new RunNotifier();
46          notifier.addListener(new RunListener() {
47              @Override
48              public void testFailure(Failure failure) throws Exception {
49                  result.addError(asTest(failure.getDescription()), failure.getException());
50              }
51  
52              @Override
53              public void testFinished(Description description) throws Exception {
54                  result.endTest(asTest(description));
55              }
56  
57              @Override
58              public void testStarted(Description description) throws Exception {
59                  result.startTest(asTest(description));
60              }
61          });
62          return notifier;
63      }
64  
65      public List<Test> asTestList(Description description) {
66          if (description.isTest()) {
67              return Arrays.asList(asTest(description));
68          } else {
69              List<Test> returnThis = new ArrayList<Test>();
70              for (Description child : description.getChildren()) {
71                  returnThis.add(asTest(child));
72              }
73              return returnThis;
74          }
75      }
76  
77  }