From 8a005e99abe8ac1c392a689c702d2698b3d784f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Krzysztof=20Sierszen=CC=81?= Date: Thu, 23 Jun 2022 18:50:23 +0200 Subject: [PATCH] Fixed matching by simple class name --- .../ArchUnitPropsTestSourceFilter.java | 4 +- .../ArchUnitPropsTestSourceFilterTest.java | 6 +-- .../engines/jupiter/JUnitJupiterEngine.java | 51 +++++-------------- .../archunit/tooling/ArchUnitToolingTest.java | 5 +- 4 files changed, 22 insertions(+), 44 deletions(-) diff --git a/archunit-junit/junit5/engine/src/main/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilter.java b/archunit-junit/junit5/engine/src/main/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilter.java index 0a7ba0ccfe..fb6067e895 100644 --- a/archunit-junit/junit5/engine/src/main/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilter.java +++ b/archunit-junit/junit5/engine/src/main/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilter.java @@ -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(); } } } diff --git a/archunit-junit/junit5/engine/src/test/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilterTest.java b/archunit-junit/junit5/engine/src/test/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilterTest.java index 6cf92b909d..c9fbe1526c 100644 --- a/archunit-junit/junit5/engine/src/test/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilterTest.java +++ b/archunit-junit/junit5/engine/src/test/java/com/tngtech/archunit/junit/internal/filtering/ArchUnitPropsTestSourceFilterTest.java @@ -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", @@ -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 { diff --git a/archunit-tooling-test/src/main/java/com/tngtech/archunit/tooling/engines/jupiter/JUnitJupiterEngine.java b/archunit-tooling-test/src/main/java/com/tngtech/archunit/tooling/engines/jupiter/JUnitJupiterEngine.java index 6b1565998d..da9196bea9 100644 --- a/archunit-tooling-test/src/main/java/com/tngtech/archunit/tooling/engines/jupiter/JUnitJupiterEngine.java +++ b/archunit-tooling-test/src/main/java/com/tngtech/archunit/tooling/engines/jupiter/JUnitJupiterEngine.java @@ -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; @@ -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(); @@ -48,42 +41,24 @@ public TestReport execute(TestFile testFiles) { } private LauncherDiscoveryRequest toDiscoveryRequest(TestFile testFile) { - List selectors = toSelectors(testFile) - .collect(Collectors.toList()); - LOG.info("Executing request with selectors {}", selectors); - return LauncherDiscoveryRequestBuilder.request() - .selectors(selectors) - .filters() - .build(); - } - - private Stream 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) - .map(method -> selectMethod(fixture, method)) - .orElseGet(() -> getFieldByName(fixture, testCase) - .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 getMethodByName(Class owner, String name) { - return Arrays.stream(owner.getDeclaredMethods()) - .filter(method -> name.equals(method.getName())) - .findFirst(); - } - - private Optional 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 { diff --git a/archunit-tooling-test/src/test/java/com/tngtech/archunit/tooling/ArchUnitToolingTest.java b/archunit-tooling-test/src/test/java/com/tngtech/archunit/tooling/ArchUnitToolingTest.java index a74f9af8a7..134b8b9528 100644 --- a/archunit-tooling-test/src/test/java/com/tngtech/archunit/tooling/ArchUnitToolingTest.java +++ b/archunit-tooling-test/src/test/java/com/tngtech/archunit/tooling/ArchUnitToolingTest.java @@ -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; @@ -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 @@ -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); }