org.junit.internal.requests.ClassRequest Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of junit Show documentation
Show all versions of junit Show documentation
JUnit is a unit testing framework for Java, created by Erich Gamma and Kent Beck.
package org.junit.internal.requests;
import org.junit.internal.builders.AllDefaultPossibilitiesBuilder;
import org.junit.internal.builders.SuiteMethodBuilder;
import org.junit.runner.Runner;
import org.junit.runners.model.RunnerBuilder;
public class ClassRequest extends MemoizingRequest {
/*
* We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses
* reflection to access this field. See
* https://github.com/junit-team/junit4/issues/960
*/
private final Class fTestClass;
private final boolean canUseSuiteMethod;
public ClassRequest(Class testClass, boolean canUseSuiteMethod) {
this.fTestClass = testClass;
this.canUseSuiteMethod = canUseSuiteMethod;
}
public ClassRequest(Class testClass) {
this(testClass, true);
}
@Override
protected Runner createRunner() {
return new CustomAllDefaultPossibilitiesBuilder().safeRunnerForClass(fTestClass);
}
private class CustomAllDefaultPossibilitiesBuilder extends AllDefaultPossibilitiesBuilder {
@Override
protected RunnerBuilder suiteMethodBuilder() {
return new CustomSuiteMethodBuilder();
}
}
/*
* Customization of {@link SuiteMethodBuilder} that prevents use of the
* suite method when creating a runner for fTestClass when canUseSuiteMethod
* is false.
*/
private class CustomSuiteMethodBuilder extends SuiteMethodBuilder {
@Override
public Runner runnerForClass(Class testClass) throws Throwable {
if (testClass == fTestClass && !canUseSuiteMethod) {
return null;
}
return super.runnerForClass(testClass);
}
}
}