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

jamesbognar pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/juneau.git


The following commit(s) were added to refs/heads/master by this push:
     new 10768cf290 SonarQube bug fixes
10768cf290 is described below

commit 10768cf29040914551d3a21231a402475fb185aa
Author: James Bognar <[email protected]>
AuthorDate: Fri Feb 6 08:57:27 2026 -0500

    SonarQube bug fixes
---
 .../juneau/bean/swagger/ui/SwaggerUI_Test.java     |  64 ++-------
 .../juneau/commons/collections/Lists_Test.java     |  57 ++++----
 .../juneau/commons/collections/Maps_Test.java      |  57 ++++----
 .../juneau/commons/collections/Sets_Test.java      |  57 ++++----
 .../juneau/commons/inject/BasicBeanStore_Test.java |  59 ++++-----
 .../apache/juneau/commons/io/LocalDir_Test.java    |  55 ++++----
 .../apache/juneau/commons/io/LocalFile_Test.java   |  46 +++----
 .../apache/juneau/commons/lang/AsciiMap_Test.java  |  53 ++++----
 .../apache/juneau/commons/lang/AsciiSet_Test.java  |  27 ++--
 .../apache/juneau/commons/lang/HashCode_Test.java  |  28 ++--
 .../apache/juneau/commons/lang/Version_Test.java   | 146 ++++++++++-----------
 .../juneau/commons/logging/LogRecord_Test.java     |  32 +++--
 .../commons/utils/ResourceBundleUtils_Test.java    |  21 +--
 13 files changed, 352 insertions(+), 350 deletions(-)

diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
index f7c8290494..aa85931f2f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/bean/swagger/ui/SwaggerUI_Test.java
@@ -22,9 +22,13 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Testcase for {@link SwaggerUI}.
@@ -125,10 +129,9 @@ class SwaggerUI_Test extends TestBase {
                );
        }
 
