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

garydgregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-bcel.git


The following commit(s) were added to refs/heads/master by this push:
     new a89bd87f Fix constant pool module access test on java 27 (#534)
a89bd87f is described below

commit a89bd87f5b1c926719c9ef239663bb07682dff3e
Author: Gary Gregory <[email protected]>
AuthorDate: Sat Oct 3 09:09:45 2026 -0400

    Fix constant pool module access test on java 27 (#534)
    
    * Fix ConstantPoolModuleAccessTest on Java 27
    
    * Make ConstantPoolModuleAccessTest more reliable
    
    Compare module service uses without depending on order.
    
    Use TreeSet comparisons for expected service names and assert the array
    length separately to detect duplicates.
---
 .../classfile/ConstantPoolModuleAccessTest.java    | 159 +++++++++++++--------
 1 file changed, 96 insertions(+), 63 deletions(-)

diff --git 
a/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java 
b/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java
index f4a17aad..13f39d53 100644
--- a/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java
+++ b/src/test/java/org/apache/bcel/classfile/ConstantPoolModuleAccessTest.java
@@ -24,10 +24,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URL;
-import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashMap;
-import java.util.List;
 import java.util.Map;
 import java.util.Set;
 import java.util.TreeSet;
@@ -68,28 +66,32 @@ public final class ConstantPoolModuleAccessTest {
                         assertEquals(1, usedClassNames.length);
                         
assertEquals("org.junit.jupiter.api.extension.Extension", usedClassNames[0]);
                     } else if (urlPath.contains("junit-platform-launcher")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("org.junit.platform.engine.TestEngine");
                         
expected.add("org.junit.platform.launcher.LauncherDiscoveryListener");
                         
expected.add("org.junit.platform.launcher.LauncherInterceptor");
                         
expected.add("org.junit.platform.launcher.LauncherSessionListener");
                         
expected.add("org.junit.platform.launcher.PostDiscoveryFilter");
                         
expected.add("org.junit.platform.launcher.TestExecutionListener");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if (urlPath.contains("junit-platform-common")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("org.junit.platform.commons.support.scanning.ClasspathScanner");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if (urlPath.contains("junit-platform-engine")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("org.junit.platform.engine.discovery.DiscoverySelectorIdentifierParser");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.rmi/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("java.rmi.server.RMIClassLoaderSpi");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.xml/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.xml.datatype.DatatypeFactory");
                         
expected.add("javax.xml.parsers.DocumentBuilderFactory");
                         expected.add("javax.xml.parsers.SAXParserFactory");
@@ -100,13 +102,15 @@ public final class ConstantPoolModuleAccessTest {
                         expected.add("javax.xml.validation.SchemaFactory");
                         expected.add("javax.xml.xpath.XPathFactory");
                         expected.add("org.xml.sax.XMLReader");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.datatransfer/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("sun.datatransfer.DesktopDatatransferService");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.desktop/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("java.awt.im.spi.InputMethodDescriptor");
                         
expected.add("javax.accessibility.AccessibilityProvider");
                         expected.add("javax.imageio.spi.ImageInputStreamSpi");
@@ -125,21 +129,24 @@ public final class ConstantPoolModuleAccessTest {
                         
expected.add("javax.sound.sampled.spi.FormatConversionProvider");
                         expected.add("javax.sound.sampled.spi.MixerProvider");
                         expected.add("sun.swing.InteropProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.naming/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.naming.ldap.StartTlsResponse");
                         expected.add("javax.naming.spi.InitialContextFactory");
                         if (javaClass.getMajor() > Const.MAJOR_11) {
                             
expected.add("javax.naming.ldap.spi.LdapDnsProvider");
                         }
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.prefs/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("java.util.prefs.PreferencesFactory");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.base/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("java.lang.System$LoggerFinder");
                         expected.add("java.net.ContentHandlerFactory");
                         if (javaClass.getMajor() > Const.MAJOR_17) {
@@ -160,6 +167,9 @@ public final class ConstantPoolModuleAccessTest {
                         expected.add("java.text.spi.NumberFormatProvider");
                         expected.add("java.time.chrono.AbstractChronology");
                         expected.add("java.time.chrono.Chronology");
+                        if (javaClass.getMajor() >= Const.MAJOR_27) {
+                            
expected.add("java.time.format.DateTimeFormatterPatternProvider");
+                        }
                         expected.add("java.time.zone.ZoneRulesProvider");
                         if (javaClass.getMajor() > Const.MAJOR_11 && 
javaClass.getMajor() < Const.MAJOR_24) {
                             expected.add("java.util.random.RandomGenerator");
@@ -177,7 +187,9 @@ public final class ConstantPoolModuleAccessTest {
                             expected.add("jdk.internal.io.JdkConsoleProvider");
                         }
                         
expected.add("jdk.internal.logger.DefaultLoggerFinder");
-                        
expected.add("sun.text.spi.JavaTimeDateTimePatternProvider");
+                        if (javaClass.getMajor() < Const.MAJOR_27) {
+                            
expected.add("sun.text.spi.JavaTimeDateTimePatternProvider");
+                        }
                         
expected.add("sun.util.locale.provider.LocaleDataMetaInfo");
                         if (javaClass.getMajor() <= Const.MAJOR_25) {
                             
expected.add("sun.util.resources.LocaleData$CommonResourceBundleProvider");
@@ -186,49 +198,59 @@ public final class ConstantPoolModuleAccessTest {
                             
expected.add("sun.util.resources.LocaleData$LocaleDataResourceBundleProvider");
                         }
                         expected.add("sun.util.spi.CalendarProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.management.agent/module-info.class") && 
javaClass.getMajor() < Const.MAJOR_21) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("jdk.internal.agent.spi.AgentProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.management/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("javax.management.remote.JMXConnectorProvider");
                         
expected.add("javax.management.remote.JMXConnectorServerProvider");
                         
expected.add("sun.management.spi.PlatformMBeanProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.sql/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("java.sql.Driver");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.httpserver/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("com.sun.net.httpserver.spi.HttpServerProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.sql.rowset/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.sql.rowset.RowSetFactory");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.compiler/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.tools.DocumentationTool");
                         expected.add("javax.tools.JavaCompiler");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/java.scripting/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.script.ScriptEngineFactory");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.dynalink/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("jdk.dynalink.linker.GuardingDynamicLinkerExporter");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if (urlPath.contains("/jdk.jdi/module-info.class")) 
{
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("com.sun.jdi.connect.Connector");
                         
expected.add("com.sun.jdi.connect.spi.TransportService");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.compiler/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("javax.annotation.processing.Processor");
                         expected.add("com.sun.source.util.Plugin");
                         if (javaClass.getMajor() > Const.MAJOR_11) {
@@ -238,52 +260,63 @@ public final class ConstantPoolModuleAccessTest {
                         if (javaClass.getMajor() > Const.MAJOR_23) {
                             
expected.add("com.sun.tools.javac.api.JavacTrees$DocCommentTreeTransformer");
                         }
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jconsole/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("com.sun.tools.jconsole.JConsolePlugin");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.attach/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("com.sun.tools.attach.spi.AttachProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jshell/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("jdk.jshell.spi.ExecutionControlProvider");
                         
expected.add("jdk.internal.editor.spi.BuildInEditorProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.internal.le/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        final Set<String> expected = new TreeSet<>();
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jlink/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("jdk.tools.jlink.plugin.Plugin");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.internal.jvmstat/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("sun.jvmstat.monitor.MonitoredHostService");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jpackage/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         if (javaClass.getMajor() <= Const.MAJOR_25) {
                             expected.add("jdk.jpackage.internal.Bundler");
                             expected.add("jdk.jpackage.internal.Bundlers");
                         } else {
                             
expected.add("jdk.jpackage.internal.cli.CliBundlingEnvironment");
                         }
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.naming.ldap/module-info.class")) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         expected.add("com.sun.jndi.ldap.spi.LdapDnsProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jsobject/module-info.class") && javaClass.getMajor() == 
Const.MAJOR_11) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("jdk.internal.netscape.javascript.spi.JSObjectProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else if 
(urlPath.contains("/jdk.jdeps/module-info.class") && javaClass.getMajor() > 
Const.MAJOR_24) {
-                        final List<String> expected = new ArrayList<>();
+                        final Set<String> expected = new TreeSet<>();
                         
expected.add("com.sun.tools.javac.platform.PlatformProvider");
-                        assertEquals(expected, Arrays.asList(usedClassNames));
+                        assertEquals(expected.size(), usedClassNames.length);
+                        assertEquals(expected, new 
TreeSet<>(Arrays.asList(usedClassNames)));
                     } else {
                         assertEquals(0, usedClassNames.length, () -> "Found " 
+ Arrays.toString(usedClassNames) + " in " + urlPath);
                     }

Reply via email to