This is an automated email from the ASF dual-hosted git repository. jsedding pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-junit-core.git
commit f8efc368d2fb38f3b55d50044d98b5db88b71ea2 Author: Julian Sedding <[email protected]> AuthorDate: Thu Jun 24 17:20:46 2021 +0200 SLING-10546 - RequestParser#acceptTestName is too lenient --- .../java/org/apache/sling/junit/RequestParser.java | 3 +- .../org/apache/sling/junit/RequestParserTest.java | 129 ++++++++++++--------- 2 files changed, 76 insertions(+), 56 deletions(-) diff --git a/src/main/java/org/apache/sling/junit/RequestParser.java b/src/main/java/org/apache/sling/junit/RequestParser.java index f8a0223..f5c71da 100644 --- a/src/main/java/org/apache/sling/junit/RequestParser.java +++ b/src/main/java/org/apache/sling/junit/RequestParser.java @@ -104,7 +104,8 @@ public class RequestParser implements TestSelector { if(testNameSelector.length() == 0) { return true; } else { - return testName.startsWith(testNameSelector); + return testName.equals(testNameSelector) // match test class directly + || testName.startsWith(testNameSelector + '.'); // match tests within named package or below } } diff --git a/src/test/java/org/apache/sling/junit/RequestParserTest.java b/src/test/java/org/apache/sling/junit/RequestParserTest.java index b3c6f2f..91b9c68 100644 --- a/src/test/java/org/apache/sling/junit/RequestParserTest.java +++ b/src/test/java/org/apache/sling/junit/RequestParserTest.java @@ -16,69 +16,88 @@ */ package org.apache.sling.junit; -import java.util.Arrays; -import java.util.Collection; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; -import static org.junit.Assert.assertEquals; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.junit.runners.Parameterized; -import org.junit.runners.Parameterized.Parameters; +import java.util.function.Function; +import java.util.stream.Stream; + +import static org.apache.commons.lang3.StringUtils.EMPTY; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.params.provider.Arguments.arguments; -@RunWith(value=Parameterized.class) public class RequestParserTest { - final String pathInfo; - final String expectedTestSelector; - final String expectedExtension; - final String expectedMethodSelector; - final RequestParser parser; - - public RequestParserTest(String pathInfo, String expectedTestSelector, String expectedExtension, String expectedMethodSelector) { - this.pathInfo = pathInfo; - this.expectedTestSelector = expectedTestSelector; - this.expectedExtension = expectedExtension; - this.expectedMethodSelector = expectedMethodSelector; - parser = new RequestParser(pathInfo); + + @ParameterizedTest + @MethodSource("configs") + void testSelector(String pathInfo, String expectedTestSelector, String expectedExtension, String expectedMethodSelector) { + assertEquals(expectedTestSelector, new RequestParser(pathInfo).getTestSelectorString()); + } + + @ParameterizedTest + @MethodSource("configs") + void testExtension(String pathInfo, String expectedTestSelector, String expectedExtension, String expectedMethodSelector) { + assertEquals(expectedExtension, new RequestParser(pathInfo).getExtension()); + } + + @ParameterizedTest + @MethodSource("configs") + void testMethodName(String pathInfo, String expectedTestSelector, String expectedExtension, String expectedMethodSelector) { + assertEquals(expectedMethodSelector, new RequestParser(pathInfo).getMethodName()); } - @Override - public String toString() { - return getClass().getSimpleName() + ", pathInfo=" + pathInfo; + @ParameterizedTest + @MethodSource("acceptTestNameArguments") + void testAccepTestName(String pathInfo, String testName, boolean isValid) { + final RequestParser parser = new RequestParser(pathInfo); + assertEquals(isValid, parser.acceptTestName(testName), String.format("accept test named \"%s\"", testName)); } - - @Test - public void testSelector() { - assertEquals(toString(), expectedTestSelector, parser.getTestSelectorString()); + @SuppressWarnings("unused") // test arguments + static Stream<Arguments> acceptTestNameArguments() { + return concatStreams( + toArguments("/org.example.FooTest/testBar.html", + array("org.example.FooTest"), + array("org.example.FooTest$1")), + toArguments("/org.example.FooTest.html", + array("org.example.FooTest"), + array("org.example.FooTest$1", "org.example.bar.BarTest")), + toArguments("/org.example.html", + array("org.example.FooTest", "org.example.FooTest$1", "org.example.bar.BarTest"), + array("org.acme.FooTest", "org.examplebar.BarTest"))); } - - @Test - public void testExtension() { - assertEquals(toString(), expectedExtension, parser.getExtension()); + + @SafeVarargs + private static <T> Stream<T> concatStreams(Stream<T>... streams) { + return Stream.of(streams).flatMap(Function.identity()); + } + + private static Stream<Arguments> toArguments(String pathInfo, String[] valid, String[] invalid) { + return Stream.concat( + Stream.of(valid).map(name -> arguments(pathInfo, name, true)), + Stream.of(invalid).map(name -> arguments(pathInfo, name, false))); } - - @Test - public void testMethodName() { - assertEquals(toString(), expectedMethodSelector, parser.getMethodName()); + + @SafeVarargs + static <T> T[] array(T... elements) { + return elements; } - - @Parameters - public static Collection<Object[]> configs() { - final String EMPTY= ""; - final Object[][] data = new Object[][] { - { EMPTY, EMPTY, EMPTY, EMPTY }, - { "/", EMPTY, EMPTY, EMPTY }, - { "/.html", EMPTY, "html", EMPTY }, - { "/someTests.here.html", "someTests.here", "html", EMPTY }, - { "someTests.here.html", "someTests.here", "html", EMPTY }, - { "someTests.here.html.json", "someTests.here.html", "json", EMPTY }, - { "someTests.here.html.json/TEST_METHOD_NAME.txt", "someTests.here.html.json", "txt", "TEST_METHOD_NAME" }, - { ".json/TEST_METHOD_NAME", "", "json/TEST_METHOD_NAME", "" }, - { ".json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME" }, - { "/.json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME" }, - { "/.json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME" }, - { "/.html.json/TEST_METHOD_NAME.txt", ".html.json", "txt", "TEST_METHOD_NAME" }, - }; - - return Arrays.asList(data); + + + @SuppressWarnings("unused") // test arguments + static Stream<Arguments> configs() { + return Stream.of( + arguments(EMPTY, EMPTY, EMPTY, EMPTY), + arguments("/.html", EMPTY, "html", EMPTY), + arguments("/someTests.here.html", "someTests.here", "html", EMPTY), + arguments("someTests.here.html", "someTests.here", "html", EMPTY), + arguments("someTests.here.html.json", "someTests.here.html", "json", EMPTY), + arguments("someTests.here.html.json/TEST_METHOD_NAME.txt", "someTests.here.html.json", "txt", "TEST_METHOD_NAME"), + arguments(".json/TEST_METHOD_NAME", "", "json/TEST_METHOD_NAME", ""), + arguments(".json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME"), + arguments("/.json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME"), + arguments("/.json/TEST_METHOD_NAME.txt", ".json", "txt", "TEST_METHOD_NAME"), + arguments("/.html.json/TEST_METHOD_NAME.txt", ".html.json", "txt", "TEST_METHOD_NAME") + ); } } \ No newline at end of file