-       /**
-        * Test method for Swagger document with parameters.
-        */
-       @Test void a04_swaggerWithParameters() throws Exception {
+       @ParameterizedTest
+       @MethodSource("swaggerEmptyPathsProvider")
+       void a04_swaggerWithEmptyPaths(String testName) throws Exception {
                var swagger = swagger()
                        .setInfo(info("Test API", "1.0.0"))
                        .setPaths(new HashMap<>());
@@ -150,53 +153,12 @@ class SwaggerUI_Test extends TestBase {
                );
        }
 
-       /**
-        * Test method for Swagger document with responses.
-        */
-       @Test void a05_swaggerWithResponses() throws Exception {
-               var swagger = swagger()
-                       .setInfo(info("Test API", "1.0.0"))
-                       .setPaths(new HashMap<>());
-
-               assertString(
-                       """
-                       <div class='swagger-ui'>
-                               <style></style>
-                               <script type='text/javascript'><sp/></script>
-                               <table class='header'>
-                                       <tr><th>Version:</th><td>1.0.0</td></tr>
-                               </table>
-                               <div class='tag-block tag-block-open'>
-                                       <div class='tag-block-contents'></div>
-                               </div>
-                       </div>
-                       """.replaceAll("\\n\\s*", ""),
-                       new SwaggerUI().swap(bs, swagger)
-               );
-       }
-
-       /**
-        * Test method for Swagger document with models.
-        */
-       @Test void a06_swaggerWithModels() throws Exception {
-               var swagger = swagger()
-                       .setInfo(info("Test API", "1.0.0"))
-                       .setPaths(new HashMap<>());
-
-               assertString(
-                       """
-                       <div class='swagger-ui'>
-                               <style></style>
-                               <script type='text/javascript'><sp/></script>
-                               <table class='header'>
-                                       <tr><th>Version:</th><td>1.0.0</td></tr>
-                               </table>
-                               <div class='tag-block tag-block-open'>
-                                       <div class='tag-block-contents'></div>
-                               </div>
-                       </div>
-                       """.replaceAll("\\n\\s*", ""),
-                       new SwaggerUI().swap(bs, swagger)
+       static Stream<Arguments> swaggerEmptyPathsProvider() {
+               return Stream.of(
+                       Arguments.of("parameters"),
+                       Arguments.of("responses"),
+                       Arguments.of("models"),
+                       Arguments.of("empty")
                );
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Lists_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Lists_Test.java
index 8f5bcfbcaa..fb50f83c18 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Lists_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Lists_Test.java
@@ -21,9 +21,13 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class Lists_Test extends TestBase {
@@ -143,33 +147,36 @@ class Lists_Test extends TestBase {
        // Sparse mode
        
//-----------------------------------------------------------------------------------------------------------------
 
-       @Test
-       void d01_sparse_empty() {
-               var list = Lists.create(String.class)
-                       .sparse()
-                       .build();
-
-               assertNull(list);
-       }
-
-       @Test
-       void d02_sparse_notEmpty() {
-               var list = Lists.create(String.class)
-                       .add("a")
-                       .sparse()
-                       .build();
-
-               assertNotNull(list);
-               assertSize(1, list);
+       @ParameterizedTest
+       @MethodSource("sparseProvider")
+       void d01_sparse(boolean sparse, boolean addItem, boolean expectNull, 
int expectedSize) {
+               var builder = Lists.create(String.class);
+               if (sparse) {
+                       builder.sparse();
+               }
+               if (addItem) {
+                       builder.add("a");
+               }
+               var list = builder.build();
+
+               if (expectNull) {
+                       assertNull(list);
+               } else {
+                       assertNotNull(list);
+                       if (expectedSize == 0) {
+                               assertEmpty(list);
+                       } else {
+                               assertSize(expectedSize, list);
+                       }
+               }
        }
 
-       @Test
-       void d03_notSparse_empty() {
-               var list = Lists.create(String.class)
-                       .build();
-
-               assertNotNull(list);
-               assertEmpty(list);
+       static Stream<Arguments> sparseProvider() {
+               return Stream.of(
+                       Arguments.of(true, false, true, 0),   // sparse_empty
+                       Arguments.of(true, true, false, 1),   // sparse_notEmpty
+                       Arguments.of(false, false, false, 0)  // notSparse_empty
+               );
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Maps_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Maps_Test.java
index 1ceb0b0dc9..5920949ce0 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Maps_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Maps_Test.java
@@ -21,10 +21,14 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.apache.juneau.junit.bct.annotations.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class Maps_Test extends TestBase {
@@ -226,33 +230,36 @@ class Maps_Test extends TestBase {
        // Sparse mode
        
//-----------------------------------------------------------------------------------------------------------------
 
-       @Test
-       void d01_sparse_empty() {
-               var map = Maps.create(String.class, Integer.class)
-                       .sparse()
-                       .build();
-
-               assertNull(map);
-       }
-
-       @Test
-       void d02_sparse_notEmpty() {
-               var map = Maps.create(String.class, Integer.class)
-                       .add("a", 1)
-                       .sparse()
-                       .build();
-
-               assertNotNull(map);
-               assertSize(1, map);
+       @ParameterizedTest
+       @MethodSource("sparseProvider")
+       void d01_sparse(boolean sparse, boolean addItem, boolean expectNull, 
int expectedSize) {
+               var builder = Maps.create(String.class, Integer.class);
+               if (sparse) {
+                       builder.sparse();
+               }
+               if (addItem) {
+                       builder.add("a", 1);
+               }
+               var map = builder.build();
+
+               if (expectNull) {
+                       assertNull(map);
+               } else {
+                       assertNotNull(map);
+                       if (expectedSize == 0) {
+                               assertEmpty(map);
+                       } else {
+                               assertSize(expectedSize, map);
+                       }
+               }
        }
 
-       @Test
-       void d03_notSparse_empty() {
-               var map = Maps.create(String.class, Integer.class)
-                       .build();
-
-               assertNotNull(map);
-               assertEmpty(map);
+       static Stream<Arguments> sparseProvider() {
+               return Stream.of(
+                       Arguments.of(true, false, true, 0),   // sparse_empty
+                       Arguments.of(true, true, false, 1),   // sparse_notEmpty
+                       Arguments.of(false, false, false, 0)  // notSparse_empty
+               );
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Sets_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Sets_Test.java
index ec81e7e8eb..8ba73be5b3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Sets_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/collections/Sets_Test.java
@@ -22,10 +22,14 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.apache.juneau.junit.bct.annotations.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class Sets_Test extends TestBase {
@@ -176,33 +180,36 @@ class Sets_Test extends TestBase {
        // Sparse mode
        
//-----------------------------------------------------------------------------------------------------------------
 
-       @Test
-       void e01_sparse_empty() {
-               var set = Sets.create(String.class)
-                       .sparse()
-                       .build();
-
-               assertNull(set);
-       }
-
-       @Test
-       void e02_sparse_notEmpty() {
-               var set = Sets.create(String.class)
-                       .add("a")
-                       .sparse()
-                       .build();
-
-               assertNotNull(set);
-               assertSize(1, set);
+       @ParameterizedTest
+       @MethodSource("sparseProvider")
+       void e01_sparse(boolean sparse, boolean addItem, boolean expectNull, 
int expectedSize) {
+               var builder = Sets.create(String.class);
+               if (sparse) {
+                       builder.sparse();
+               }
+               if (addItem) {
+                       builder.add("a");
+               }
+               var set = builder.build();
+
+               if (expectNull) {
+                       assertNull(set);
+               } else {
+                       assertNotNull(set);
+                       if (expectedSize == 0) {
+                               assertEmpty(set);
+                       } else {
+                               assertSize(expectedSize, set);
+                       }
+               }
        }
 
-       @Test
-       void e03_notSparse_empty() {
-               var set = Sets.create(String.class)
-                       .build();
-
-               assertNotNull(set);
-               assertEmpty(set);
+       static Stream<Arguments> sparseProvider() {
+               return Stream.of(
+                       Arguments.of(true, false, true, 0),   // sparse_empty
+                       Arguments.of(true, true, false, 1),   // sparse_notEmpty
+                       Arguments.of(false, false, false, 0)  // notSparse_empty
+               );
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/inject/BasicBeanStore_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/inject/BasicBeanStore_Test.java
index a32f6ef534..7eeca55b27 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/inject/BasicBeanStore_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/inject/BasicBeanStore_Test.java
@@ -20,9 +20,13 @@ import static org.apache.juneau.commons.utils.Utils.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class BasicBeanStore_Test extends TestBase {
@@ -115,37 +119,24 @@ class BasicBeanStore_Test extends TestBase {
        // addBean(Class, Object, String)
        
//====================================================================================================
 
-       @Test
-       void c01_addBean_named() {
-               var store = new BasicBeanStore2(null);
-               var bean = new TestBean("test1");
-               store.addBean(TestBean.class, bean, "named1");
-
-               var result = store.getBean(TestBean.class, "named1");
-               assertTrue(result.isPresent());
-               assertSame(bean, result.get());
-       }
-
-       @Test
-       void c02_addBean_named_nullName() {
+       @ParameterizedTest
+       @MethodSource("addBeanNamedProvider")
+       void c01_addBean_named(String name, boolean useNamedGetter) {
                var store = new BasicBeanStore2(null);
                var bean = new TestBean("test1");
-               store.addBean(TestBean.class, bean, null);
+               store.addBean(TestBean.class, bean, name);
 
-               var result = store.getBean(TestBean.class);
+               var result = useNamedGetter ? store.getBean(TestBean.class, 
name) : store.getBean(TestBean.class);
                assertTrue(result.isPresent());
                assertSame(bean, result.get());
        }
 
-       @Test
-       void c03_addBean_named_emptyString() {
-               var store = new BasicBeanStore2(null);
-               var bean = new TestBean("test1");
-               store.addBean(TestBean.class, bean, "");
-
-               var result = store.getBean(TestBean.class);
-               assertTrue(result.isPresent());
-               assertSame(bean, result.get());
+       static Stream<Arguments> addBeanNamedProvider() {
+               return Stream.of(
+                       Arguments.of("named1", true),
+                       Arguments.of(null, false),
+                       Arguments.of("", false)
+               );
        }
 
        @Test
@@ -602,18 +593,20 @@ class BasicBeanStore_Test extends TestBase {
                assertFalse(store.hasBean(TestBean.class, "name1"));
        }
 
-       @Test
-       void k02_hasBean_named_found() {
+       @ParameterizedTest
+       @MethodSource("hasBeanNamedProvider")
+       void k02_hasBean_named(String name, boolean expected) {
                var store = new BasicBeanStore2(null);
-               store.addBean(TestBean.class, new TestBean("test1"), "name1");
-               assertTrue(store.hasBean(TestBean.class, "name1"));
+               store.addBean(TestBean.class, new TestBean("test1"), name);
+               assertEquals(expected, store.hasBean(TestBean.class, name));
        }
 
-       @Test
-       void k03_hasBean_named_nullName() {
-               var store = new BasicBeanStore2(null);
-               store.addBean(TestBean.class, new TestBean("test1"), null);
-               assertTrue(store.hasBean(TestBean.class, null));
+       static Stream<Arguments> hasBeanNamedProvider() {
+               return Stream.of(
+                       Arguments.of("name1", true),
+                       Arguments.of(null, true),
+                       Arguments.of("", true)
+               );
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalDir_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalDir_Test.java
index 4abccecc17..f8474e4fde 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalDir_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalDir_Test.java
@@ -19,9 +19,13 @@ package org.apache.juneau.commons.io;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.nio.file.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 class LocalDir_Test extends TestBase {
 
@@ -44,35 +48,28 @@ class LocalDir_Test extends TestBase {
        
//====================================================================================================
        // Constructor tests - classpath
        
//====================================================================================================
-       @Test void b01_constructorWithClassAndPath_null() {
-               var dir = new LocalDir(LocalDir_Test.class, null);
-               assertNotNull(dir);
-       }
-
-       @Test void b02_constructorWithClassAndPath_empty() {
-               var dir = new LocalDir(LocalDir_Test.class, "");
-               assertNotNull(dir);
-       }
-
-       @Test void b03_constructorWithClassAndPath_absolute() {
-               var dir = new LocalDir(LocalDir_Test.class, "/files");
-               assertNotNull(dir);
-       }
-
-       @Test void b04_constructorWithClassAndPath_relative() {
-               var dir = new LocalDir(LocalDir_Test.class, "files");
-               assertNotNull(dir);
-       }
-
-       @Test void b05_constructorWithClassAndPath_root() {
-               var dir = new LocalDir(LocalDir_Test.class, "/");
-               assertNotNull(dir);
-       }
-
-       @Test void b06_constructorWithClassAndPath_nullClass() {
-               assertThrows(IllegalArgumentException.class, () -> {
-                       new LocalDir((Class<?>)null, "path");
-               });
+       @ParameterizedTest
+       @MethodSource("constructorWithClassAndPathProvider")
+       void b01_constructorWithClassAndPath(String path, Class<?> clazz, 
Class<? extends Throwable> expectedException) {
+               if (expectedException != null) {
+                       assertThrows(expectedException, () -> {
+                               new LocalDir(clazz, path);
+                       });
+               } else {
+                       var dir = new LocalDir(clazz != null ? clazz : 
LocalDir_Test.class, path);
+                       assertNotNull(dir);
+               }
+       }
+
+       static Stream<Arguments> constructorWithClassAndPathProvider() {
+               return Stream.of(
+                       Arguments.of(null, LocalDir_Test.class, null),
+                       Arguments.of("", LocalDir_Test.class, null),
+                       Arguments.of("/files", LocalDir_Test.class, null),
+                       Arguments.of("files", LocalDir_Test.class, null),
+                       Arguments.of("/", LocalDir_Test.class, null),
+                       Arguments.of("path", null, 
IllegalArgumentException.class)
+               );
        }
 
        @Test void b07_constructorWithClassAndPath_trailingSlashes() {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalFile_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalFile_Test.java
index 122d2c3108..ee9dbfa4cd 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalFile_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/io/LocalFile_Test.java
@@ -22,9 +22,13 @@ import static org.junit.jupiter.api.Assertions.*;
 import java.io.*;
 import java.nio.file.*;
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class LocalFile_Test extends TestBase {
@@ -55,31 +59,27 @@ class LocalFile_Test extends TestBase {
        
//====================================================================================================
        // Constructor tests - classpath
        
//====================================================================================================
-       @Test void b01_constructorWithClassAndPath() {
-               var file = new LocalFile(LocalFile_Test.class, 
"files/Test3.properties");
-               assertEquals("Test3.properties", file.getName());
-       }
-
-       @Test void b02_constructorWithClassAndPath_noSlash() {
-               var file = new LocalFile(LocalFile_Test.class, 
"Test3.properties");
-               assertEquals("Test3.properties", file.getName());
-       }
-
-       @Test void b03_constructorWithClassAndPath_nestedPath() {
-               var file = new LocalFile(LocalFile_Test.class, 
"files/subdir/Test3.properties");
-               assertEquals("Test3.properties", file.getName());
-       }
-
-       @Test void b04_constructorWithClassAndPath_nullClass() {
-               assertThrows(IllegalArgumentException.class, () -> {
-                       new LocalFile((Class<?>)null, "path");
-               });
+       @ParameterizedTest
+       @MethodSource("constructorWithClassAndPathProvider")
+       void b01_constructorWithClassAndPath(String path, String expectedName, 
Class<?> clazz, Class<? extends Throwable> expectedException) {
+               if (expectedException != null) {
+                       assertThrows(expectedException, () -> {
+                               new LocalFile(clazz, path);
+                       });
+               } else {
+                       var file = new LocalFile(clazz != null ? clazz : 
LocalFile_Test.class, path);
+                       assertEquals(expectedName, file.getName());
+               }
        }
 
-       @Test void b05_constructorWithClassAndPath_nullPath() {
-               assertThrows(IllegalArgumentException.class, () -> {
-                       new LocalFile(LocalFile_Test.class, null);
-               });
+       static Stream<Arguments> constructorWithClassAndPathProvider() {
+               return Stream.of(
+                       Arguments.of("files/Test3.properties", 
"Test3.properties", LocalFile_Test.class, null),
+                       Arguments.of("Test3.properties", "Test3.properties", 
LocalFile_Test.class, null),
+                       Arguments.of("files/subdir/Test3.properties", 
"Test3.properties", LocalFile_Test.class, null),
+                       Arguments.of("path", null, null, 
IllegalArgumentException.class),
+                       Arguments.of(null, null, LocalFile_Test.class, 
IllegalArgumentException.class)
+               );
        }
 
        
//====================================================================================================
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiMap_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiMap_Test.java
index ef8bf98177..73cd2afbc0 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiMap_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiMap_Test.java
@@ -18,7 +18,12 @@ package org.apache.juneau.commons.lang;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+import java.util.stream.Stream;
+
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Tests for {@link AsciiMap}.
@@ -56,18 +61,23 @@ class AsciiMap_Test {
                assertEquals("value2", map.get('a'));
        }
 
-       @Test
-       void a04_append_nullValue() {
+       @ParameterizedTest
+       @MethodSource("appendValueProvider")
+       void a04_append_value(String value, String expected) {
                var map = new AsciiMap();
-               map.append('a', null);
-               assertNull(map.get('a'));
+               map.append('a', value);
+               if (expected == null) {
+                       assertNull(map.get('a'));
+               } else {
+                       assertEquals(expected, map.get('a'));
+               }
        }
 
-       @Test
-       void a05_append_emptyString() {
-               var map = new AsciiMap();
-               map.append('a', "");
-               assertEquals("", map.get('a'));
+       static Stream<Arguments> appendValueProvider() {
+               return Stream.of(
+                       Arguments.of(null, null),
+                       Arguments.of("", "")
+               );
        }
 
        
//====================================================================================================
@@ -276,25 +286,20 @@ class AsciiMap_Test {
                assertTrue(map.contains("abc"));
        }
 
-       @Test
-       void d02_contains_CharSequence_notPresent() {
-               var map = new AsciiMap();
-               map.append('a', "value1");
-               assertFalse(map.contains("xyz"));
-       }
-
-       @Test
-       void d03_contains_CharSequence_null() {
+       @ParameterizedTest
+       @MethodSource("containsNotPresentProvider")
+       void d02_contains_CharSequence_notPresent(CharSequence input) {
                var map = new AsciiMap();
                map.append('a', "value1");
-               assertFalse(map.contains((CharSequence)null));
+               assertFalse(map.contains(input));
        }
 
-       @Test
-       void d04_contains_CharSequence_empty() {
-               var map = new AsciiMap();
-               map.append('a', "value1");
-               assertFalse(map.contains(""));
+       static Stream<Arguments> containsNotPresentProvider() {
+               return Stream.of(
+                       Arguments.of("xyz"),
+                       Arguments.of((CharSequence)null),
+                       Arguments.of("")
+               );
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiSet_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiSet_Test.java
index 4476de7fcb..16c507ac38 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiSet_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/AsciiSet_Test.java
@@ -18,8 +18,13 @@ package org.apache.juneau.commons.lang;
 
 import static org.junit.jupiter.api.Assertions.*;
 
+import java.util.stream.Stream;
+
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Tests for {@link AsciiSet}.
@@ -584,17 +589,23 @@ class AsciiSet_Test extends TestBase {
                assertFalse(set.containsOnly("xyz"));
        }
 
-       @Test
-       void j03_containsOnly_null() {
+       @ParameterizedTest
+       @MethodSource("containsOnlyProvider")
+       void j03_containsOnly(String input, boolean expected) {
                var set = AsciiSet.of("abc");
-               assertFalse(set.containsOnly(null));
+               if (input == null) {
+                       assertFalse(set.containsOnly(null));
+               } else {
+                       assertEquals(expected, set.containsOnly(input));
+               }
        }
 
-       @Test
-       void j04_containsOnly_empty() {
-               var set = AsciiSet.of("abc");
-               // Empty string should return true (all characters in empty 
string are in the set)
-               assertTrue(set.containsOnly(""));
+       static Stream<Arguments> containsOnlyProvider() {
+               return Stream.of(
+                       Arguments.of(null, false),
+                       Arguments.of("", true),  // Empty string should return 
true (all characters in empty string are in the set)
+                       Arguments.of("a", true)
+               );
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/HashCode_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/HashCode_Test.java
index 17824404e3..8b53723928 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/HashCode_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/HashCode_Test.java
@@ -20,9 +20,13 @@ import static 
org.apache.juneau.commons.utils.CollectionUtils.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Tests for {@link HashCode}.
@@ -97,11 +101,20 @@ class HashCode_Test extends TestBase {
        // add(int) tests
        
//====================================================================================================
 
-       @Test
-       void c01_addInt_single() {
+       @ParameterizedTest
+       @MethodSource("addIntProvider")
+       void c01_addInt(int value, int expected) {
                var hc = HashCode.create();
-               hc.add(42);
-               assertEquals(31 * 1 + 42, hc.get());
+               hc.add(value);
+               assertEquals(expected, hc.get());
+       }
+
+       static Stream<Arguments> addIntProvider() {
+               return Stream.of(
+                       Arguments.of(42, 31 * 1 + 42),
+                       Arguments.of(0, 31 * 1 + 0),
+                       Arguments.of(-1, 31 * 1 + (-1))
+               );
        }
 
        @Test
@@ -112,13 +125,6 @@ class HashCode_Test extends TestBase {
                assertEquals(expected, hc.get());
        }
 
-       @Test
-       void c03_addInt_zero() {
-               var hc = HashCode.create();
-               hc.add(0);
-               assertEquals(31 * 1 + 0, hc.get());
-       }
-
        @Test
        void c04_addInt_negative() {
                var hc = HashCode.create();
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/Version_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
index 5da04730ce..75846fcb05 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/lang/Version_Test.java
@@ -22,9 +22,13 @@ import static org.apache.juneau.junit.bct.BctAssertions.*;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 @SuppressWarnings("java:S4144")
 class Version_Test extends TestBase {
@@ -120,34 +124,38 @@ class Version_Test extends TestBase {
                assertEquals(v1, v1);
        }
 
-       @Test
-       void b02_equalsObject_sameVersion() {
-               var v1 = of("1.2.3");
-               var v2 = of("1.2.3");
-               assertEquals(v1, v2);
-               assertEquals(v2, v1);
-       }
-
-       @Test
-       void b03_equalsObject_differentVersions() {
-               var v1 = of("1.2.3");
-               var v2 = of("1.2.4");
-               assertNotEquals(v1, v2);
-               assertNotEquals(v2, v1);
+       @ParameterizedTest
+       @MethodSource("equalsObjectProvider")
+       void b02_equalsObject(String version1, String version2, boolean 
expectedEqual, boolean checkNull) {
+               var v1 = of(version1);
+               if (checkNull) {
+                       // equals(Object) should return false for null
+                       // The instanceof check should prevent any null access
+                       try {
+                               assertNotEquals(v1, (Object)null);
+                       } catch (NullPointerException e) {
+                               // If there's a bug in the implementation, 
we'll catch it here
+                               // But ideally this should not throw
+                               fail("equals(Object) should handle null without 
throwing NullPointerException");
+                       }
+               } else {
+                       var v2 = of(version2);
+                       if (expectedEqual) {
+                               assertEquals(v1, v2);
+                               assertEquals(v2, v1);
+                       } else {
+                               assertNotEquals(v1, v2);
+                               assertNotEquals(v2, v1);
+                       }
+               }
        }
 
-       @Test
-       void b04_equalsObject_null() {
-               var v1 = of("1.2.3");
-               // equals(Object) should return false for null
-               // The instanceof check should prevent any null access
-               try {
-                       assertNotEquals(v1, (Object)null);
-               } catch (NullPointerException e) {
-                       // If there's a bug in the implementation, we'll catch 
it here
-                       // But ideally this should not throw
-                       fail("equals(Object) should handle null without 
throwing NullPointerException");
-               }
+       static Stream<Arguments> equalsObjectProvider() {
+               return Stream.of(
+                       Arguments.of("1.2.3", "1.2.3", true, false),
+                       Arguments.of("1.2.3", "1.2.4", false, false),
+                       Arguments.of("1.2.3", null, false, true)
+               );
        }
 
        @Test
@@ -225,60 +233,44 @@ class Version_Test extends TestBase {
                assertEquals(hashCode1, hashCode2);
        }
 
-       @Test
-       void c02_hashCode_sameVersion() {
-               var v1 = of("1.2.3");
-               var v2 = of("1.2.3");
-               assertEquals(v1.hashCode(), v2.hashCode());
-       }
-
-       @Test
-       void c03_hashCode_differentVersions() {
-               var v1 = of("1.2.3");
-               var v2 = of("1.2.4");
-               // Different versions may have same hashcode (collision), but 
usually different
-               // We just verify both produce valid hashcodes
-               assertDoesNotThrow(() -> {
-                       v1.hashCode();
-                       v2.hashCode();
-               });
-       }
-
-       @Test
-       void c04_hashCode_equalsContract() {
-               var v1 = of("1.2.3");
-               var v2 = of("1.2.3");
-               // If two objects are equal, they must have the same hashcode
-               if (v1.equals(v2)) {
-                       assertEquals(v1.hashCode(), v2.hashCode());
+       @ParameterizedTest
+       @MethodSource("hashCodeProvider")
+       void c02_hashCode(String version1, String version2, boolean 
checkEquality, boolean checkConsistency, boolean checkDifferent) {
+               var v1 = of(version1);
+               if (checkConsistency) {
+                       // Consistency check - same object should return same 
hashcode
+                       var hashCode1 = v1.hashCode();
+                       var hashCode2 = v1.hashCode();
+                       assertEquals(hashCode1, hashCode2);
+               } else if (version2 != null) {
+                       var v2 = of(version2);
+                       if (checkEquality) {
+                               // Same versions should have same hashcode
+                               assertEquals(v1.hashCode(), v2.hashCode());
+                       } else if (checkDifferent) {
+                               // Different versions - just verify both 
produce valid hashcodes
+                               assertDoesNotThrow(() -> {
+                                       v1.hashCode();
+                                       v2.hashCode();
+                               });
+                       } else {
+                               // Equals contract - if equal, same hashcode
+                               if (v1.equals(v2)) {
+                                       assertEquals(v1.hashCode(), 
v2.hashCode());
+                               }
+                       }
                }
        }
 
-       @Test
-       void c05_hashCode_differentLengths() {
-               var v1 = of("1.2");
-               var v2 = of("1.2.0");
-               // These are equal according to equals(Version), so should have 
same hashcode
-               // But hashCode uses Arrays.hashCode which considers length, so 
they may differ
-               // We just verify both produce valid hashcodes
-               assertDoesNotThrow(() -> {
-                       v1.hashCode();
-                       v2.hashCode();
-               });
-       }
-
-       @Test
-       void c06_hashCode_singlePart() {
-               var v1 = of("1");
-               var v2 = of("1");
-               assertEquals(v1.hashCode(), v2.hashCode());
-       }
-
-       @Test
-       void c07_hashCode_emptyVersion() {
-               var v1 = of("");
-               var v2 = of("");
-               assertEquals(v1.hashCode(), v2.hashCode());
+       static Stream<Arguments> hashCodeProvider() {
+               return Stream.of(
+                       Arguments.of("1.2.3", "1.2.3", true, false, false),   
// sameVersion
+                       Arguments.of("1.2.3", "1.2.4", false, false, true),  // 
differentVersions
+                       Arguments.of("1.2.3", "1.2.3", false, false, false), // 
equalsContract
+                       Arguments.of("1.2", "1.2.0", false, false, true),    // 
differentLengths
+                       Arguments.of("1", "1", true, false, false),           
// singlePart
+                       Arguments.of("", "", true, false, false)              
// emptyVersion
+               );
        }
 
        @Test
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/logging/LogRecord_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/logging/LogRecord_Test.java
index 9aa275372b..a356b5ff26 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/logging/LogRecord_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/logging/LogRecord_Test.java
@@ -19,9 +19,13 @@ package org.apache.juneau.commons.logging;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.logging.Level;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Tests for {@link LogRecord}.
@@ -169,21 +173,27 @@ class LogRecord_Test extends TestBase {
                assertTrue(formatted.contains("User logged in"));
        }
 
-       @Test void d02_formatted_timestamp() {
+       @ParameterizedTest
+       @MethodSource("formattedProvider")
+       void d02_formatted(String pattern, String expectedPattern) {
                var rec = new LogRecord("test.logger", Level.INFO, "Message", 
null, null);
 
-               var formatted = rec.formatted("{timestamp}");
-               // Should be ISO8601 format
-               
assertTrue(formatted.matches("\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[+-]\\d{4}"));
+               var formatted = rec.formatted(pattern);
+               if (expectedPattern != null) {
+                       // Should match expected pattern (e.g., ISO8601 format)
+                       assertTrue(formatted.matches(expectedPattern));
+               } else {
+                       // Should be formatted date (not null)
+                       assertNotNull(formatted);
+                       assertFalse(formatted.isEmpty());
+               }
        }
 
-       @Test void d03_formatted_date() {
-               var rec = new LogRecord("test.logger", Level.INFO, "Message", 
null, null);
-
-               var formatted = rec.formatted("{date}");
-               // Should be formatted date (not null)
-               assertNotNull(formatted);
-               assertFalse(formatted.isEmpty());
+       static Stream<Arguments> formattedProvider() {
+               return Stream.of(
+                       Arguments.of("{timestamp}", 
"\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}[+-]\\d{4}"),
+                       Arguments.of("{date}", null)  // null means just check 
not null and not empty
+               );
        }
 
        @Test void d04_formatted_classAndMethod() {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
index 034ff79c29..23ab163cde 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/commons/utils/ResourceBundleUtils_Test.java
@@ -19,9 +19,13 @@ package org.apache.juneau.commons.utils;
 import static org.junit.jupiter.api.Assertions.*;
 
 import java.util.*;
+import java.util.stream.Stream;
 
 import org.apache.juneau.*;
 import org.junit.jupiter.api.*;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
 
 /**
  * Tests for {@link ResourceBundleUtils}.
@@ -80,18 +84,19 @@ class ResourceBundleUtils_Test extends TestBase {
                assertEquals("value1", bundle.getString("key1"));
        }
 
-       @Test
-       void a06_findBundle_nonexistentBundle() {
+       @ParameterizedTest
+       @MethodSource("findBundleNonexistentProvider")
+       void a06_findBundle_nonexistentBundle(Locale locale) {
                var loader = getClass().getClassLoader();
-               var bundle = 
ResourceBundleUtils.findBundle("nonexistent.Bundle", Locale.getDefault(), 
loader);
+               var bundle = 
ResourceBundleUtils.findBundle("nonexistent.Bundle", locale, loader);
                assertNull(bundle);
        }
 
-       @Test
-       void a07_findBundle_nonexistentBundle_differentLocale() {
-               var loader = getClass().getClassLoader();
-               var bundle = 
ResourceBundleUtils.findBundle("nonexistent.Bundle", Locale.JAPANESE, loader);
-               assertNull(bundle);
+       static Stream<Arguments> findBundleNonexistentProvider() {
+               return Stream.of(
+                       Arguments.of(Locale.getDefault()),
+                       Arguments.of(Locale.JAPANESE)
+               );
        }
 
        @Test


Reply via email to