• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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.Orderer;
13 import org.junit.runner.manipulation.InvalidOrderingException;
14 import org.junit.runner.manipulation.NoTestsRemainException;
15 import org.junit.runner.manipulation.Orderable;
16 import org.junit.runner.manipulation.Sorter;
17 
18 /**
19  * The JUnit4TestAdapter enables running JUnit-4-style tests using a JUnit-3-style test runner.
20  *
21  * <p> To use it, add the following to a test class:
22  * <pre>
23       public static Test suite() {
24         return new JUnit4TestAdapter(<em>YourJUnit4TestClass</em>.class);
25       }
26 </pre>
27  */
28 public class JUnit4TestAdapter implements Test, Filterable, Orderable, Describable {
29     private final Class<?> fNewTestClass;
30 
31     private final Runner fRunner;
32 
33     private final JUnit4TestAdapterCache fCache;
34 
JUnit4TestAdapter(Class<?> newTestClass)35     public JUnit4TestAdapter(Class<?> newTestClass) {
36         this(newTestClass, JUnit4TestAdapterCache.getDefault());
37     }
38 
JUnit4TestAdapter(final Class<?> newTestClass, JUnit4TestAdapterCache cache)39     public JUnit4TestAdapter(final Class<?> newTestClass, JUnit4TestAdapterCache cache) {
40         fCache = cache;
41         fNewTestClass = newTestClass;
42         fRunner = Request.classWithoutSuiteMethod(newTestClass).getRunner();
43     }
44 
countTestCases()45     public int countTestCases() {
46         return fRunner.testCount();
47     }
48 
run(TestResult result)49     public void run(TestResult result) {
50         fRunner.run(fCache.getNotifier(result, this));
51     }
52 
53     // reflective interface for Eclipse
getTests()54     public List<Test> getTests() {
55         return fCache.asTestList(getDescription());
56     }
57 
58     // reflective interface for Eclipse
getTestClass()59     public Class<?> getTestClass() {
60         return fNewTestClass;
61     }
62 
getDescription()63     public Description getDescription() {
64         Description description = fRunner.getDescription();
65         return removeIgnored(description);
66     }
67 
removeIgnored(Description description)68     private Description removeIgnored(Description description) {
69         if (isIgnored(description)) {
70             return Description.EMPTY;
71         }
72         Description result = description.childlessCopy();
73         for (Description each : description.getChildren()) {
74             Description child = removeIgnored(each);
75             if (!child.isEmpty()) {
76                 result.addChild(child);
77             }
78         }
79         return result;
80     }
81 
isIgnored(Description description)82     private boolean isIgnored(Description description) {
83         return description.getAnnotation(Ignore.class) != null;
84     }
85 
86     @Override
toString()87     public String toString() {
88         return fNewTestClass.getName();
89     }
90 
filter(Filter filter)91     public void filter(Filter filter) throws NoTestsRemainException {
92         filter.apply(fRunner);
93     }
94 
sort(Sorter sorter)95     public void sort(Sorter sorter) {
96         sorter.apply(fRunner);
97     }
98 
99     /**
100      * {@inheritDoc}
101      *
102      * @since 4.13
103      */
order(Orderer orderer)104     public void order(Orderer orderer) throws InvalidOrderingException {
105         orderer.apply(fRunner);
106     }
107 }