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