View Javadoc
1   package junit.framework;
2   
3   import java.util.List;
4   
5   import org.junit.Ignore;
6   import org.junit.runner.Describable;
7   import org.junit.runner.Description;
8   import org.junit.runner.Request;
9   import org.junit.runner.Runner;
10  import org.junit.runner.manipulation.Filter;
11  import org.junit.runner.manipulation.Filterable;
12  import org.junit.runner.manipulation.NoTestsRemainException;
13  import org.junit.runner.manipulation.Sortable;
14  import org.junit.runner.manipulation.Sorter;
15  
16  public class JUnit4TestAdapter implements Test, Filterable, Sortable, Describable {
17      private final Class<?> fNewTestClass;
18  
19      private final Runner fRunner;
20  
21      private final JUnit4TestAdapterCache fCache;
22  
23      public JUnit4TestAdapter(Class<?> newTestClass) {
24          this(newTestClass, JUnit4TestAdapterCache.getDefault());
25      }
26  
27      public JUnit4TestAdapter(final Class<?> newTestClass, JUnit4TestAdapterCache cache) {
28          fCache = cache;
29          fNewTestClass = newTestClass;
30          fRunner = Request.classWithoutSuiteMethod(newTestClass).getRunner();
31      }
32  
33      public int countTestCases() {
34          return fRunner.testCount();
35      }
36  
37      public void run(TestResult result) {
38          fRunner.run(fCache.getNotifier(result, this));
39      }
40  
41      // reflective interface for Eclipse
42      public List<Test> getTests() {
43          return fCache.asTestList(getDescription());
44      }
45  
46      // reflective interface for Eclipse
47      public Class<?> getTestClass() {
48          return fNewTestClass;
49      }
50  
51      public Description getDescription() {
52          Description description = fRunner.getDescription();
53          return removeIgnored(description);
54      }
55  
56      private Description removeIgnored(Description description) {
57          if (isIgnored(description)) {
58              return Description.EMPTY;
59          }
60          Description result = description.childlessCopy();
61          for (Description each : description.getChildren()) {
62              Description child = removeIgnored(each);
63              if (!child.isEmpty()) {
64                  result.addChild(child);
65              }
66          }
67          return result;
68      }
69  
70      private boolean isIgnored(Description description) {
71          return description.getAnnotation(Ignore.class) != null;
72      }
73  
74      @Override
75      public String toString() {
76          return fNewTestClass.getName();
77      }
78  
79      public void filter(Filter filter) throws NoTestsRemainException {
80          filter.apply(fRunner);
81      }
82  
83      public void sort(Sorter sorter) {
84          sorter.apply(fRunner);
85      }
86  }