From 3b84427cab23a5db887c4f80e73b2161d3639bb1 Mon Sep 17 00:00:00 2001 From: Krishnan Mahadevan Date: Wed, 2 Nov 2022 16:09:23 +0530 Subject: [PATCH] Make PackageUtils compliant with JPMS Closes #2308 --- CHANGES.txt | 1 + .../java/org/testng/internal/PackageUtils.java | 18 ++++++------------ 2 files changed, 7 insertions(+), 12 deletions(-) diff --git a/CHANGES.txt b/CHANGES.txt index 7fb85330c7..79b0ad4c92 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ Current +Fixed: GITHUB-2308: StringIndexOutOfBoundsException in findClassesInPackage - Surefire/Maven - JDK 11 fails (Krishnan Mahadevan) Fixed: GITHUB:2788: TestResult.isSuccess() is TRUE when test fails due to expectedExceptions (Krishnan Mahadevan) Fixed: GITHUB-2800: Running Test Classes with Inherited @Factory and @DataProvider Annotated Non-Static Methods Fail (Krishnan Mahadevan) New: Ability to provide custom error message for assertThrows\expectThrows methods (Anatolii Yuzhakov) diff --git a/testng-core-api/src/main/java/org/testng/internal/PackageUtils.java b/testng-core-api/src/main/java/org/testng/internal/PackageUtils.java index b146614e80..65ffd2b1c3 100644 --- a/testng-core-api/src/main/java/org/testng/internal/PackageUtils.java +++ b/testng-core-api/src/main/java/org/testng/internal/PackageUtils.java @@ -1,8 +1,9 @@ package org.testng.internal; +import static java.nio.charset.StandardCharsets.UTF_8; + import java.io.File; import java.io.IOException; -import java.io.UnsupportedEncodingException; import java.lang.reflect.Method; import java.net.JarURLConnection; import java.net.URL; @@ -25,7 +26,6 @@ * @author Cedric Beust */ public class PackageUtils { - private static final String UTF_8 = "UTF-8"; private static final String PACKAGE_UTILS = PackageUtils.class.getSimpleName(); private static String[] testClassPaths; @@ -36,11 +36,6 @@ private PackageUtils() { // Utility class. Defeat instantiation. } - /** Add a class loader to the searchable loaders. */ - public static void addClassLoader(final ClassLoader loader) { - classLoaders.add(loader); - } - /** * @param packageName - The package name * @param included - The inclusion list. @@ -96,6 +91,9 @@ public static String[] findClassesInPackage( while (entries.hasMoreElements()) { JarEntry entry = entries.nextElement(); String name = entry.getName(); + if (name.startsWith("module-info") || name.startsWith("META-INF")) { + continue; + } if (name.charAt(0) == '/') { name = name.substring(1); } @@ -183,11 +181,7 @@ private static boolean matchTestClasspath(URL url, String lastFragment, boolean } String fileName = ""; - try { - fileName = URLDecoder.decode(url.getFile(), UTF_8); - } catch (UnsupportedEncodingException ueex) { - // ignore. should never happen - } + fileName = URLDecoder.decode(url.getFile(), UTF_8); for (String classpathFrag : classpathFragments) { String path = classpathFrag + lastFragment;