Open Source Repository

Home /junit/junit-4.8.2 | Repository Home


junit/framework/JUnit4TestAdapter.java
package junit.framework;

import java.util.List;

import org.junit.Ignore;
import org.junit.runner.Describable;
import org.junit.runner.Description;
import org.junit.runner.Request;
import org.junit.runner.Runner;
import org.junit.runner.manipulation.Filter;
import org.junit.runner.manipulation.Filterable;
import org.junit.runner.manipulation.NoTestsRemainException;
import org.junit.runner.manipulation.Sortable;
import org.junit.runner.manipulation.Sorter;

public class JUnit4TestAdapter implements Test, Filterable, Sortable, Describable {
  private final Class<?> fNewTestClass;

  private final Runner fRunner;

  private final JUnit4TestAdapterCache fCache;

  public JUnit4TestAdapter(Class<?> newTestClass) {
    this(newTestClass, JUnit4TestAdapterCache.getDefault());
  }

  public JUnit4TestAdapter(final Class<?> newTestClass,
      JUnit4TestAdapterCache cache) {
    fCache = cache;
    fNewTestClass = newTestClass;
    fRunner = Request.classWithoutSuiteMethod(newTestClass).getRunner();
  }

  public int countTestCases() {
    return fRunner.testCount();
  }

  public void run(TestResult result) {
    fRunner.run(fCache.getNotifier(result, this));
  }

  // reflective interface for Eclipse
  public List<Test> getTests() {
    return fCache.asTestList(getDescription());
  }

  // reflective interface for Eclipse
  public Class<?> getTestClass() {
    return fNewTestClass;
  }
  
  public Description getDescription() {
    Description description= fRunner.getDescription();    
    return removeIgnored(description);
  }

  private Description removeIgnored(Description description) {
    if (isIgnored(description))
      return Description.EMPTY;
    Description result = description.childlessCopy();
    for (Description each : description.getChildren()) {
      Description child= removeIgnored(each);
      if (! child.isEmpty())
        result.addChild(child);
    }
    return result;
  }

  private boolean isIgnored(Description description) {
    return description.getAnnotation(Ignore.class!= null;
  }

  @Override
  public String toString() {
    return fNewTestClass.getName();
  }

  public void filter(Filter filterthrows NoTestsRemainException {
    filter.apply(fRunner);
  }

  public void sort(Sorter sorter) {
    sorter.apply(fRunner);
  }
}