Skip to content

Commit

Permalink
#40: Re-use JUnit 4's FilterRequest
Browse files Browse the repository at this point in the history
  • Loading branch information
marcphilipp committed Jan 14, 2016
1 parent 0be026a commit 4cb0a31
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 16 deletions.
Expand Up @@ -8,7 +8,7 @@
* http://www.eclipse.org/legal/epl-v10.html * http://www.eclipse.org/legal/epl-v10.html
*/ */


package org.junit.gen5.engine.junit4.execution; package org.junit.gen5.engine.junit4.descriptor;


import org.junit.runner.Request; import org.junit.runner.Request;
import org.junit.runner.Runner; import org.junit.runner.Runner;
Expand Down
Expand Up @@ -14,6 +14,7 @@


import org.junit.gen5.engine.JavaSource; import org.junit.gen5.engine.JavaSource;
import org.junit.gen5.engine.TestDescriptor; import org.junit.gen5.engine.TestDescriptor;
import org.junit.runner.Request;
import org.junit.runner.Runner; import org.junit.runner.Runner;


/** /**
Expand All @@ -30,8 +31,8 @@ public RunnerTestDescriptor(TestDescriptor parent, Class<?> testClass, Runner ru
this.runner = runner; this.runner = runner;
} }


public Runner getRunner() { public Request toRequest() {
return runner; return new RunnerRequest(runner);
} }


} }
Expand Up @@ -37,7 +37,6 @@
import org.junit.runner.Description; import org.junit.runner.Description;
import org.junit.runner.Runner; import org.junit.runner.Runner;
import org.junit.runner.manipulation.Filter; import org.junit.runner.manipulation.Filter;
import org.junit.runner.manipulation.NoTestsRemainException;
import org.junit.runners.model.RunnerBuilder; import org.junit.runners.model.RunnerBuilder;


public class JUnit4TestPlanSpecificationResolver { public class JUnit4TestPlanSpecificationResolver {
Expand Down Expand Up @@ -120,21 +119,21 @@ private String determineTestClassName(String uniqueId, String enginePrefix) {
List<RunnerTestDescriptorAwareFilter> filters = entry.getValue(); List<RunnerTestDescriptorAwareFilter> filters = entry.getValue();
Runner runner = runnerBuilder.safeRunnerForClass(testClass); Runner runner = runnerBuilder.safeRunnerForClass(testClass);
if (runner != null) { if (runner != null) {
try { RunnerTestDescriptor originalDescriptor = createCompleteRunnerTestDescriptor(testClass, runner);
RunnerTestDescriptor runnerTestDescriptor = createCompleteRunnerTestDescriptor(testClass, runner); Filter filter = createOrFilter(filters, originalDescriptor);
filters.stream().forEach(filter -> filter.initialize(runnerTestDescriptor)); Runner filteredRunner = originalDescriptor.toRequest().filterWith(filter).getRunner();
new OrFilter(filters).apply(runner); // TODO Log warning if runner does not implement Filterable
// TODO Log warning if runner does not implement Filterable engineDescriptor.addChild(createCompleteRunnerTestDescriptor(testClass, filteredRunner));
// We need to re-create the RunnerTestDescriptor here to reflect filtering
engineDescriptor.addChild(createCompleteRunnerTestDescriptor(testClass, runner));
}
catch (NoTestsRemainException e) {
// ignore testClass
}
} }
} }
} }


private Filter createOrFilter(List<RunnerTestDescriptorAwareFilter> filters,
RunnerTestDescriptor runnerTestDescriptor) {
filters.stream().forEach(filter -> filter.initialize(runnerTestDescriptor));
return new OrFilter(filters);
}

private RunnerTestDescriptor createCompleteRunnerTestDescriptor(Class<?> testClass, Runner runner) { private RunnerTestDescriptor createCompleteRunnerTestDescriptor(Class<?> testClass, Runner runner) {
RunnerTestDescriptor runnerTestDescriptor = new RunnerTestDescriptor(engineDescriptor, testClass, runner); RunnerTestDescriptor runnerTestDescriptor = new RunnerTestDescriptor(engineDescriptor, testClass, runner);
addChildrenRecursively(runnerTestDescriptor); addChildrenRecursively(runnerTestDescriptor);
Expand Down
Expand Up @@ -30,7 +30,7 @@ public void execute(RunnerTestDescriptor runnerTestDescriptor) {
JUnitCore core = new JUnitCore(); JUnitCore core = new JUnitCore();
core.addListener(new RunListenerAdapter(testRun, engineExecutionListener)); core.addListener(new RunListenerAdapter(testRun, engineExecutionListener));
try { try {
core.run(new RunnerRequest(runnerTestDescriptor.getRunner())); core.run(runnerTestDescriptor.toRequest());
} }
catch (Throwable t) { catch (Throwable t) {
reportUnexpectedFailure(testRun, runnerTestDescriptor, failed(t)); reportUnexpectedFailure(testRun, runnerTestDescriptor, failed(t));
Expand Down

0 comments on commit 4cb0a31

Please sign in to comment.