This is an automated email from the ASF dual-hosted git repository.

markt pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tomcat.git


The following commit(s) were added to refs/heads/main by this push:
     new c766eefed9 Refactor long running tests to improve parallelism
c766eefed9 is described below

commit c766eefed99cb7004f29468d1e5546eef2a5eae8
Author: Mark Thomas <ma...@apache.org>
AuthorDate: Mon Dec 4 19:06:26 2023 +0000

    Refactor long running tests to improve parallelism
---
 ...ons.java => DefaultServletOptionsBaseTest.java} | 17 ++++-------
 ...s.java => TestDefaultServletOptionsDELETE.java} | 34 +++-------------------
 ...ions.java => TestDefaultServletOptionsGET.java} | 34 +++-------------------
 ...ons.java => TestDefaultServletOptionsHEAD.java} | 34 +++-------------------
 ...ons.java => TestDefaultServletOptionsPOST.java} | 34 +++-------------------
 ...ions.java => TestDefaultServletOptionsPUT.java} | 34 +++-------------------
 ...ns.java => TestDefaultServletOptionsTRACE.java} | 34 +++-------------------
 ... => TestWebdavServletOptionCollectionCOPY.java} | 32 +++-----------------
 ...> TestWebdavServletOptionCollectionDELETE.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionCollectionGET.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionHEAD.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionLOCK.java} | 32 +++-----------------
 ...=> TestWebdavServletOptionCollectionMKCOL.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionMOVE.java} | 32 +++-----------------
 ... => TestWebdavServletOptionCollectionPOST.java} | 32 +++-----------------
 ...TestWebdavServletOptionCollectionPROPFIND.java} | 32 +++-----------------
 ...estWebdavServletOptionCollectionPROPPATCH.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionCollectionPUT.java} | 32 +++-----------------
 ...=> TestWebdavServletOptionCollectionTRACE.java} | 32 +++-----------------
 ...> TestWebdavServletOptionCollectionUNLOCK.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileCOPY.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsFileDELETE.java} | 32 +++-----------------
 ...e.java => TestWebdavServletOptionsFileGET.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileHEAD.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileLOCK.java} | 32 +++-----------------
 ...java => TestWebdavServletOptionsFileMKCOL.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFileMOVE.java} | 32 +++-----------------
 ....java => TestWebdavServletOptionsFilePOST.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsFilePROPFIND.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsFilePROPPATCH.java} | 32 +++-----------------
 ...e.java => TestWebdavServletOptionsFilePUT.java} | 32 +++-----------------
 ...java => TestWebdavServletOptionsFileTRACE.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsFileUNLOCK.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownCOPY.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsUnknownDELETE.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsUnknownGET.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownHEAD.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownLOCK.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsUnknownMKCOL.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownMOVE.java} | 32 +++-----------------
 ...va => TestWebdavServletOptionsUnknownPOST.java} | 32 +++-----------------
 ...> TestWebdavServletOptionsUnknownPROPFIND.java} | 32 +++-----------------
 ... TestWebdavServletOptionsUnknownPROPPATCH.java} | 32 +++-----------------
 ...ava => TestWebdavServletOptionsUnknownPUT.java} | 32 +++-----------------
 ...a => TestWebdavServletOptionsUnknownTRACE.java} | 32 +++-----------------
 ... => TestWebdavServletOptionsUnknownUNLOCK.java} | 32 +++-----------------
 ... => WebdavServletOptionBaseTestCollection.java} | 19 ++++--------
 ....java => WebdavServletOptionsBaseTestFile.java} | 19 ++++--------
 ...va => WebdavServletOptionsBaseTestUnknown.java} | 19 ++++--------
 49 files changed, 200 insertions(+), 1326 deletions(-)

diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
similarity index 70%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
index b5fe61aaa9..e5a92d97dc 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/DefaultServletOptionsBaseTest.java
@@ -22,17 +22,13 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
+public abstract class DefaultServletOptionsBaseTest extends 
ServletOptionsBaseTest {
 
-@RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+    public static Collection<Object[]> inputs(Class<?> clazz) {
+
+        String method = 
clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() 
- 4);
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
         String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
 
         List<Object[]> result = new ArrayList<>();
 
@@ -40,10 +36,7 @@ public class TestDefaultServletOptions extends 
ServletOptionsBaseTest {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
                     for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
+                        result.add(new Object[] { listingsValue, 
readOnlyValue, traceValue, url, method });
                     }
                 }
             }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
