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, 28 JUnit4TestAdapterCache cache) { 29 fCache = cache; 30 fNewTestClass = newTestClass; 31 fRunner = Request.classWithoutSuiteMethod(newTestClass).getRunner(); 32 } 33 34 public int countTestCases() { 35 return fRunner.testCount(); 36 } 37 38 public void run(TestResult result) { 39 fRunner.run(fCache.getNotifier(result, this)); 40 } 41 42 // reflective interface for Eclipse 43 public List<Test> getTests() { 44 return fCache.asTestList(getDescription()); 45 } 46 47 // reflective interface for Eclipse 48 public Class<?> getTestClass() { 49 return fNewTestClass; 50 } 51 52 public Description getDescription() { 53 Description description= fRunner.getDescription(); 54 return removeIgnored(description); 55 } 56 57 private Description removeIgnored(Description description) { 58 if (isIgnored(description)) 59 return Description.EMPTY; 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 return result; 67 } 68 69 private boolean isIgnored(Description description) { 70 return description.getAnnotation(Ignore.class) != null; 71 } 72 73 @Override 74 public String toString() { 75 return fNewTestClass.getName(); 76 } 77 78 public void filter(Filter filter) throws NoTestsRemainException { 79 filter.apply(fRunner); 80 } 81 82 public void sort(Sorter sorter) { 83 sorter.apply(fRunner); 84 } 85}