Skip to content

Commit

Permalink
Re-use composite ClassFilter in JUnit 5 Engine to resolve TODO
Browse files Browse the repository at this point in the history
------------------------------------------------------------------------
On behalf of the community, the JUnit Lambda Team thanks
Klarna AB (http://www.klarna.com) for supporting
the JUnit crowdfunding campaign!
------------------------------------------------------------------------
  • Loading branch information
marcphilipp committed Jan 8, 2016
1 parent 1213ccf commit 94e9f20
Show file tree
Hide file tree
Showing 4 changed files with 20 additions and 25 deletions.
Expand Up @@ -18,7 +18,6 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Optional;
Expand Down Expand Up @@ -165,8 +164,18 @@ public void filterWith(EngineFilter filter) {
this.engineFilters.add(filter);
}

public List<EngineFilter> getEngineFilters() {
return Collections.unmodifiableList(engineFilters);
public ClassFilter getClassFilter() {
return ClassFilters.allOf(getEngineFilters(ClassFilter.class));
}

public <T extends EngineFilter> List<T> getEngineFilters(Class<T> filterClass) {
// @formatter:off
return engineFilters
.stream()
.filter(filterClass::isInstance)
.map(filterClass::cast)
.collect(toList());
// @formatter:on
}

public boolean acceptDescriptor(TestDescriptor testDescriptor) {
Expand Down
Expand Up @@ -22,6 +22,7 @@

import org.junit.gen5.api.Test;
import org.junit.gen5.console.options.CommandLineOptions;
import org.junit.gen5.engine.ClassFilter;
import org.junit.gen5.engine.TestDescriptor;
import org.junit.gen5.engine.TestPlanSpecification;
import org.junit.gen5.engine.TestPlanSpecificationElementVisitor;
Expand Down Expand Up @@ -92,8 +93,8 @@ public void convertsClassnameFilterOption() {

TestPlanSpecification specification = convert();

assertThat(specification.getEngineFilters()).hasSize(1);
assertThat(specification.getEngineFilters().get(0).getDescription()).contains(".*Test");
assertThat(specification.getEngineFilters(ClassFilter.class)).hasSize(1);
assertThat(specification.getClassFilter().getDescription()).contains(".*Test");
}

@Test
Expand Down
Expand Up @@ -22,7 +22,6 @@
import java.util.function.IntFunction;

import org.junit.gen5.engine.ClassFilter;
import org.junit.gen5.engine.ClassFilters;
import org.junit.gen5.engine.EngineDescriptor;
import org.junit.gen5.engine.TestPlanSpecification;
import org.junit.gen5.engine.TestPlanSpecificationElementVisitor;
Expand All @@ -41,7 +40,7 @@ public JUnit4TestPlanSpecificationResolver(EngineDescriptor engineDescriptor) {
}

public void resolve(TestPlanSpecification specification) {
ClassFilter classFilter = buildClassFilter(specification);
ClassFilter classFilter = specification.getClassFilter();
RunnerBuilder runnerBuilder = new DefensiveAllDefaultPossibilitiesBuilder();
specification.accept(new TestPlanSpecificationElementVisitor() {

Expand Down Expand Up @@ -70,16 +69,6 @@ public void visitPackage(String packageName) {
});
}

private ClassFilter buildClassFilter(TestPlanSpecification specification) {
// @formatter:off
return ClassFilters.allOf(specification.getEngineFilters()
.stream()
.filter(ClassFilter.class::isInstance)
.map(ClassFilter.class::cast)
.collect(toList()));
// @formatter:on
}

private RunnerTestDescriptor createCompleteRunnerTestDescriptor(Class<?> testClass, Runner runner) {
RunnerTestDescriptor runnerTestDescriptor = new RunnerTestDescriptor(engineDescriptor, testClass, runner);
addChildrenRecursively(runnerTestDescriptor);
Expand Down
Expand Up @@ -10,11 +10,8 @@

package org.junit.gen5.engine.junit5;

import java.util.List;

import org.junit.gen5.commons.util.Preconditions;
import org.junit.gen5.engine.ClassFilter;
import org.junit.gen5.engine.EngineFilter;
import org.junit.gen5.engine.ExecutionRequest;
import org.junit.gen5.engine.HierarchicalTestEngine;
import org.junit.gen5.engine.TestDescriptor;
Expand Down Expand Up @@ -48,15 +45,14 @@ private void resolveSpecification(TestPlanSpecification specification, JUnit5Eng
for (TestPlanSpecificationElement element : specification) {
resolver.resolveElement(element);
}
applyEngineFilters(specification.getEngineFilters(), engineDescriptor);
applyEngineFilters(specification, engineDescriptor);
}

private void applyEngineFilters(List<EngineFilter> engineFilters, JUnit5EngineDescriptor engineDescriptor) {
// TODO Currently only works with a single ClassFilter
if (engineFilters.isEmpty()) {
private void applyEngineFilters(TestPlanSpecification specification, JUnit5EngineDescriptor engineDescriptor) {
if (specification.getEngineFilters(ClassFilter.class).isEmpty()) {
return;
}
ClassFilter filter = (ClassFilter) engineFilters.get(0);
ClassFilter filter = specification.getClassFilter();
TestDescriptor.Visitor filteringVisitor = (descriptor, remove) -> {
if (descriptor.getClass() == ClassTestDescriptor.class) {
ClassTestDescriptor classTestDescriptor = (ClassTestDescriptor) descriptor;
Expand Down

0 comments on commit 94e9f20

Please sign in to comment.