diff options
Diffstat (limited to 'src/main/java/org/junit/internal/requests')
4 files changed, 14 insertions, 88 deletions
diff --git a/src/main/java/org/junit/internal/requests/ClassRequest.java b/src/main/java/org/junit/internal/requests/ClassRequest.java index d60e360..3d6b100 100644 --- a/src/main/java/org/junit/internal/requests/ClassRequest.java +++ b/src/main/java/org/junit/internal/requests/ClassRequest.java @@ -1,18 +1,20 @@ package org.junit.internal.requests; import org.junit.internal.builders.AllDefaultPossibilitiesBuilder; -import org.junit.internal.builders.SuiteMethodBuilder; +import org.junit.runner.Request; import org.junit.runner.Runner; -import org.junit.runners.model.RunnerBuilder; -public class ClassRequest extends MemoizingRequest { +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/junit4/issues/960 + * 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; @@ -24,31 +26,14 @@ public class ClassRequest extends MemoizingRequest { } @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; + public Runner getRunner() { + if (runner == null) { + synchronized (runnerLock) { + if (runner == null) { + runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass); + } } - return super.runnerForClass(testClass); } + return runner; } }
\ No newline at end of file diff --git a/src/main/java/org/junit/internal/requests/FilterRequest.java b/src/main/java/org/junit/internal/requests/FilterRequest.java index 5f00399..066cba3 100644 --- a/src/main/java/org/junit/internal/requests/FilterRequest.java +++ b/src/main/java/org/junit/internal/requests/FilterRequest.java @@ -14,7 +14,7 @@ public final class FilterRequest extends Request { /* * 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 + * https://github.com/junit-team/junit/issues/960 */ private final Filter fFilter; diff --git a/src/main/java/org/junit/internal/requests/MemoizingRequest.java b/src/main/java/org/junit/internal/requests/MemoizingRequest.java deleted file mode 100644 index 191c230..0000000 --- a/src/main/java/org/junit/internal/requests/MemoizingRequest.java +++ /dev/null @@ -1,30 +0,0 @@ -package org.junit.internal.requests; - -import java.util.concurrent.locks.Lock; -import java.util.concurrent.locks.ReentrantLock; - -import org.junit.runner.Request; -import org.junit.runner.Runner; - -abstract class MemoizingRequest extends Request { - private final Lock runnerLock = new ReentrantLock(); - private volatile Runner runner; - - @Override - public final Runner getRunner() { - if (runner == null) { - runnerLock.lock(); - try { - if (runner == null) { - runner = createRunner(); - } - } finally { - runnerLock.unlock(); - } - } - return runner; - } - - /** Creates the {@link Runner} to return from {@link #getRunner()}. Called at most once. */ - protected abstract Runner createRunner(); -} diff --git a/src/main/java/org/junit/internal/requests/OrderingRequest.java b/src/main/java/org/junit/internal/requests/OrderingRequest.java deleted file mode 100644 index 441e595..0000000 --- a/src/main/java/org/junit/internal/requests/OrderingRequest.java +++ /dev/null @@ -1,29 +0,0 @@ -package org.junit.internal.requests; - -import org.junit.internal.runners.ErrorReportingRunner; -import org.junit.runner.Request; -import org.junit.runner.Runner; -import org.junit.runner.manipulation.InvalidOrderingException; -import org.junit.runner.manipulation.Ordering; - -/** @since 4.13 */ -public class OrderingRequest extends MemoizingRequest { - private final Request request; - private final Ordering ordering; - - public OrderingRequest(Request request, Ordering ordering) { - this.request = request; - this.ordering = ordering; - } - - @Override - protected Runner createRunner() { - Runner runner = request.getRunner(); - try { - ordering.apply(runner); - } catch (InvalidOrderingException e) { - return new ErrorReportingRunner(ordering.getClass(), e); - } - return runner; - } -} |