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 c809eec5f8 StringFormatter class
c809eec5f8 is described below

commit c809eec5f861bd4143e24d66fa714f3fb9230295
Author: James Bognar <[email protected]>
AuthorDate: Sun Nov 30 09:15:35 2025 -0500

    StringFormatter class
---
 TODO-StringUtils.md                                | 10 +++
 .../org/apache/juneau/assertions/Assertion.java    |  3 +-
 .../juneau/assertions/AssertionPredicate.java      |  5 +-
 .../juneau/assertions/FluentArrayAssertion.java    |  8 +-
 .../assertions/FluentCollectionAssertion.java      |  8 +-
 .../assertions/FluentComparableAssertion.java      |  9 +-
 .../juneau/assertions/FluentObjectAssertion.java   | 12 +--
 .../assertions/FluentPrimitiveArrayAssertion.java  |  8 +-
 .../assertions/FluentThrowableAssertion.java       |  2 +-
 .../apache/juneau/common/utils/StringFormat.java   | 38 ++-------
 .../apache/juneau/common/utils/StringUtils.java    | 95 ----------------------
 .../juneau/assertions/AnyAssertion_Test.java       |  4 +-
 .../juneau/assertions/ArrayAssertion_Test.java     | 40 ++++-----
 .../juneau/assertions/BeanListAssertion_Test.java  | 34 ++++----
 .../juneau/assertions/ByteArrayAssertion_Test.java | 30 +++----
 .../assertions/CollectionAssertion_Test.java       | 38 ++++-----
 .../juneau/assertions/DateAssertion_Test.java      | 74 ++++++++---------
 .../juneau/assertions/ListAssertion_Test.java      | 42 +++++-----
 .../assertions/PrimitiveArrayAssertion_Test.java   | 38 ++++-----
 .../assertions/StringListAssertion_Test.java       |  4 +-
 .../juneau/assertions/ThrowableAssertion_Test.java |  4 +-
 21 files changed, 197 insertions(+), 309 deletions(-)

diff --git a/TODO-StringUtils.md b/TODO-StringUtils.md
index 40ba02dc58..1811b03f8d 100644
--- a/TODO-StringUtils.md
+++ b/TODO-StringUtils.md
@@ -224,3 +224,13 @@ The `StringUtils` class currently has 225+ public static 
methods covering:
 - `parseNumber(String s, Class<? extends Number> type)` - Could add more 
number types
 - `getDuration(String s)` - Could support more duration formats
 - `replaceVars(String s, Map<String,Object> m)` - Could add more variable 
syntax options
+
+## Methods to Review/Deprecate
+
+- ⚠️ `stringifyDeep(Object o)` - Determine if this method is still required or 
if it can be replaced with `readable()`. Currently used in:
+  - `FluentObjectAssertion.equals()` for array comparison (line 566)
+  - Previously used in `AssertionPredicate.VALUE` but has been replaced with 
`readable()`
+  - Review differences in behavior between `stringifyDeep()` and `readable()`:
+    - `stringifyDeep()` uses `toString()` for Collections (adds spaces: `[a, 
b, c]`)
+    - `readable()` uses `Collectors.joining(",")` for Collections (no spaces: 
`[a,b,c]`)
+  - If `stringifyDeep()` can be replaced, update all usages and consider 
deprecating/removing the method
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
index 17b10eacf7..09af26304b 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/Assertion.java
@@ -16,7 +16,6 @@
  */
 package org.apache.juneau.assertions;
 
-import static org.apache.juneau.common.utils.StringUtils.*;
 import static org.apache.juneau.common.utils.ThrowableUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
