Skip to content

Commit

Permalink
Redo fix of 1189 in a way that won't break code that subclasses AllDe…
Browse files Browse the repository at this point in the history
…faultPossibilitiesBuilder
  • Loading branch information
kcooney committed Jul 17, 2016
1 parent 77595bd commit 05e3cab
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 7 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,14 @@
public class AllDefaultPossibilitiesBuilder extends RunnerBuilder {
private final boolean canUseSuiteMethod;

public AllDefaultPossibilitiesBuilder() {
canUseSuiteMethod = true;
}

/**
* @deprecated used {@link #AllDefaultPossibilitiesBuilder()}.
*/
@Deprecated
public AllDefaultPossibilitiesBuilder(boolean canUseSuiteMethod) {
this.canUseSuiteMethod = canUseSuiteMethod;
}
Expand Down Expand Up @@ -40,10 +48,7 @@ protected JUnit3Builder junit3Builder() {
}

protected AnnotatedBuilder annotatedBuilder() {
// For compatibility with Request#classes(...) and the Suite runner,
// deeper nesting levels always need to support suite() methods:
RunnerBuilder suiteBuilder = canUseSuiteMethod ? this : new AllDefaultPossibilitiesBuilder(true);
return new AnnotatedBuilder(suiteBuilder);
return new AnnotatedBuilder(this);
}

protected IgnoredBuilder ignoredBuilder() {
Expand All @@ -56,4 +61,4 @@ protected RunnerBuilder suiteMethodBuilder() {
}
return new NullBuilder();
}
}
}
30 changes: 28 additions & 2 deletions src/main/java/org/junit/internal/requests/ClassRequest.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
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 Request {
private final Object runnerLock = new Object();
Expand Down Expand Up @@ -30,10 +32,34 @@ public Runner getRunner() {
if (runner == null) {
synchronized (runnerLock) {
if (runner == null) {
runner = new AllDefaultPossibilitiesBuilder(canUseSuiteMethod).safeRunnerForClass(fTestClass);
runner = new CustomAllDefaultPossibilitiesBuilder().safeRunnerForClass(fTestClass);
}
}
}
return runner;
}
}

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);
}
}
}

0 comments on commit 05e3cab

Please sign in to comment.