index b5fe61aaa9..43f6e43e63 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsDELETE.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsDELETE extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
index b5fe61aaa9..61e94a5d45 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsGET.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsGET extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
index b5fe61aaa9..33e44c2d1f 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsHEAD.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsHEAD extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
index b5fe61aaa9..59a7c98a11 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPOST.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsPOST extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
similarity index 52%
copy from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
copy to test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
index b5fe61aaa9..71f6412ea3 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsPUT.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsPUT extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java 
b/test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
similarity index 52%
rename from test/org/apache/catalina/servlets/TestDefaultServletOptions.java
rename to test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
index b5fe61aaa9..3a20bed6c2 100644
--- a/test/org/apache/catalina/servlets/TestDefaultServletOptions.java
+++ b/test/org/apache/catalina/servlets/TestDefaultServletOptionsTRACE.java
@@ -16,45 +16,19 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 import org.junit.runners.Parameterized.Parameters;
 
 @RunWith(Parameterized.class)
-public class TestDefaultServletOptions extends ServletOptionsBaseTest {
+public class TestDefaultServletOptionsTRACE extends 
DefaultServletOptionsBaseTest {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] urls = new String[] { COLLECTION_NAME, FILE_NAME, 
UNKNOWN_NAME };
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String url : urls) {
-                        for (String method : methods) {
-                            result.add(new Object[] {
-                                    listingsValue, readOnlyValue, traceValue, 
url, method } );
-                        }
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new DefaultServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
index 7085c7bf7c..15265dafb2 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionCOPY extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
index 7085c7bf7c..eb1a7bd61a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionDELETE extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
index 7085c7bf7c..9df9a0d873 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionGET extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
index 7085c7bf7c..812276879a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionHEAD extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
index 7085c7bf7c..2157d1c891 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionLOCK extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
index 7085c7bf7c..475602a28e 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionMKCOL extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
index 7085c7bf7c..f2e21e76c4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionMOVE extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
index 7085c7bf7c..6f564d1800 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPOST extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
index 7085c7bf7c..e18959c66a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPROPFIND extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
index 7085c7bf7c..56e47315cf 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPROPPATCH extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
index 7085c7bf7c..04abe51e88 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionPUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionPUT extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
index 7085c7bf7c..12b6583659 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionTRACE extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
index 7085c7bf7c..060a625c00 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionCollectionUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionCollectionUNLOCK extends 
WebdavServletOptionBaseTestCollection {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
index 7085c7bf7c..f449aa611c 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileCOPY extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
index 7085c7bf7c..17eada5362 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileDELETE extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
index 7085c7bf7c..047df6aa6a 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileGET extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
index 7085c7bf7c..8b1e150a14 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileHEAD extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
index 7085c7bf7c..3c7d98c740 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileLOCK extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
index 7085c7bf7c..37b76e2075 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileMKCOL extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
index 7085c7bf7c..df4007f655 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileMOVE extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
index 7085c7bf7c..dd664d5cd4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePOST extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
index 7085c7bf7c..3399aa83ad 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePROPFIND extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
index 7085c7bf7c..68e14cfeac 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePROPPATCH extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
index 7085c7bf7c..5b7814c89f 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFilePUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFilePUT extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
index 7085c7bf7c..24a76b6658 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileTRACE extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
index 7085c7bf7c..d94f3faf55 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsFileUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsFileUNLOCK extends 
WebdavServletOptionsBaseTestFile {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
index 7085c7bf7c..633bf55096 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownCOPY.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownCOPY extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
index 7085c7bf7c..dc8cf33162 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownDELETE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownDELETE extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
index 7085c7bf7c..fb0c0faefb 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownGET.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownGET extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
index 7085c7bf7c..3d6b27b0a5 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownHEAD.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownHEAD extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
index 7085c7bf7c..43f4d71682 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownLOCK extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
index 7085c7bf7c..76bb1dc55d 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMKCOL.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownMKCOL extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
index 7085c7bf7c..2aaf94a859 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownMOVE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownMOVE extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
index 7085c7bf7c..8f52705eef 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPOST.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPOST extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
index 7085c7bf7c..71813b350d 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPFIND.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPROPFIND extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
index 7085c7bf7c..a2e294fdb2 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPROPPATCH.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPROPPATCH extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
index 7085c7bf7c..e3948602b4 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownPUT.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownPUT extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
index 7085c7bf7c..ba8e8203f7 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownTRACE.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownTRACE extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
similarity index 56%
copy from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
copy to 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
index 7085c7bf7c..f28bac3fcb 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknownUNLOCK.java
@@ -16,11 +16,8 @@
  */
 package org.apache.catalina.servlets;
 
-import java.util.ArrayList;
+import java.lang.invoke.MethodHandles;
 import java.util.Collection;
-import java.util.List;
-
-import jakarta.servlet.Servlet;
 
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
@@ -31,32 +28,11 @@ import org.junit.runners.Parameterized.Parameters;
  * of an entire test run.
  */
 @RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public class TestWebdavServletOptionsUnknownUNLOCK extends 
WebdavServletOptionsBaseTestUnknown {
 
     @Parameters
     public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
-
-        List<Object[]> result = new ArrayList<>();
-
-        for (Boolean listingsValue : booleans) {
-            for (Boolean readOnlyValue : booleans) {
-                for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
-                }
-            }
-
-        }
-        return result;
-    }
-
-
-    @Override
-    protected Servlet createServlet() {
-        return new WebdavServlet();
+        // Use the name of this class to derive the HTTP method to test
+        return 
DefaultServletOptionsBaseTest.inputs(MethodHandles.lookup().lookupClass());
     }
 }
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java 
b/test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
similarity index 67%
rename from test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
rename to 
test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
index 7085c7bf7c..7614dc02c9 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsFile.java
+++ 
b/test/org/apache/catalina/servlets/WebdavServletOptionBaseTestCollection.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionsFile extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionBaseTestCollection extends 
ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
+        String method = 
clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() 
- 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
FILE_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, 
traceValue, COLLECTION_NAME, method });
                 }
             }
 
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java 
b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
similarity index 67%
rename from 
test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java
rename to 
test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
index f5ca12c698..746c8e4d5b 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionsUnknown.java
+++ b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestFile.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionsUnknown extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionsBaseTestFile extends 
ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
+        String method = 
clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() 
- 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
UNKNOWN_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, 
traceValue, FILE_NAME, method });
                 }
             }
 