@@ -213,7 +212,7 @@ public class Assertion {
         * @return A new {@link BasicAssertionError}.
         */
        protected BasicAssertionError error(Throwable cause, String msg, 
Object...args) {
-               msg = mformat(msg, args);
+               msg = f(msg, args);
                if (nn(this.msg))
                        msg = f(this.msg, this.msgArgs).replace("<<<MSG>>>", 
msg);
                if (nn(out))
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
index dac33a4a3b..e7d2373a4e 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/AssertionPredicate.java
@@ -17,7 +17,6 @@
 package org.apache.juneau.assertions;
 
 import static org.apache.juneau.common.utils.CollectionUtils.*;
-import static org.apache.juneau.common.utils.StringUtils.*;
 import static org.apache.juneau.common.utils.Utils.*;
 
 import java.text.*;
@@ -188,7 +187,7 @@ public class AssertionPredicate<T> implements Predicate<T> {
        /**
         * Argument placeholder for tested value.
         */
-       public static final Function<Object,String> VALUE = 
StringUtils::stringifyDeep;
+       public static final Function<Object,String> VALUE = 
StringUtils::readable;
        private static final Messages MESSAGES = 
Messages.of(AssertionPredicate.class, "Messages");
        // @formatter:off
        private static final String
@@ -246,7 +245,7 @@ public class AssertionPredicate<T> implements Predicate<T> {
                        for (var i = 0; i < oargs.length; i++) {
                                var a = this.args[i];
                                if (a instanceof Function a2) // NOSONAR - 
Intentional.
-                                       oargs[i] = a2.apply(t);
+                                       oargs[i] = r(a2.apply(t));
                                else
                                        oargs[i] = r(a);
                        }
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
index df283900f4..1639334df7 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentArrayAssertion.java
@@ -238,7 +238,7 @@ public class FluentArrayAssertion<E,R> extends 
FluentObjectAssertion<E[],R> {
 
        @Override /* Overridden from FluentBaseAssertion */
        public FluentStringAssertion<R> asString() {
-               return new FluentStringAssertion<>(this, toString(), returns());
+               return new FluentStringAssertion<>(this, valueIsNull() ? null : 
r(value()), returns());
        }
 
        /**
@@ -311,7 +311,7 @@ public class FluentArrayAssertion<E,R> extends 
FluentObjectAssertion<E[],R> {
                for (var v : value())
                        if (test.test(v))
                                return returns();
-               throw error(MSG_arrayDidntContainAnyMatchingValue, 
(Object)value());
+               throw error(MSG_arrayDidntContainAnyMatchingValue, r(value()));
        }
 
        /**
@@ -325,7 +325,7 @@ public class FluentArrayAssertion<E,R> extends 
FluentObjectAssertion<E[],R> {
                for (int i = 0, j = length(); i < j; i++)
                        if (eq(at(i), entry))
                                return returns();
-               throw error(MSG_arrayDidNotContainExpectedValue, entry, 
toString());
+               throw error(MSG_arrayDidNotContainExpectedValue, r(entry), 
r(value()));
        }
 
        /**
@@ -364,7 +364,7 @@ public class FluentArrayAssertion<E,R> extends 
FluentObjectAssertion<E[],R> {
        public R isNotContains(E entry) throws AssertionError {
                for (int i = 0, j = length(); i < j; i++)
                        if (eq(at(i), entry))
-                               throw error(MSG_arrayContainedUnexpectedValue, 
entry, toString());
+                               throw error(MSG_arrayContainedUnexpectedValue, 
r(entry), r(value()));
                return returns();
        }
 
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
index eb6d7fd2af..1e148650fd 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentCollectionAssertion.java
@@ -190,7 +190,7 @@ public class FluentCollectionAssertion<E,R> extends 
FluentObjectAssertion<Collec
                        return returns();
                value().forEach(x -> {
                        if (! test.test(x))
-                               throw 
error(MSG_collectionDidNotContainTestedValue, value());
+                               throw 
error(MSG_collectionDidNotContainTestedValue, r(value()));
                });
                return returns();
        }
@@ -208,7 +208,7 @@ public class FluentCollectionAssertion<E,R> extends 
FluentObjectAssertion<Collec
                for (var v : value())
                        if (test.test(v))
                                return returns();
-               throw error(MSG_collectionDidNotContainTestedValue, value());
+               throw error(MSG_collectionDidNotContainTestedValue, r(value()));
        }
 
        /**
@@ -222,7 +222,7 @@ public class FluentCollectionAssertion<E,R> extends 
FluentObjectAssertion<Collec
                for (var v : value())
                        if (eq(v, entry))
                                return returns();
-               throw error(MSG_collectionDidNotContainExpectedValue, entry, 
value());
+               throw error(MSG_collectionDidNotContainExpectedValue, r(entry), 
r(value()));
        }
 
        /**
@@ -247,7 +247,7 @@ public class FluentCollectionAssertion<E,R> extends 
FluentObjectAssertion<Collec
        public R isNotContains(E entry) throws AssertionError {
                value().forEach(x -> {
                        if (eq(x, entry))
-                               throw 
error(MSG_collectionContainedUnexpectedValue, entry, value());
+                               throw 
error(MSG_collectionContainedUnexpectedValue, r(entry), r(value()));
                });
                return returns();
        }
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
index 8fc283da68..70e547cd30 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentComparableAssertion.java
@@ -17,6 +17,7 @@
 package org.apache.juneau.assertions;
 
 import static org.apache.juneau.common.utils.AssertionUtils.*;
+import static org.apache.juneau.common.utils.Utils.*;
 
 import java.io.*;
 import java.util.function.*;
@@ -175,7 +176,7 @@ public class FluentComparableAssertion<T extends 
Comparable,R> extends FluentObj
        public R isGt(Comparable value) throws AssertionError {
                assertArgNotNull("value", value);
                if (value().compareTo(value) <= 0)
-                       throw error(MSG_valueWasNotGreaterThanExpected, value, 
value());
+                       throw error(MSG_valueWasNotGreaterThanExpected, 
r(value), r(value()));
                return returns();
        }
 
@@ -190,7 +191,7 @@ public class FluentComparableAssertion<T extends 
Comparable,R> extends FluentObj
        public R isGte(Comparable value) throws AssertionError {
                assertArgNotNull("value", value);
                if (value().compareTo(value) < 0)
-                       throw error(MSG_valueWasNotGreaterOrEqualsToExpected, 
value, value());
+                       throw error(MSG_valueWasNotGreaterOrEqualsToExpected, 
r(value), r(value()));
                return returns();
        }
 
@@ -205,7 +206,7 @@ public class FluentComparableAssertion<T extends 
Comparable,R> extends FluentObj
        public R isLt(Comparable value) throws AssertionError {
                assertArgNotNull("value", value);
                if (value().compareTo(value) >= 0)
-                       throw error(MSG_valueWasNotLessThanExpected, value, 
value());
+                       throw error(MSG_valueWasNotLessThanExpected, r(value), 
r(value()));
                return returns();
        }
 
@@ -220,7 +221,7 @@ public class FluentComparableAssertion<T extends 
Comparable,R> extends FluentObj
        public R isLte(Comparable value) throws AssertionError {
                assertArgNotNull("value", value);
                if (value().compareTo(value) > 0)
-                       throw error(MSG_valueWasNotLessOrEqualsToExpected, 
value, value());
+                       throw error(MSG_valueWasNotLessOrEqualsToExpected, 
r(value), r(value()));
                return returns();
        }
 
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
index 2ec60afbeb..086c915db9 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentObjectAssertion.java
@@ -298,7 +298,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
                if (this.value == value)
                        return returns();
                if (! equals(orElse(null), value))
-                       throw error(MSG_unexpectedValue, value, this.value);
+                       throw error(MSG_unexpectedValue, r(value), 
r(this.value));
                return returns();
        }
 
@@ -314,7 +314,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
                for (var v : values)
                        if (equals(orElse(null), v))
                                return returns();
-               throw error(MSG_expectedValueNotFound, values, value);
+               throw error(MSG_expectedValueNotFound, r(values), r(value));
        }
 
        /**
@@ -375,7 +375,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
         */
        public R isNot(T value) throws AssertionError {
                if (equals(orElse(null), value))
-                       throw error(MSG_unexpectedValueDidNotExpect, value, 
orElse(null));
+                       throw error(MSG_unexpectedValueDidNotExpect, r(value), 
r(orElse(null)));
                return returns();
        }
 
@@ -390,7 +390,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
        public final R isNotAny(T...values) throws AssertionError {
                for (var v : values)
                        if (equals(orElse(null), v))
-                               throw error(MSG_unexpectedValueFound, v, value);
+                               throw error(MSG_unexpectedValueFound, r(v), 
r(value));
                return returns();
        }
 
@@ -434,7 +434,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
        public R isSame(T value) throws AssertionError {
                if (this.value == value)
                        return returns();
-               throw error(MSG_notTheSameValue, value, identity(value), 
this.value, identity(this.value));
+               throw error(MSG_notTheSameValue, r(value), identity(value), 
r(this.value), identity(this.value));
        }
 
        /**
@@ -631,7 +631,7 @@ public class FluentObjectAssertion<T,R> extends 
FluentAssertion<R> {
         * @return The inner value as a string, or <jk>null</jk> if the value 
was null.
         */
        protected String valueAsString() {
-               return s(value);
+               return readable(value);
        }
 
        /**
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
index bd45192637..d95fb08110 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentPrimitiveArrayAssertion.java
@@ -207,7 +207,7 @@ public class FluentPrimitiveArrayAssertion<E,T,R> extends 
FluentObjectAssertion<
 
        @Override /* Overridden from FluentBaseAssertion */
        public FluentStringAssertion<R> asString() {
-               return new FluentStringAssertion<>(this, toString(), returns());
+               return new FluentStringAssertion<>(this, valueIsNull() ? null : 
r(value()), returns());
        }
 
        @Override /* Overridden from FluentObjectAssertion */
@@ -260,7 +260,7 @@ public class FluentPrimitiveArrayAssertion<E,T,R> extends 
FluentObjectAssertion<
                for (int i = 0, j = length2(); i < j; i++)
                        if (test.test(at(i)))
                                return returns();
-               throw error(MSG_arrayDidntContainAnyMatchingValue, value());
+               throw error(MSG_arrayDidntContainAnyMatchingValue, r(value()));
        }
 
        /**
@@ -274,7 +274,7 @@ public class FluentPrimitiveArrayAssertion<E,T,R> extends 
FluentObjectAssertion<
                for (int i = 0, j = length2(); i < j; i++)
                        if (eq(at(i), entry))
                                return returns();
-               throw error(MSG_arrayDidNotContainExpectedValue, entry, 
value());
+               throw error(MSG_arrayDidNotContainExpectedValue, r(entry), 
r(value()));
        }
 
        /**
@@ -313,7 +313,7 @@ public class FluentPrimitiveArrayAssertion<E,T,R> extends 
FluentObjectAssertion<
        public R isNotContains(E entry) throws AssertionError {
                for (var i = 0; i < length2(); i++)
                        if (eq(at(i), entry))
-                               throw error(MSG_arrayContainedUnexpectedValue, 
entry, value());
+                               throw error(MSG_arrayContainedUnexpectedValue, 
r(entry), r(value()));
                return returns();
        }
 
diff --git 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
index 0688e5f90a..76e37863ff 100644
--- 
a/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
+++ 
b/juneau-core/juneau-assertions/src/main/java/org/apache/juneau/assertions/FluentThrowableAssertion.java
@@ -190,7 +190,7 @@ public class FluentThrowableAssertion<T extends 
Throwable,R> extends FluentObjec
                var t = map(Throwable::getCause).orElse(null);
                if (t == null || type.isInstance(t))
                        return new FluentThrowableAssertion<>(this, 
type.cast(t), returns());
-               throw error(MSG_causedByExceptionNotExpectedType, type, 
t.getClass());
+               throw error(MSG_causedByExceptionNotExpectedType, cn(type), 
cn(t.getClass()));
        }
 
        /**
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringFormat.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringFormat.java
index 9cefec0cd9..dc22dfa476 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringFormat.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringFormat.java
@@ -95,19 +95,20 @@ import org.apache.juneau.common.collections.*;
  */
 public final class StringFormat {
 
-       private static final Cache<String,StringFormat> CACHE = 
Cache.of(String.class, StringFormat.class).maxSize(1000).weak().build();
+       private static final CacheMode CACHE_MODE = 
CacheMode.parse(System.getProperty("juneau.StringFormat.caching", "FULL"));
 
-       private static final Cache2<Locale,String,MessageFormat> 
MESSAGE_FORMAT_CACHE = Cache2.of(Locale.class, String.class, 
MessageFormat.class).maxSize(100).threadLocal().weak()
+       private static final Cache<String,StringFormat> CACHE = 
Cache.of(String.class, 
StringFormat.class).maxSize(1000).cacheMode(CACHE_MODE).build();
+
+       private static final Cache2<Locale,String,MessageFormat> 
MESSAGE_FORMAT_CACHE = Cache2.of(Locale.class, String.class, 
MessageFormat.class).maxSize(100).threadLocal().cacheMode(CACHE_MODE)
                .supplier((locale, content) -> new MessageFormat(content, 
locale)).build();
 
-       private static final Cache<Locale,NumberFormat> NUMBER_FORMAT_CACHE = 
Cache.of(Locale.class, 
NumberFormat.class).maxSize(50).threadLocal().weak().supplier(NumberFormat::getInstance).build();
+       private static final Cache<Locale,NumberFormat> NUMBER_FORMAT_CACHE = 
Cache.of(Locale.class, 
NumberFormat.class).maxSize(50).threadLocal().cacheMode(CACHE_MODE).supplier(NumberFormat::getInstance).build();
 
-       private static final Cache<Locale,DateFormat> DATE_FORMAT_CACHE = 
Cache.of(Locale.class, DateFormat.class).maxSize(50).threadLocal().weak()
+       private static final Cache<Locale,DateFormat> DATE_FORMAT_CACHE = 
Cache.of(Locale.class, 
DateFormat.class).maxSize(50).threadLocal().cacheMode(CACHE_MODE)
                .supplier(locale -> 
DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.SHORT, 
locale)).build();
 
        private static final AsciiSet PRINTF_CONVERSION_CHARS = 
AsciiSet.of("bBhHsScCdoxXeEfgGaAtTn%");
        private static final AsciiSet PRINTF_FORMAT_CHARS = AsciiSet.of("-+ 
0(#.*$");
-       private static final AsciiSet FORMAT_CHARS = AsciiSet.of("%{");
 
        /**
         * Formats a pattern string with the given arguments using the default 
locale.
@@ -146,33 +147,6 @@ public final class StringFormat {
                return of(pattern).format(locale, args);
        }
 
-       /**
-        * Checks if a pattern contains any format specifiers.
-        *
-        * <p>
-        * Returns <jk>true</jk> if the pattern contains any of the following 
characters:
-        * <ul>
-        *   <li><js>'%'</js> - Printf-style format specifier</li>
-        *   <li><js>'{'</js> - MessageFormat-style placeholder</li>
-        *   <li><js>'''</js> - MessageFormat quote</li>
-        * </ul>
-        *
-        * <p>
-        * Uses {@link AsciiSet} for efficient single-pass scanning of the 
string.
-        *
-        * @param pattern The pattern to check.
-        * @return <jk>true</jk> if the pattern contains format specifiers, 
<jk>false</jk> otherwise.
-        */
-       private static boolean hasArgs(String pattern) {
-               if (pattern == null || pattern.isEmpty())
-                       return false;
-               for (var i = 0; i < pattern.length(); i++) {
-                       if (FORMAT_CHARS.contains(pattern.charAt(i)))
-                               return true;
-               }
-               return false;
-       }
-
        /**
         * Base class for format tokens.
         */
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringUtils.java
index b296307fbd..e0fa1eb8b2 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/utils/StringUtils.java
@@ -41,8 +41,6 @@ import java.util.regex.*;
 import java.util.stream.*;
 import java.util.zip.*;
 
-import org.apache.juneau.common.collections.*;
-
 /**
  * Reusable string utility methods.
  */
@@ -94,19 +92,6 @@ public class StringUtils {
         */
        public static final String WHITESPACE_CHARS = " \t\n\r\f\u000B";
 
-       /**
-        * Thread-local cache of MessageFormat objects for improved performance.
-        *
-        * <p>MessageFormat objects are not thread-safe, so we use a 
ThreadLocal cache
-        * to ensure each thread has its own set of cached formatters. This 
avoids:
-        * <ul>
-        *   <li>Repeated parsing of the same patterns</li>
-        *   <li>Thread synchronization overhead</li>
-        *   <li>Object allocation for frequently used patterns</li>
-        * </ul>
-        */
-       private static final Cache<String,MessageFormat> MESSAGE_FORMAT_CACHE = 
Cache.of(String.class, MessageFormat.class).maxSize(100).threadLocal().build();
-
        private static final AsciiSet numberChars = 
AsciiSet.of("-xX.+-#pP0123456789abcdefABCDEF");
 
        private static final AsciiSet firstNumberChars = 
AsciiSet.of("+-.#0123456789");
@@ -723,52 +708,6 @@ public class StringUtils {
 
        }
 
-       /**
-        * Similar to {@link MessageFormat#format(String, Object...)} except 
allows you to specify POJO arguments.
-        *
-        * <p>This method uses a thread-local cache of {@link MessageFormat} 
objects for improved performance
-        * when the same patterns are used repeatedly. The cache is limited to 
100 entries per thread to prevent
-        * unbounded growth.
-        *
-        * <p>For arguments with format types (e.g., {@code {0,number,#.##}}), 
the original argument is preserved
-        * to allow proper formatting. For simple placeholders (e.g., {@code 
{0}}), arguments are converted to
-        * readable strings using {@link #convertToReadable(Object)}.
-        *
-        * <p>
-        * Supports standard MessageFormat placeholders: <js>"{0}"</js>, 
<js>"{1,number}"</js>, <js>"{2,date}"</js>, etc.
-        * Also supports un-numbered placeholders: <js>"{}"</js> - Sequential 
placeholders that are automatically numbered.
-        * Note: For un-numbered placeholders, use {@link #format(String, 
Object...)} instead, as this method uses
-        * standard {@link MessageFormat} which requires explicit indices.
-        *
-        * @param pattern The string pattern.
-        * @param args The arguments.
-        * @return The formatted string.
-        */
-       public static String mformat(String pattern, Object...args) {
-               if (args == null || args.length == 0)
-                       return pattern;
-
-               var c = countChars(pattern, '\'');
-               if (c % 2 != 0)
-                       throw new AssertionError("Dangling single quote found 
in pattern: " + pattern);
-
-               // Get or create a cached MessageFormat for this pattern 
(thread-safe via thread-local cache)
-               var mf = MESSAGE_FORMAT_CACHE.get(pattern, () -> new 
MessageFormat(pattern));
-
-               // Determine which arguments have format types and need to 
preserve their original type
-               var formats = mf.getFormatsByArgumentIndex();
-
-               var args2 = new Object[args.length];
-               for (var i = 0; i < args.length; i++) {
-                       // If there's a Format specified for this index, keep 
the original argument
-                       // Otherwise, convert to readable string for better 
output
-                       var hasFormat = i < formats.length && nn(formats[i]);
-                       args2[i] = hasFormat ? args[i] : 
convertToReadable(args[i]);
-               }
-
-               return mf.format(args2);
-       }
-
        /**
         * Formats a string using printf-style and/or MessageFormat-style 
format specifiers.
         *
@@ -6619,40 +6558,6 @@ public class StringUtils {
                return sb;
        }
 
-       /**
-        * Converts an array to a List, handling both primitive and object 
arrays.
-        *
-        * @param array The array to convert.
-        * @return A List containing the array elements.
-        */
-       private static List<Object> arrayAsList(Object array) {
-               if (array.getClass().getComponentType().isPrimitive()) {
-                       var l = new ArrayList<>(Array.getLength(array));
-                       for (var i = 0; i < Array.getLength(array); i++)
-                               l.add(Array.get(array, i));
-                       return l;
-               }
-               return l((Object[])array);
-       }
-
-       /**
-        * Converts an object to a readable string representation for 
formatting.
-        *
-        * @param o The object to convert.
-        * @return A readable string representation of the object.
-        */
-       private static String convertToReadable(Object o) {
-               if (o == null)
-                       return null;
-               if (o instanceof Class<?> o2)
-                       return o2.getName();
-               if (o instanceof Method o2)
-                       return o2.getName();
-               if (isArray(o))
-                       return 
arrayAsList(o).stream().map(StringUtils::convertToReadable).collect(Collectors.joining(",
 ", "[", "]"));
-               return o.toString();
-       }
-
        /**
         * Finds the first non-whitespace, non-comment character in a string.
         *
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/AnyAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/AnyAssertion_Test.java
index bc616ac2c6..691ea1296f 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/AnyAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/AnyAssertion_Test.java
@@ -178,7 +178,7 @@ class AnyAssertion_Test extends TestBase {
        @Test void bb08_asByteArray() {
                byte[] x1 = {1}, nil = null;
                var x2 = "";
-               test(x1).asByteArray().isString("[1]");
+               test(x1).asByteArray().isString("01");
                test(nil).asByteArray().isNull();
                
assertThrown(()->test(x2).asByteArray()).asMessage().asOneLine().is("Object was 
not type 'byte[]'.  Actual='java.lang.String'.");
        }
@@ -240,7 +240,7 @@ class AnyAssertion_Test extends TestBase {
                var x1 = date("2000-06-01T12:34:56Z");
                var nil = n(Date.class);
                var x2 = "";
-               test(x1).asDate().asString().isMatches("*2000");
+               test(x1).asDate().asString().isMatches("*2000*");
                test(nil).asDate().isNull();
                
assertThrown(()->test(x2).asDate()).asMessage().asOneLine().is("Object was not 
type 'java.util.Date'.  Actual='java.lang.String'.");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
index 2c15681858..e04d273ce7 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ArrayAssertion_Test.java
@@ -68,7 +68,7 @@ public class ArrayAssertion_Test extends TestBase {
        @Test void ba01a_asString() {
                var x = a(1,2);
                var nil = na(Integer.class);
-               test(x).asString().is("[1, 2]");
+               test(x).asString().is("[1,2]");
                test(nil).asString().isNull();
        }
 
@@ -179,16 +179,16 @@ public class ArrayAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x1b)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[null, 1, 3]'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(nil).is(x1b)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[null, 1, 3]'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x1b)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[null,1,3]'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(nil).is(x1b)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[null,1,3]'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                var x1 = a(null,1,2);
                test(x1).is(x->x.length==3);
                
assertThrown(()->test(x1).is(x->x.length==2)).asMessage().asOneLine().is("Unexpected
 value: '[null,1,2]'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[null, 1, 2]'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[null,1,2]'.");
        }
 
        @Test void ca05_isNot() {
@@ -199,7 +199,7 @@ public class ArrayAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[null, 1, 2]'.  Actual='[null, 1, 2]'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[null,1,2]'.  Actual='[null,1,2]'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
@@ -209,9 +209,9 @@ public class ArrayAssertion_Test extends TestBase {
                var x2 = a(null,1,3);
                var nil = na(Integer.class);
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[null, 1, 3]]'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[null, 1, 3]]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[null,1,3]]'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[null,1,3]]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -222,7 +222,7 @@ public class ArrayAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[null, 1, 2]'.  Actual='[null, 1, 2]'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[null,1,2]'.  Actual='[null,1,2]'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -232,9 +232,9 @@ public class ArrayAssertion_Test extends TestBase {
                var nil = na(Integer.class);
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[null, 1, 2](Integer[]@*)'.  Actual='[null, 1, 
2](Integer[]@*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[null, 1, 2](Integer[]@*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[null, 1, 2](Integer[]@*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[null,1,2](Integer[]@*)'.  
Actual='[null,1,2](Integer[]@*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[null,1,2](Integer[]@*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[null,1,2](Integer[]@*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -297,10 +297,10 @@ public class ArrayAssertion_Test extends TestBase {
        @Test void ca14_isString() {
                var x = a(null,1,2);
                var nil = na(Integer.class);
-               test(x).isString("[null, 1, 2]");
+               test(x).isString("[null,1,2]");
                test(nil).isString(null);
-               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[null, 1, 2]'.");
+               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[null,1,2]'.");
                
assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -329,7 +329,7 @@ public class ArrayAssertion_Test extends TestBase {
                var nil = na(Integer.class);
                test(x1).isAny(x -> x .equals(3));
                test(x1).isAny(eq(3));
-               assertThrown(()->test(x1).isAny(x -> 
x.equals(4))).asMessage().asOneLine().is("Array did not contain any matching 
value.  Value='[2, 3, 1]'.");
+               assertThrown(()->test(x1).isAny(x -> 
x.equals(4))).asMessage().asOneLine().is("Array did not contain any matching 
value.  Value='[2,3,1]'.");
                assertThrows(IllegalArgumentException.class, 
()->test(x1).isAny((Predicate<Integer>)null), "Argument 'test' cannot be 
null.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isAny(x->true), "Value was null.");
        }
@@ -367,7 +367,7 @@ public class ArrayAssertion_Test extends TestBase {
                var nil = na(Integer.class);
                test(x1).isContains(null);
                test(x1).isContains(1);
-               
assertThrown(()->test(x1).isContains(3)).asMessage().asOneLine().is("Array did 
not contain expected value.  Expect='3'.  Actual='[null, 1, 2]'.");
+               
assertThrown(()->test(x1).isContains(3)).asMessage().asOneLine().is("Array did 
not contain expected value.  Expect='3'.  Actual='[null,1,2]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isContains(3), "Value was null.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isContains(null), "Value was null.");
        }
@@ -376,8 +376,8 @@ public class ArrayAssertion_Test extends TestBase {
                var x1 = a(null,1,2);
                var nil = na(Integer.class);
                test(x1).isNotContains(3);
-               
assertThrown(()->test(x1).isNotContains(1)).asMessage().asOneLine().is("Array 
contained unexpected value.  Unexpected='1'.  Actual='[null, 1, 2]'.");
-               
assertThrown(()->test(x1).isNotContains(null)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='null'.  Actual='[null, 1, 2]'.");
+               
assertThrown(()->test(x1).isNotContains(1)).asMessage().asOneLine().is("Array 
contained unexpected value.  Unexpected='1'.  Actual='[null,1,2]'.");
+               
assertThrown(()->test(x1).isNotContains(null)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='null'.  Actual='[null,1,2]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isNotContains(3), "Value was null.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/BeanListAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/BeanListAssertion_Test.java
index 8006d7fcf4..4410f95b07 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/BeanListAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/BeanListAssertion_Test.java
@@ -140,14 +140,14 @@ class BeanListAssertion_Test extends TestBase {
        @Test void bc03a_sorted() {
                var x = l(A2,A1);
                var nil = (List<A>)null;
-               test(x).asSorted().isString("[(a=1,b=2), (a=3,b=4)]");
+               test(x).asSorted().isString("[(a=1,b=2),(a=3,b=4)]");
                test(nil).asSorted().isNull();
        }
 
        @Test void bc03b_sorted_wComparator() {
                var x = l(A2,A1);
                var nil = (List<A>)null;
-               test(x).asSorted(null).isString("[(a=1,b=2), (a=3,b=4)]");
+               test(x).asSorted(null).isString("[(a=1,b=2),(a=3,b=4)]");
                test(nil).asSorted(null).isNull();
        }
 
@@ -202,16 +202,16 @@ class BeanListAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[(a=1,b=2), (a=5,b=6)]'.  Actual='[(a=1,b=2), (a=3,b=4)]'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[(a=1,b=2), (a=3,b=4)]'.");
-               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[(a=1,b=2), (a=5,b=6)]'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[(a=1,b=2),(a=5,b=6)]'.  Actual='[(a=1,b=2),(a=3,b=4)]'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[(a=1,b=2),(a=3,b=4)]'.");
+               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[(a=1,b=2),(a=5,b=6)]'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                var x1 = l(A1,A2);
                test(x1).is(x->x.size()==2);
                
assertThrown(()->test(x1).is(x->x.size()==3)).asMessage().asOneLine().is("Unexpected
 value: '[(a=1,b=2),(a=3,b=4)]'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[(a=1,b=2), (a=3,b=4)]'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[(a=1,b=2),(a=3,b=4)]'.");
        }
 
        @Test void ca05_isNot() {
@@ -222,7 +222,7 @@ class BeanListAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[(a=1,b=2), (a=3,b=4)]'.  Actual='[(a=1,b=2), 
(a=3,b=4)]'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[(a=1,b=2),(a=3,b=4)]'.  
Actual='[(a=1,b=2),(a=3,b=4)]'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
@@ -232,9 +232,9 @@ class BeanListAssertion_Test extends TestBase {
                var x2 = l(A1,A3);
                var nil = (List<A>)null;
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[(a=1,b=2), (a=5,b=6)]]'.  Actual='[(a=1,b=2), 
(a=3,b=4)]'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[(a=1,b=2), (a=3,b=4)]'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[(a=1,b=2), (a=5,b=6)]]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[(a=1,b=2),(a=5,b=6)]]'.  
Actual='[(a=1,b=2),(a=3,b=4)]'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[(a=1,b=2),(a=3,b=4)]'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[(a=1,b=2),(a=5,b=6)]]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -245,7 +245,7 @@ class BeanListAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[(a=1,b=2), (a=3,b=4)]'.  Actual='[(a=1,b=2), 
(a=3,b=4)]'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[(a=1,b=2),(a=3,b=4)]'.  
Actual='[(a=1,b=2),(a=3,b=4)]'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -255,9 +255,9 @@ class BeanListAssertion_Test extends TestBase {
                var nil = (List<A>)null;
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[(a=1,b=2), (a=3,b=4)](*)'.  Actual='[(a=1,b=2), 
(a=3,b=4)](*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[(a=1,b=2), (a=3,b=4)](*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[(a=1,b=2), (a=3,b=4)](*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[(a=1,b=2),(a=3,b=4)](*)'.  
Actual='[(a=1,b=2),(a=3,b=4)](*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[(a=1,b=2),(a=3,b=4)](*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[(a=1,b=2),(a=3,b=4)](*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -318,10 +318,10 @@ class BeanListAssertion_Test extends TestBase {
        @Test void ca14_isString() {
                var x = l(A1,A2);
                var nil = (List<A>)null;
-               test(x).isString("[(a=1,b=2), (a=3,b=4)]");
+               test(x).isString("[(a=1,b=2),(a=3,b=4)]");
                test(nil).isString(null);
-               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[(a=1,b=2), (a=3,b=4)]'.");
-               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[(a=1,b=2), (a=3,b=4)]'.");
+               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[(a=1,b=2),(a=3,b=4)]'.");
+               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[(a=1,b=2),(a=3,b=4)]'.");
                
assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
index ee002cff6e..b91641845c 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ByteArrayAssertion_Test.java
@@ -157,16 +157,16 @@ class ByteArrayAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[3, 4]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3, 4]'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='0304'.  Actual='0102'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='0102'.");
+               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='0304'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                byte[] x1 = {1,2};
                test(x1).is(x->x.length==2);
                
assertThrown(()->test(x1).is(x->x.length==3)).asMessage().asOneLine().is("Unexpected
 value: '0102'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1, 2]'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='0102'.");
        }
 
        @Test void ca05_isNot() {
@@ -174,16 +174,16 @@ class ByteArrayAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='0102'.  Actual='0102'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
        @Test void ca06_isAny() {
                byte[] x1 = {1,2}, x1a = {1,2}, x2 = {2,3}, nil = null;
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[2, 3]]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[2, 3]]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[0203]'.  Actual='0102'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='0102'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[0203]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -191,7 +191,7 @@ class ByteArrayAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='0102'.  Actual='0102'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -199,9 +199,9 @@ class ByteArrayAssertion_Test extends TestBase {
                byte[] x1 = {1,2}, x1a = {1,2}, nil = null;
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](byte[]@*)'.  Actual='[1, 2](byte[]@*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](byte[]@*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[1, 2](byte[]@*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='0102(byte[]@*)'.  Actual='0102(byte[]@*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='0102(byte[]@*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='0102(byte[]@*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -285,8 +285,8 @@ class ByteArrayAssertion_Test extends TestBase {
        @Test void cb03_contains() {
                byte[] x1 = {1,2}, nil = null;
                test(x1).isContains((byte)1);
-               
assertThrown(()->test(x1).isContains((byte)3)).asMessage().asOneLine().is("Array
 did not contain expected value.  Expect='3'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).isContains(null)).asMessage().asOneLine().is("Array 
did not contain expected value.  Expect='null'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isContains((byte)3)).asMessage().asOneLine().is("Array
 did not contain expected value.  Expect='3'.  Actual='0102'.");
+               
assertThrown(()->test(x1).isContains(null)).asMessage().asOneLine().is("Array 
did not contain expected value.  Expect='null'.  Actual='0102'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isContains((byte)3), "Value was null.");
        }
 
@@ -294,7 +294,7 @@ class ByteArrayAssertion_Test extends TestBase {
                byte[] x1 = {1,2}, nil = null;
                test(x1).isNotContains((byte)3);
                test(x1).isNotContains(null);
-               
assertThrown(()->test(x1).isNotContains((byte)1)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='1'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNotContains((byte)1)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='1'.  Actual='0102'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isNotContains((byte)3), "Value was null.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
index f7cde14f94..c226d3fdd0 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/CollectionAssertion_Test.java
@@ -143,16 +143,16 @@ class CollectionAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[3, 4]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3, 4]'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[3,4]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1,2]'.");
+               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3,4]'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                var x1 = l(1,2);
                test(x1).is(x->x.size()==2);
                
assertThrown(()->test(x1).is(x->x.size()==3)).asMessage().asOneLine().is("Unexpected
 value: '[1,2]'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1, 2]'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1,2]'.");
        }
 
        @Test void ca05_isNot() {
@@ -163,7 +163,7 @@ class CollectionAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[1,2]'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
@@ -173,9 +173,9 @@ class CollectionAssertion_Test extends TestBase {
                var x2 = l(3,4);
                var nil = listn(Integer.class);
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[3, 4]]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[3, 4]]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[3,4]]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[3,4]]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -186,7 +186,7 @@ class CollectionAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[1,2]'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -196,9 +196,9 @@ class CollectionAssertion_Test extends TestBase {
                var nil = listn(Integer.class);
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](*)'.  Actual='[1, 2](*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[1, 2](*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1,2](*)'.  Actual='[1,2](*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1,2](*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[1,2](*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -260,10 +260,10 @@ class CollectionAssertion_Test extends TestBase {
        @Test void ca14_isString() {
                var x = l(1,2);
                var nil = listn(Integer.class);
-               test(x).isString("[1, 2]");
+               test(x).isString("[1,2]");
                test(nil).isString(null);
-               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -299,7 +299,7 @@ class CollectionAssertion_Test extends TestBase {
                var x = l("a","b");
                var nil = listn(String.class);
                test(x).isContains("a");
-               
assertThrown(()->test(x).isContains("z")).asMessage().asOneLine().is("Collection
 did not contain expected value.  Expect='z'.  Value='[a, b]'.");
+               
assertThrown(()->test(x).isContains("z")).asMessage().asOneLine().is("Collection
 did not contain expected value.  Expect='z'.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isContains("z"), "Value was null.");
        }
 
@@ -307,7 +307,7 @@ class CollectionAssertion_Test extends TestBase {
                var x = l("a","b");
                var nil = listn(String.class);
                test(x).isNotContains("z");
-               
assertThrown(()->test(x).isNotContains("a")).asMessage().asOneLine().is("Collection
 contained unexpected value.  Unexpected='a'.  Value='[a, b]'.");
+               
assertThrown(()->test(x).isNotContains("a")).asMessage().asOneLine().is("Collection
 contained unexpected value.  Unexpected='a'.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isNotContains("z"), "Value was null.");
        }
 
@@ -316,7 +316,7 @@ class CollectionAssertion_Test extends TestBase {
                var nil = listn(String.class);
                test(x1).isAny(x->x.equals("a"));
                test(x1).isAny((Predicate<String>)null);
-               
assertThrown(()->test(x1).isAny(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a, b]'.");
+               
assertThrown(()->test(x1).isAny(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isAny(x->x.equals("z")), "Value was null.");
        }
 
@@ -325,7 +325,7 @@ class CollectionAssertion_Test extends TestBase {
                var nil = listn(String.class);
                test(x1).isAll(x->x!=null);
                test(x1).isAll(null);
-               
assertThrown(()->test(x1).isAll(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a, b]'.");
+               
assertThrown(()->test(x1).isAll(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isAll(x->x.equals("z")), "Value was null.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/DateAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/DateAssertion_Test.java
index 28f1ab95c1..c867ba1188 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/DateAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/DateAssertion_Test.java
@@ -72,7 +72,7 @@ class DateAssertion_Test extends TestBase {
        @Test void ba01a_asString() {
                var x = MID1;
                var nil = n(Date.class);
-               test(x).asString().isMatches("*2000");
+               test(x).asString().isMatches("*2000*");
                test(nil).asString().isNull();
        }
 
@@ -80,7 +80,7 @@ class DateAssertion_Test extends TestBase {
                var x = MID1;
                var nil = n(Date.class);
                var s = Json5Serializer.DEFAULT;
-               test(x).asString(s).isMatches("'2000-*'");
+               test(x).asString(s).isMatches("'*2000-*'");
                test(nil).asString(s).is("null");
        }
 
@@ -92,14 +92,14 @@ class DateAssertion_Test extends TestBase {
        @Test void ba02_asJson() {
                var x = MID1;
                var nil = n(Date.class);
-               test(x).asJson().isMatches("'2000-*'");
+               test(x).asJson().isMatches("'*2000-*'");
                test(nil).asJson().is("null");
        }
 
        @Test void ba03_asJsonSorted() {
                var x1 = MID1;
                var nil = n(Date.class);
-               test(x1).asJsonSorted().isMatches("'2000-*'");
+               test(x1).asJsonSorted().isMatches("'*2000-*'");
                test(nil).asJsonSorted().is("null");
        }
 
@@ -156,16 +156,16 @@ class DateAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().isMatches("Unexpected 
value.  Expect='*2010'.  Actual='*2000'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().isMatches("Unexpected
 value.  Expect='null'.  Actual='*2000'.");
-               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().isMatches("Unexpected
 value.  Expect='*2010'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().isMatches("Unexpected 
value.  Expect='*2010*'.  Actual='*2000*'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().isMatches("Unexpected
 value.  Expect='null'.  Actual='*2000*'.");
+               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().isMatches("Unexpected
 value.  Expect='*2010*'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                var x1 = MID1;
                test(x1).is(x->x!=null);
                
assertThrown(()->test(x1).is(x->x==null)).asMessage().asOneLine().isMatches("Unexpected
 value: '*2000*'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().isMatches("Value 
unexpectedly matched.  Value='*2000'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().isMatches("Value 
unexpectedly matched.  Value='*2000*'.");
        }
 
        @Test void ca05_isNot() {
@@ -176,7 +176,7 @@ class DateAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().isMatches("Unexpected
 value.  Did not expect='*2000'.  Actual='*2000'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().isMatches("Unexpected
 value.  Did not expect='*2000*'.  Actual='*2000*'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
@@ -186,9 +186,9 @@ class DateAssertion_Test extends TestBase {
                var x2 = MID2;
                var nil = n(Date.class);
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().isMatches("Expected
 value not found.  Expect='[*2010]'.  Actual='*2000'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().isMatches("Expected 
value not found.  Expect='[]'.  Actual='*2000'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().isMatches("Expected
 value not found.  Expect='[*2010]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().isMatches("Expected
 value not found.  Expect='[*2010*]'.  Actual='*2000*'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().isMatches("Expected 
value not found.  Expect='[]'.  Actual='*2000*'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().isMatches("Expected
 value not found.  Expect='[*2010*]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -199,7 +199,7 @@ class DateAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().isMatches("Unexpected
 value found.  Unexpected='*2000'.  Actual='*2000'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().isMatches("Unexpected
 value found.  Unexpected='*2000*'.  Actual='*2000*'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -209,9 +209,9 @@ class DateAssertion_Test extends TestBase {
                var nil = n(Date.class);
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='*2000(Date@*)'.  Actual='*2000(Date@*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='*2000(Date@*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='*2000(Date@*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='*2000*(Date@*)'.  Actual='*2000*(Date@*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='*2000*(Date@*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='*2000*(Date@*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -221,9 +221,9 @@ class DateAssertion_Test extends TestBase {
                var nil = n(Date.class);
                test(x1).isSameJsonAs(x1a);
                test(nil).isSameJsonAs(nil);
-               
assertThrown(()->test(x1a).isSameJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''2010*''.  Actual=''2000*''.");
-               
assertThrown(()->test(nil).isSameJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''2010*''.  Actual='null'.");
-               
assertThrown(()->test(x1).isSameJsonAs(nil)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect='null'.  Actual=''2000*''.");
+               
assertThrown(()->test(x1a).isSameJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''*2010*''.  Actual=''*2000*''.");
+               
assertThrown(()->test(nil).isSameJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''*2010*''.  Actual='null'.");
+               
assertThrown(()->test(x1).isSameJsonAs(nil)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect='null'.  Actual=''*2000*''.");
        }
 
        @Test void ca10_isSameSortedJsonAs() {
@@ -233,9 +233,9 @@ class DateAssertion_Test extends TestBase {
                var nil = n(Date.class);
                test(x1).isSameSortedJsonAs(x1a);
                test(nil).isSameSortedJsonAs(nil);
-               
assertThrown(()->test(x1a).isSameSortedJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''2010*''.  Actual=''2000*''.");
-               
assertThrown(()->test(nil).isSameSortedJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''2010*''.  Actual='null'.");
-               
assertThrown(()->test(x1).isSameSortedJsonAs(nil)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect='null'.  Actual=''2000*''.");
+               
assertThrown(()->test(x1a).isSameSortedJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''*2010*''.  Actual=''*2000*''.");
+               
assertThrown(()->test(nil).isSameSortedJsonAs(x2)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect=''*2010*''.  Actual='null'.");
+               
assertThrown(()->test(x1).isSameSortedJsonAs(nil)).asMessage().asOneLine().isMatches("Unexpected
 comparison.  Expect='null'.  Actual=''*2000*''.");
        }
 
        @Test void ca11_isSameSerializedAs() {
@@ -246,9 +246,9 @@ class DateAssertion_Test extends TestBase {
                var s = Json5Serializer.DEFAULT;
                test(x1).isSameSerializedAs(x1a, s);
                test(nil).isSameSerializedAs(nil, s);
-               assertThrown(()->test(x1a).isSameSerializedAs(x2, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  
Expect=''2010*''.  Actual=''2000*''.");
-               assertThrown(()->test(nil).isSameSerializedAs(x2, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  
Expect=''2010*''.  Actual='null'.");
-               assertThrown(()->test(x1).isSameSerializedAs(nil, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  Expect='null'.  
Actual=''2000*''.");
+               assertThrown(()->test(x1a).isSameSerializedAs(x2, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  
Expect=''*2010*''.  Actual=''*2000*''.");
+               assertThrown(()->test(nil).isSameSerializedAs(x2, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  
Expect=''*2010*''.  Actual='null'.");
+               assertThrown(()->test(x1).isSameSerializedAs(nil, 
s)).asMessage().asOneLine().isMatches("Unexpected comparison.  Expect='null'.  
Actual=''*2000*''.");
        }
 
        @Test void ca12_isType() {
@@ -274,10 +274,10 @@ class DateAssertion_Test extends TestBase {
        @Test void ca14_isString() {
                var x = MID1;
                var nil = n(Date.class);
-               test(x).isString(x.toString());
+               test(x).isString(r(x));
                test(nil).isString(null);
-               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='bad'.  Actual='*2000'.");
-               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='null'.  Actual='*2000'.");
+               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='bad'.  Actual='*2000*'.");
+               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='null'.  Actual='*2000*'.");
                
assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -285,8 +285,8 @@ class DateAssertion_Test extends TestBase {
                var x = MID1;
                var nil = n(Date.class);
                test(nil).isJson("null");
-               
assertThrown(()->test(x).isJson("bad")).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='bad'.  Actual=''2000*''.");
-               
assertThrown(()->test(x).isJson(null)).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='null'.  Actual=''2000*''.");
+               
assertThrown(()->test(x).isJson("bad")).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='bad'.  Actual=''*2000*''.");
+               
assertThrown(()->test(x).isJson(null)).asMessage().asOneLine().isMatches("String
 differed at position 0.  Expect='null'.  Actual=''*2000*''.");
                
assertThrown(()->test(nil).isJson("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -295,8 +295,8 @@ class DateAssertion_Test extends TestBase {
                var x2 = MID2;
                var nil = n(Date.class);
                test(x2).isGt(x1);
-               
assertThrown(()->test(x1).isGt(x1)).asMessage().asOneLine().isMatches("Value 
was not greater than expected.  Expect='*2000'.  Actual='*2000'.");
-               
assertThrown(()->test(x1).isGt(x2)).asMessage().asOneLine().isMatches("Value 
was not greater than expected.  Expect='*2010'.  Actual='*2000'.");
+               
assertThrown(()->test(x1).isGt(x1)).asMessage().asOneLine().isMatches("Value 
was not greater than expected.  Expect='*2000*'.  Actual='*2000*'.");
+               
assertThrown(()->test(x1).isGt(x2)).asMessage().asOneLine().isMatches("Value 
was not greater than expected.  Expect='*2010*'.  Actual='*2000*'.");
                assertThrows(IllegalArgumentException.class, 
()->test(x1).isGt(nil), "Argument 'value' cannot be null.");
                assertThrows(BasicAssertionError.class, ()->test(nil).isGt(x2), 
"Value was null.");
        }
@@ -307,7 +307,7 @@ class DateAssertion_Test extends TestBase {
                var nil = n(Date.class);
                test(x2).isGte(x1);
                test(x1).isGte(x1);
-               
assertThrown(()->test(x1).isGte(x2)).asMessage().asOneLine().isMatches("Value 
was not greater than or equals to expected.  Expect='*2010'.  Actual='*2000'.");
+               
assertThrown(()->test(x1).isGte(x2)).asMessage().asOneLine().isMatches("Value 
was not greater than or equals to expected.  Expect='*2010*'.  
Actual='*2000*'.");
                assertThrows(IllegalArgumentException.class, 
()->test(x1).isGte(nil), "Argument 'value' cannot be null.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isGte(x2), "Value was null.");
        }
@@ -317,8 +317,8 @@ class DateAssertion_Test extends TestBase {
                var x2 = MID2;
                var nil = n(Date.class);
                test(x1).isLt(x2);
-               
assertThrown(()->test(x1).isLt(x1)).asMessage().asOneLine().isMatches("Value 
was not less than expected.  Expect='*2000'.  Actual='*2000'.");
-               
assertThrown(()->test(x2).isLt(x1)).asMessage().asOneLine().isMatches("Value 
was not less than expected.  Expect='*2000'.  Actual='*2010'.");
+               
assertThrown(()->test(x1).isLt(x1)).asMessage().asOneLine().isMatches("Value 
was not less than expected.  Expect='*2000*'.  Actual='*2000*'.");
+               
assertThrown(()->test(x2).isLt(x1)).asMessage().asOneLine().isMatches("Value 
was not less than expected.  Expect='*2000*'.  Actual='*2010*'.");
                assertThrows(IllegalArgumentException.class, 
()->test(x2).isLt(nil), "Argument 'value' cannot be null.");
                assertThrows(BasicAssertionError.class, ()->test(nil).isLt(x1), 
"Value was null.");
        }
@@ -329,7 +329,7 @@ class DateAssertion_Test extends TestBase {
                var nil = n(Date.class);
                test(x1).isLte(x2);
                test(x1).isLte(x1);
-               
assertThrown(()->test(x2).isLte(x1)).asMessage().asOneLine().isMatches("Value 
was not less than or equals to expected.  Expect='*2000'.  Actual='*2010'.");
+               
assertThrown(()->test(x2).isLte(x1)).asMessage().asOneLine().isMatches("Value 
was not less than or equals to expected.  Expect='*2000*'.  Actual='*2010*'.");
                assertThrows(IllegalArgumentException.class, 
()->test(x2).isLte(nil), "Argument 'value' cannot be null.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isLte(x1), "Value was null.");
        }
@@ -343,7 +343,7 @@ class DateAssertion_Test extends TestBase {
                test(x1).isBetween(x1, x3);
                test(x2).isBetween(x1, x3);
                test(x3).isBetween(x1, x3);
-               assertThrown(()->test(x4).isBetween(x1, 
x3)).asMessage().asOneLine().isMatches("Value was not less than or equals to 
expected.  Expect='*2010'.  Actual='*2100'.");
+               assertThrown(()->test(x4).isBetween(x1, 
x3)).asMessage().asOneLine().isMatches("Value was not less than or equals to 
expected.  Expect='*2010*'.  Actual='*2100*'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isBetween(x1, x3), "Value was null.");
                assertThrows(IllegalArgumentException.class, 
()->test(x1).isBetween(nil, x3), "Argument 'lower' cannot be null.");
                assertThrown(()->test(x1).isBetween(x1, 
nil)).asMessage().asOneLine().is("Argument 'upper' cannot be null.");
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
index e3f9e133ae..9de4ef6410 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ListAssertion_Test.java
@@ -127,14 +127,14 @@ class ListAssertion_Test extends TestBase {
        @Test void bc03a_sorted() {
                var x = l(1,3,2);
                var nil = listn(Integer.class);
-               test(x).asSorted().isString("[1, 2, 3]");
+               test(x).asSorted().isString("[1,2,3]");
                test(nil).asSorted().isNull();
        }
 
        @Test void bc03b_sorted_wComparator() {
                var x = l(1,3,2);
                var nil = listn(Integer.class);
-               test(x).asSorted(null).isString("[1, 2, 3]");
+               test(x).asSorted(null).isString("[1,2,3]");
                test(nil).asSorted(null).isNull();
        }
 
@@ -171,16 +171,16 @@ class ListAssertion_Test extends TestBase {
                test(x1).is(x1);
                test(x1).is(x1a);
                test(nil).is(nil);
-               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[2, 3]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[2, 3]'.  Actual='null'.");
+               
assertThrown(()->test(x1).is(x2)).asMessage().asOneLine().is("Unexpected value. 
 Expect='[2,3]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1,2]'.");
+               
assertThrown(()->test(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[2,3]'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                var x1 = l(1,2);
                test(x1).is(x->x.size()==2);
                
assertThrown(()->test(x1).is(x->x.size()==3)).asMessage().asOneLine().is("Unexpected
 value: '[1,2]'.");
-               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1, 2]'.");
+               
assertThrown(()->test(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1,2]'.");
        }
 
        @Test void ca05_isNot() {
@@ -191,7 +191,7 @@ class ListAssertion_Test extends TestBase {
                test(x1).isNot(x2);
                test(x1).isNot(nil);
                test(nil).isNot(x1);
-               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='[1,2]'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected 
value.  Did not expect='null'.  Actual='null'.");
        }
 
@@ -201,9 +201,9 @@ class ListAssertion_Test extends TestBase {
                var x2 = l(3,4);
                var nil = listn(Integer.class);
                test(x1).isAny(x1a, x2);
-               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[3, 4]]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[3, 4]]'.  Actual='null'.");
+               
assertThrown(()->test(x1).isAny(x2)).asMessage().asOneLine().is("Expected value 
not found.  Expect='[[3,4]]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x1).isAny()).asMessage().asOneLine().is("Expected value 
not found.  Expect='[]'.  Actual='[1,2]'.");
+               
assertThrown(()->test(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[3,4]]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -214,7 +214,7 @@ class ListAssertion_Test extends TestBase {
                test(x1).isNotAny(x2);
                test(x1).isNotAny();
                test(nil).isNotAny(x2);
-               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected 
value found.  Unexpected='[1,2]'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -224,9 +224,9 @@ class ListAssertion_Test extends TestBase {
                var nil = listn(Integer.class);
                test(x1).isSame(x1);
                test(nil).isSame(nil);
-               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](*)'.  Actual='[1, 2](*)'.");
-               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1, 2](*)'.  Actual='null(null)'.");
-               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[1, 2](*)'.");
+               
assertThrown(()->test(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1,2](*)'.  Actual='[1,2](*)'.");
+               
assertThrown(()->test(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='[1,2](*)'.  Actual='null(null)'.");
+               
assertThrown(()->test(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not 
the same value.  Expect='null(null)'.  Actual='[1,2](*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -288,10 +288,10 @@ class ListAssertion_Test extends TestBase {
        @Test void ca14_isString() {
                var x = l(1,2);
                var nil = listn(Integer.class);
-               test(x).isString("[1, 2]");
+               test(x).isString("[1,2]");
                test(nil).isString(null);
-               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[1, 2]'.");
-               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[1, 2]'.");
+               
assertThrown(()->test(x).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='[1,2]'.");
+               
assertThrown(()->test(x).isString(null)).asMessage().asOneLine().is("String 
differed at position 0.  Expect='null'.  Actual='[1,2]'.");
                
assertThrown(()->test(nil).isString("bad")).asMessage().asOneLine().is("String 
differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -327,7 +327,7 @@ class ListAssertion_Test extends TestBase {
                var x = l("a","b");
                var nil = listn(String.class);
                test(x).isContains("a");
-               
assertThrown(()->test(x).isContains("z")).asMessage().asOneLine().is("Collection
 did not contain expected value.  Expect='z'.  Value='[a, b]'.");
+               
assertThrown(()->test(x).isContains("z")).asMessage().asOneLine().is("Collection
 did not contain expected value.  Expect='z'.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isContains("z"), "Value was null.");
        }
 
@@ -335,7 +335,7 @@ class ListAssertion_Test extends TestBase {
                var x = l("a","b");
                var nil = listn(String.class);
                test(x).isNotContains("z");
-               
assertThrown(()->test(x).isNotContains("a")).asMessage().asOneLine().is("Collection
 contained unexpected value.  Unexpected='a'.  Value='[a, b]'.");
+               
assertThrown(()->test(x).isNotContains("a")).asMessage().asOneLine().is("Collection
 contained unexpected value.  Unexpected='a'.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isNotContains("z"), "Value was null.");
        }
 
@@ -343,7 +343,7 @@ class ListAssertion_Test extends TestBase {
                var x1 = l("a","b");
                var nil = listn(String.class);
                test(x1).isAny(x->x.equals("a"));
-               
assertThrown(()->test(x1).isAny(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a, b]'.");
+               
assertThrown(()->test(x1).isAny(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isAny(x->x.equals("z")), "Value was null.");
        }
 
@@ -351,7 +351,7 @@ class ListAssertion_Test extends TestBase {
                var x1 = l("a","b");
                var nil = listn(String.class);
                test(x1).isAll(x->x!=null);
-               
assertThrown(()->test(x1).isAll(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a, b]'.");
+               
assertThrown(()->test(x1).isAll(x->x.equals("z"))).asMessage().asOneLine().is("Collection
 did not contain tested value.  Value='[a,b]'.");
                assertThrows(BasicAssertionError.class, 
()->test(nil).isAll(x->x.equals("z")), "Value was null.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/PrimitiveArrayAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/PrimitiveArrayAssertion_Test.java
index ee440e9289..07e0e9363b 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/PrimitiveArrayAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/PrimitiveArrayAssertion_Test.java
@@ -65,7 +65,7 @@ class PrimitiveArrayAssertion_Test extends TestBase {
 
        @Test void ba01a_asString() {
                byte[] x = {1}, nil = null;
-               byteArray(x).asString().is("[1]");
+               byteArray(x).asString().is("01");
                byteArray(nil).asString().isNull();
        }
 
@@ -139,16 +139,16 @@ class PrimitiveArrayAssertion_Test extends TestBase {
                intArray(x1).is(x1);
                intArray(x1).is(x1a);
                intArray(nil).is(nil);
-               
assertThrown(()->intArray(x1).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3, 4]'.  Actual='[1, 2]'.");
-               
assertThrown(()->intArray(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1, 2]'.");
-               
assertThrown(()->intArray(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3, 4]'.  Actual='null'.");
+               
assertThrown(()->intArray(x1).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3,4]'.  Actual='[1,2]'.");
+               
assertThrown(()->intArray(x1).is(nil)).asMessage().asOneLine().is("Unexpected 
value.  Expect='null'.  Actual='[1,2]'.");
+               
assertThrown(()->intArray(nil).is(x2)).asMessage().asOneLine().is("Unexpected 
value.  Expect='[3,4]'.  Actual='null'.");
        }
 
        @Test void ca04b_is_predicate() {
                byte[] x1 = {1,2};
                byteArray(x1).is(x->x.length==2);
                
assertThrown(()->byteArray(x1).is(x->x.length==3)).asMessage().asOneLine().is("Unexpected
 value: '0102'.");
-               
assertThrown(()->byteArray(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='[1, 2]'.");
+               
assertThrown(()->byteArray(x1).is(ne(x1))).asMessage().asOneLine().is("Value 
unexpectedly matched.  Value='0102'.");
        }
 
        @Test void ca05_isNot() {
@@ -156,16 +156,16 @@ class PrimitiveArrayAssertion_Test extends TestBase {
                byteArray(x1).isNot(x2);
                byteArray(x1).isNot(nil);
                byteArray(nil).isNot(x1);
-               
assertThrown(()->byteArray(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected
 value.  Did not expect='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->byteArray(x1).isNot(x1a)).asMessage().asOneLine().is("Unexpected
 value.  Did not expect='0102'.  Actual='0102'.");
                
assertThrown(()->byteArray(nil).isNot(nil)).asMessage().asOneLine().is("Unexpected
 value.  Did not expect='null'.  Actual='null'.");
        }
 
        @Test void ca06_isAny() {
                byte[] x1 = {1,2}, x1a = {1,2}, x2 = {2,3}, nil = null;
                byteArray(x1).isAny(x1a, x2);
-               
assertThrown(()->byteArray(x1).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[2, 3]]'.  Actual='[1, 2]'.");
-               
assertThrown(()->byteArray(x1).isAny()).asMessage().asOneLine().is("Expected 
value not found.  Expect='[]'.  Actual='[1, 2]'.");
-               
assertThrown(()->byteArray(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[[2, 3]]'.  Actual='null'.");
+               
assertThrown(()->byteArray(x1).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[0203]'.  Actual='0102'.");
+               
assertThrown(()->byteArray(x1).isAny()).asMessage().asOneLine().is("Expected 
value not found.  Expect='[]'.  Actual='0102'.");
+               
assertThrown(()->byteArray(nil).isAny(x2)).asMessage().asOneLine().is("Expected 
value not found.  Expect='[0203]'.  Actual='null'.");
        }
 
        @Test void ca07_isNotAny() {
@@ -173,7 +173,7 @@ class PrimitiveArrayAssertion_Test extends TestBase {
                byteArray(x1).isNotAny(x2);
                byteArray(x1).isNotAny();
                byteArray(nil).isNotAny(x2);
-               
assertThrown(()->byteArray(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='[1, 2]'.  Actual='[1, 2]'.");
+               
assertThrown(()->byteArray(x1).isNotAny(x1a)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='0102'.  Actual='0102'.");
                
assertThrown(()->byteArray(nil).isNotAny(nil)).asMessage().asOneLine().is("Unexpected
 value found.  Unexpected='null'.  Actual='null'.");
        }
 
@@ -181,9 +181,9 @@ class PrimitiveArrayAssertion_Test extends TestBase {
                byte[] x1 = {1,2}, x1a = {1,2}, nil = null;
                byteArray(x1).isSame(x1);
                byteArray(nil).isSame(nil);
-               
assertThrown(()->byteArray(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='[1, 2](byte[]@*)'.  Actual='[1, 2](byte[]@*)'.");
-               
assertThrown(()->byteArray(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='[1, 2](byte[]@*)'.  Actual='null(null)'.");
-               
assertThrown(()->byteArray(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='null(null)'.  Actual='[1, 2](byte[]@*)'.");
+               
assertThrown(()->byteArray(x1).isSame(x1a)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='0102(byte[]@*)'.  Actual='0102(byte[]@*)'.");
+               
assertThrown(()->byteArray(nil).isSame(x1a)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='0102(byte[]@*)'.  Actual='null(null)'.");
+               
assertThrown(()->byteArray(x1).isSame(nil)).asMessage().asOneLine().isMatches("Not
 the same value.  Expect='null(null)'.  Actual='0102(byte[]@*)'.");
        }
 
        @Test void ca09_isSameJsonAs() {
@@ -234,10 +234,10 @@ class PrimitiveArrayAssertion_Test extends TestBase {
 
        @Test void ca14_isString() {
                byte[] x = {1,2}, nil = null;
-               byteArray(x).isString("[1, 2]");
+               byteArray(x).isString("0102");
                byteArray(nil).isString(null);
-               
assertThrown(()->byteArray(x).isString("bad")).asMessage().asOneLine().is("String
 differed at position 0.  Expect='bad'.  Actual='[1, 2]'.");
-               
assertThrown(()->byteArray(x).isString(null)).asMessage().asOneLine().is("String
 differed at position 0.  Expect='null'.  Actual='[1, 2]'.");
+               
assertThrown(()->byteArray(x).isString("bad")).asMessage().asOneLine().is("String
 differed at position 0.  Expect='bad'.  Actual='0102'.");
+               
assertThrown(()->byteArray(x).isString(null)).asMessage().asOneLine().is("String
 differed at position 0.  Expect='null'.  Actual='0102'.");
                
assertThrown(()->byteArray(nil).isString("bad")).asMessage().asOneLine().is("String
 differed at position 0.  Expect='bad'.  Actual='null'.");
        }
 
@@ -263,7 +263,7 @@ class PrimitiveArrayAssertion_Test extends TestBase {
                int[] x1 = {2,3,1}, nil = null;
                intArray(x1).isAny(x -> x .equals(3));
                intArray(x1).isAny(eq(3));
-               assertThrown(()->intArray(x1).isAny(x -> 
x.equals(4))).asMessage().asOneLine().is("Array did not contain any matching 
value.  Value='[2, 3, 1]'.");
+               assertThrown(()->intArray(x1).isAny(x -> 
x.equals(4))).asMessage().asOneLine().is("Array did not contain any matching 
value.  Value='[2,3,1]'.");
                assertThrows(IllegalArgumentException.class, 
()->intArray(x1).isAny((Predicate<Integer>)null), "Argument 'test' cannot be 
null.");
                assertThrows(BasicAssertionError.class, 
()->intArray(nil).isAny(x->true), "Value was null.");
        }
@@ -294,7 +294,7 @@ class PrimitiveArrayAssertion_Test extends TestBase {
        @Test void cb06_contains() {
                int[] x1 = {1,2}, nil = null;
                intArray(x1).isContains(1);
-               
assertThrown(()->intArray(x1).isContains(3)).asMessage().asOneLine().is("Array 
did not contain expected value.  Expect='3'.  Actual='[1, 2]'.");
+               
assertThrown(()->intArray(x1).isContains(3)).asMessage().asOneLine().is("Array 
did not contain expected value.  Expect='3'.  Actual='[1,2]'.");
                assertThrows(BasicAssertionError.class, 
()->intArray(nil).isContains(3), "Value was null.");
                assertThrows(BasicAssertionError.class, 
()->intArray(nil).isContains(null), "Value was null.");
        }
@@ -302,7 +302,7 @@ class PrimitiveArrayAssertion_Test extends TestBase {
        @Test void cb07_doesNotContain() {
                int[] x1 = {1,2}, nil = null;
                intArray(x1).isNotContains(3);
-               
assertThrown(()->intArray(x1).isNotContains(1)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='1'.  Actual='[1, 2]'.");
+               
assertThrown(()->intArray(x1).isNotContains(1)).asMessage().asOneLine().is("Array
 contained unexpected value.  Unexpected='1'.  Actual='[1,2]'.");
                assertThrows(BasicAssertionError.class, 
()->intArray(nil).isNotContains(3), "Value was null.");
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/StringListAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/StringListAssertion_Test.java
index 3683cf5cf1..deaa4b9bc2 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/StringListAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/StringListAssertion_Test.java
@@ -127,14 +127,14 @@ class StringListAssertion_Test extends TestBase {
        @Test void bc03a_sorted() {
                var x = l("2","1");
                var nil = listn(String.class);
-               test(x).asSorted().isString("[1, 2]");
+               test(x).asSorted().isString("[1,2]");
                test(nil).asSorted().isNull();
        }
 
        @Test void bc03b_sorted_wComparator() {
                var x = l("2","1");
                var nil = listn(String.class);
-               test(x).asSorted(null).isString("[1, 2]");
+               test(x).asSorted(null).isString("[1,2]");
                test(nil).asSorted(null).isNull();
        }
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ThrowableAssertion_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ThrowableAssertion_Test.java
index d960c17df2..5a53b400bb 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/assertions/ThrowableAssertion_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/assertions/ThrowableAssertion_Test.java
@@ -120,7 +120,7 @@ class ThrowableAssertion_Test extends TestBase {
                var x2 = throwable(x1);
                var nil = n(Throwable.class);
                test(x1).asMessages().isString("[1]");
-               test(x2).asMessages().isString("[java.lang.RuntimeException: 1, 
1]");
+               test(x2).asMessages().isString("[java.lang.RuntimeException: 
1,1]");
                test(nil).asMessages().isNull();
        }
 
@@ -138,7 +138,7 @@ class ThrowableAssertion_Test extends TestBase {
                var x2 = throwable(x1);
                var nil = n(Throwable.class);
                test(x1).asLocalizedMessages().isString("[1]");
-               
test(x2).asLocalizedMessages().isString("[java.lang.RuntimeException: 1, 1]");
+               
test(x2).asLocalizedMessages().isString("[java.lang.RuntimeException: 1,1]");
                test(nil).asLocalizedMessages().isNull();
        }
 


Reply via email to