1package junit.framework; 2 3import java.util.List; 4 5import org.junit.Ignore; 6import org.junit.runner.Describable; 7import org.junit.runner.Description; 8import org.junit.runner.Request; 9import org.junit.runner.Runner; 10import org.junit.runner.manipulation.Filter; 11import org.junit.runner.manipulation.Filterable; 12import org.junit.runner.manipulation.NoTestsRemainException; 13import org.junit.runner.manipulation.Sortable; 14import org.junit.runner.manipulation.Sorter; 15 16public 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}