Package org.junit.internal.requests

Source Code of org.junit.internal.requests.ClassRequest

package org.junit.internal.requests;

import org.junit.Ignore;
import org.junit.internal.runners.InitializationError;
import org.junit.internal.runners.JUnit38ClassRunner;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.Request;
import org.junit.runner.RunWith;
import org.junit.runner.Runner;
import org.junit.runners.AllTests;

public class ClassRequest extends Request {
  private static my.Debug DEBUG=new my.Debug(my.Debug.JUnitCore);//我加上的

  private static final String CONSTRUCTOR_ERROR_FORMAT= "Custom runner class %s should have a public constructor with signature %s(Class testClass)";
  private final Class<?> fTestClass;
  private boolean fCanUseSuiteMethod;

  public ClassRequest(Class<?> testClass, boolean canUseSuiteMethod) {
    DEBUG.P(this,"ClassRequest(2)");
    DEBUG.P("testClass="+testClass);
    DEBUG.P("canUseSuiteMethod="+canUseSuiteMethod);

    fTestClass= testClass;
    fCanUseSuiteMethod= canUseSuiteMethod;

    DEBUG.P(0,this,"ClassRequest(2)");
  }

  public ClassRequest(Class<?> testClass) {
    this(testClass, true);
  }
 
  @Override
  public Runner getRunner() {
    try {//我加上的
    DEBUG.P(this,"getRunner()");

    return buildRunner(getRunnerClass(fTestClass));

    }finally{//我加上的
    DEBUG.P(0,this,"getRunner()");
    }
  }

  public Runner buildRunner(Class<? extends Runner> runnerClass) {
    try {//我加上的
    DEBUG.P(this,"buildRunner(1)");
    DEBUG.P("runnerClass="+runnerClass);

    try {
      return runnerClass.getConstructor(Class.class).newInstance(new Object[] { fTestClass });
    } catch (NoSuchMethodException e) {
      String simpleName= runnerClass.getSimpleName();
      InitializationError error= new InitializationError(String.format(
          CONSTRUCTOR_ERROR_FORMAT, simpleName, simpleName));
      return Request.errorReport(fTestClass, error).getRunner();
    } catch (Exception e) { //可能存在java.lang.SecurityException
      DEBUG.P("e="+e);
      e.printStackTrace();
      return Request.errorReport(fTestClass, e).getRunner();
    }

    }finally{//我加上的
    DEBUG.P(0,this,"buildRunner(1)");
    }
  }

  Class<? extends Runner> getRunnerClass(final Class<?> testClass) {
    try {//我加上的
    DEBUG.P(this,"getRunnerClass(1)");
    DEBUG.P("testClass="+testClass);

    if (testClass.getAnnotation(Ignore.class) != null)
      return new IgnoredClassRunner(testClass).getClass();
    RunWith annotation= testClass.getAnnotation(RunWith.class);
    if (annotation != null) {
      DEBUG.P("annotation.value()="+annotation.value());
      return annotation.value();
    } else if (hasSuiteMethod() && fCanUseSuiteMethod) {
      return AllTests.class;
    } else if (isPre4Test(testClass)) {
      return JUnit38ClassRunner.class;
    } else {
      return JUnit4ClassRunner.class;
    }

    }finally{//我加上的
    DEBUG.P(0,this,"getRunnerClass(1)");
    }
  }
 
  public boolean hasSuiteMethod() {
    try {//我加上的
    DEBUG.P(this,"hasSuiteMethod()");
    DEBUG.P("fTestClass="+fTestClass);

    try {
      fTestClass.getMethod("suite");
      DEBUG.P("hasSuiteMethod=true");
    } catch (NoSuchMethodException e) {
      DEBUG.P("hasSuiteMethod=false");
      return false;
    }
    return true;

    }finally{//我加上的
    DEBUG.P(0,this,"hasSuiteMethod()");
    }
  }

  boolean isPre4Test(Class<?> testClass) {
    return junit.framework.TestCase.class.isAssignableFrom(testClass);
  }
}
TOP

Related Classes of org.junit.internal.requests.ClassRequest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.