You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by js...@apache.org on 2021/06/24 19:50:27 UTC
[sling-org-apache-sling-junit-core] 01/04: SLING-10546 -
RequestParser#acceptTestName is too lenient
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 <js...@apache.org>
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