diff --git 
a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java 
b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
similarity index 67%
rename from 
test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java
rename to 
test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
index c57408caca..23e6fe1e9e 100644
--- a/test/org/apache/catalina/servlets/TestWebdavServletOptionCollection.java
+++ b/test/org/apache/catalina/servlets/WebdavServletOptionsBaseTestUnknown.java
@@ -22,31 +22,22 @@ import java.util.List;
 
 import jakarta.servlet.Servlet;
 
-import org.junit.runner.RunWith;
-import org.junit.runners.Parameterized;
-import org.junit.runners.Parameterized.Parameters;
-
 /*
  * Split into multiple tests as a single test takes so long it impacts the time
  * of an entire test run.
  */
-@RunWith(Parameterized.class)
-public class TestWebdavServletOptionCollection extends ServletOptionsBaseTest {
+public abstract class WebdavServletOptionsBaseTestUnknown extends 
ServletOptionsBaseTest {
+
+    public static Collection<Object[]> inputs(Class<?> clazz) {
 
-    @Parameters
-    public static Collection<Object[]> inputs() {
-        String[] methods = new String[] { "GET", "POST", "HEAD", "TRACE", 
"PUT", "DELETE",
-                "MKCOL", "LOCK", "UNLOCK", "COPY", "MOVE", "PROPFIND", 
"PROPPATCH" };
+        String method = 
clazz.getSimpleName().substring(clazz.getSuperclass().getSimpleName().length() 
- 4);
 
         List<Object[]> result = new ArrayList<>();
 
         for (Boolean listingsValue : booleans) {
             for (Boolean readOnlyValue : booleans) {
                 for (Boolean traceValue : booleans) {
-                    for (String method : methods) {
-                        result.add(new Object[] {
-                                listingsValue, readOnlyValue, traceValue, 
COLLECTION_NAME, method } );
-                    }
+                    result.add(new Object[] { listingsValue, readOnlyValue, 
traceValue, UNKNOWN_NAME, method });
                 }
             }
 


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to