Skip to content

Commit

Permalink
Fixed matching by simple class name
Browse files Browse the repository at this point in the history
  • Loading branch information
crizzis committed Jun 23, 2022
1 parent cbdb9da commit 8a005e9
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 44 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -130,8 +130,8 @@ boolean matches(TestSelector selector) {

private boolean matchesSelector(Pattern pattern, TestSelector selector) {
return
pattern.matcher(selector.getFullyQualifiedName()).matches()
|| pattern.matcher(selector.getContainerName()).matches();
pattern.matcher(selector.getFullyQualifiedName()).find()
|| pattern.matcher(selector.getContainerName()).find();
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -72,10 +72,10 @@ class Filters {
@ParameterizedTest(name = "by {0} filter")
@CsvSource(value = {
//"test scenario include filter accepted selector rejected selector",
"simple class name, com.example.SomeClass, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"simple class name, SomeClass, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"FQ class name, com.example.SomeClass, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"FQ class and field name, com.example.SomeClass.someField, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"simple class and field name, com.example.SomeClass.someField, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"simple class and field name, SomeClass.someField, com.example.SomeClass#someField, com.example.AnotherClass#someField",
"package name, com.example.*, com.example.SomeClass#someField, com.another.AnotherClass#someField",
"partial wildcard class name, com.example.An*Class, com.example.AnotherClass#someField, com.example.SomeClass#someField",
"wildcard field name, com.example.SomeClass.*, com.example.SomeClass#someField, com.example.AnotherClass#someField",
Expand Down Expand Up @@ -159,7 +159,7 @@ private void mockExcludeFilterInConfigParams(String filter) {
}

private void mockIncludeFilterInArchConfig(String filter) {
ArchConfiguration.get().setProperty(ArchConfiguration.JUNIT_PREFIX + "." + ArchConfiguration.JUNIT_INCLUDE_TESTS_MATCHING, filter);
ArchConfiguration.get().setProperty("junit.includeTestsMatching", filter);
}

private static class TestSelectorConverter implements ArgumentConverter {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,13 +1,7 @@
package com.tngtech.archunit.tooling.engines.jupiter;

import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import java.util.stream.Collectors;
import java.util.stream.Stream;

import com.tngtech.archunit.junit.engine_api.FieldSource;
import com.tngtech.archunit.tooling.ExecutedTestFile.TestResult;
Expand All @@ -28,14 +22,13 @@
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static com.tngtech.archunit.junit.engine_api.FieldSelector.selectField;
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectClass;
import static org.junit.platform.engine.discovery.DiscoverySelectors.selectMethod;

public enum JUnitJupiterEngine implements TestEngine {
INSTANCE;

private static final Logger LOG = LoggerFactory.getLogger(JUnitJupiterEngine.class);
private static final String ARCHUNIT_INCLUDES_PARAMETER_NAME = "archunit.junit.includeTestsMatching";

private final Launcher launcher = LauncherFactory.create();

Expand All @@ -48,42 +41,24 @@ public TestReport execute(TestFile testFiles) {
}

private LauncherDiscoveryRequest toDiscoveryRequest(TestFile testFile) {
List<DiscoverySelector> selectors = toSelectors(testFile)
.collect(Collectors.toList());
LOG.info("Executing request with selectors {}", selectors);
return LauncherDiscoveryRequestBuilder.request()
.selectors(selectors)
.filters()
.build();
}

private Stream<DiscoverySelector> toSelectors(TestFile testFile) {
DiscoverySelector selector = toTestClassSelector(testFile);
LOG.info("Executing request with selectors {}", selector);
LauncherDiscoveryRequestBuilder builder = LauncherDiscoveryRequestBuilder.request()
.selectors(selector);
if (testFile.hasTestCasesFilter()) {
return testFile.getTestCases().stream().map(testCase -> toSelector(testFile.getFixture(), testCase));
String testCaseFilter = toTestCaseFilter(testFile);
builder = builder.configurationParameter(ARCHUNIT_INCLUDES_PARAMETER_NAME, testCaseFilter);
LOG.info("Executing request with test case filter {}", testCaseFilter);
}
return Stream.of(selectClass(testFile.getFixture()));
return builder.build();
}

private DiscoverySelector toSelector(Class<?> fixture, String testCase) {
return getMethodByName(fixture, testCase)
.<DiscoverySelector>map(method -> selectMethod(fixture, method))
.orElseGet(() -> getFieldByName(fixture, testCase)
.<DiscoverySelector>map(field -> selectField(fixture, field.getName()))
.orElseThrow(RuntimeException::new));
private String toTestCaseFilter(TestFile testFile) {
return testFile.getTestCases().stream().map((testFile.getFixture().getSimpleName() + ".")::concat).collect(Collectors.joining(","));
}

private Optional<Method> getMethodByName(Class<?> owner, String name) {
return Arrays.stream(owner.getDeclaredMethods())
.filter(method -> name.equals(method.getName()))
.findFirst();
}

private Optional<Field> getFieldByName(Class<?> owner, String name) {
try {
return Optional.of(owner.getDeclaredField(name));
} catch (NoSuchFieldException e) {
return Optional.empty();
}
private DiscoverySelector toTestClassSelector(TestFile testFile) {
return selectClass(testFile.getFixture());
}

private static class TestExecutionCollector implements TestExecutionListener {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.Map;
import java.util.stream.Stream;

import com.tngtech.archunit.tooling.engines.jupiter.JUnitJupiterEngine;
import com.tngtech.archunit.tooling.examples.ArchJUnit4SuiteTest;
import com.tngtech.archunit.tooling.examples.ArchJUnit4Test;
import com.tngtech.archunit.tooling.examples.ArchJUnit5SuiteTest;
Expand All @@ -11,6 +12,8 @@
import org.junitpioneer.jupiter.cartesian.ArgumentSets;
import org.junitpioneer.jupiter.cartesian.CartesianTest;

import static org.junit.jupiter.api.Assumptions.assumeTrue;

public class ArchUnitToolingTest extends BaseTest {

@CartesianTest
Expand All @@ -21,8 +24,8 @@ void shouldReportCorrectTestResults(TestEngine engine, Class<?> fixture) throws

@CartesianTest
@CartesianTest.MethodFactory("enginesAndFixtures")
@Disabled
void shouldOnlyExecuteSelectedTests(TestEngine engine, Class<?> fixture) throws Exception {
assumeTrue(engine instanceof JUnitJupiterEngine);
super.shouldOnlyExecuteSelectedTests(engine, fixture);
}

Expand Down

0 comments on commit 8a005e9

Please sign in to comment.