| package org.junit.internal.requests; |
| |
| import org.junit.internal.builders.AllDefaultPossibilitiesBuilder; |
| import org.junit.runner.Request; |
| import org.junit.runner.Runner; |
| |
| public class ClassRequest extends Request { |
| private final Object runnerLock = new Object(); |
| |
| /* |
| * We have to use the f prefix, because IntelliJ's JUnit4IdeaTestRunner uses |
| * reflection to access this field. See |
| * https://github.com/junit-team/junit/issues/960 |
| */ |
| private final Class<?> fTestClass; |
| private final boolean canUseSuiteMethod; |
| private volatile Runner runner; |
| |
| public ClassRequest(Class<?> testClass, boolean canUseSuiteMethod) { |
| this.fTestClass = testClass; |
| this.canUseSuiteMethod = canUseSuiteMethod; |
| } |
| |
| public ClassRequest(Class<?> testClass) { |
| this(testClass, true); |
| } |
| |
| @Override |
| public Runner getRunner() { |
| if (runner == null) { |
| synchronized (runnerLock) { |
| if (runner == null) { |
| runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass); |
| } |
| } |
| } |
| return runner; |
| } |
| } |