Open Source Repository

Home /junit/junit-4.10 | Repository Home


org/junit/internal/runners/ClassRoadie.java
package org.junit.internal.runners;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;

import org.junit.runner.Description;
import org.junit.runner.notification.Failure;
import org.junit.runner.notification.RunNotifier;
import org.junit.runners.BlockJUnit4ClassRunner;

/**
 @deprecated Included for backwards compatibility with JUnit 4.4. Will be
 *             removed in the next release. Please use
 *             {@link BlockJUnit4ClassRunner} in place of {@link JUnit4ClassRunner}.
 */
@Deprecated
public
class ClassRoadie {
  private RunNotifier fNotifier;
  private TestClass fTestClass;
  private Description fDescription;
  private final Runnable fRunnable;
  
  public ClassRoadie(RunNotifier notifier, TestClass testClass,
      Description description, Runnable runnable) {
    fNotifier= notifier;
    fTestClass= testClass;
    fDescription= description;
    fRunnable= runnable;
  }

  protected void runUnprotected() {
    fRunnable.run();
  };

  protected void addFailure(Throwable targetException) {
    fNotifier.fireTestFailure(new Failure(fDescription, targetException));
  }

  public void runProtected() {
    try {
      runBefores();
      runUnprotected();
    catch (FailedBefore e) {
    finally {
      runAfters();
    }
  }

  private void runBefores() throws FailedBefore {
    try {
      try {
        List<Method> befores= fTestClass.getBefores();
        for (Method before : befores)
          before.invoke(null);
      catch (InvocationTargetException e) {
        throw e.getTargetException();
      }
    catch (org.junit.internal.AssumptionViolatedException e) {
      throw new FailedBefore();
    catch (Throwable e) {
      addFailure(e);
      throw new FailedBefore();
    }
  }

  private void runAfters() {
    List<Method> afters= fTestClass.getAfters();
    for (Method after : afters)
      try {
        after.invoke(null);
      catch (InvocationTargetException e) {
        addFailure(e.getTargetException());
      catch (Throwable e) {
        addFailure(e)// Untested, but seems impossible
      }
  }
}