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 }