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 a04d68456 Unit test modernization.
a04d68456 is described below

commit a04d68456e29091d1e79677df3be653d149d4c79
Author: James Bognar <[email protected]>
AuthorDate: Thu Aug 7 10:34:07 2025 -0400

    Unit test modernization.
---
 .../apache/juneau/common/internal/StringUtils.java |  12 +
 .../org/apache/juneau/common/internal/Utils.java   |   5 +
 .../java/org/apache/juneau/AssertionHelpers.java   |  21 +
 .../java/org/apache/juneau/SimpleTestBase.java     |  20 +-
 .../java/org/apache/juneau/cp/FileFinder_Test.java | 528 +++++++++++----------
 .../apache/juneau/http/BasicHttpResource_Test.java |  33 +-
 .../juneau/http/SerializedHttpEntity_Test.java     |   7 +-
 .../org/apache/juneau/marshaller/MsgPack_Test.java |   9 +-
 .../rest/client/RestClient_Response_Body_Test.java |  11 +-
 .../org/apache/juneau/utils/MethodInvokerTest.java |  27 +-
 10 files changed, 352 insertions(+), 321 deletions(-)

diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
index 10d8f1075..266a4b7cd 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/StringUtils.java
@@ -3028,4 +3028,16 @@ public final class StringUtils {
        public static boolean isNumberChar(char c) {
                return numberChars.contains(c);
        }
+
+       public static String toUtf8(byte[] b) {
+               return b == null ? null : new String(b, IOUtils.UTF8);
+       }
+
+       public static String toUtf8(InputStream is) {
+               return safe(()->is == null ? null : new String(readBytes(is), 
IOUtils.UTF8));
+       }
+
+       public static String toHex(InputStream is) {
+               return safe(()->is == null ? null : toHex(readBytes(is)));
+       }
 }
\ No newline at end of file
diff --git 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
index a05b5f899..ae9f552af 100644
--- 
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
+++ 
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/Utils.java
@@ -13,6 +13,7 @@
 package org.apache.juneau.common.internal;
 
 import static java.util.stream.Collectors.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
 
 import java.io.*;
 import java.lang.reflect.*;
@@ -666,6 +667,10 @@ public class Utils {
                        return 
o2.toZonedDateTime().format(DateTimeFormatter.ISO_INSTANT);
                if (o instanceof Date o2)
                        return o2.toInstant().toString();
+               if (o instanceof InputStream o2)
+                       return toHex(o2);
+               if (o instanceof byte[] o2)
+                       return toHex(o2);
                if (o != null && o.getClass().isArray()) {
                        List<Object> l = list();
                        for (var i = 0; i < Array.getLength(o); i++) {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/AssertionHelpers.java 
b/juneau-utest/src/test/java/org/apache/juneau/AssertionHelpers.java
new file mode 100644
index 000000000..9941fecd7
--- /dev/null
+++ b/juneau-utest/src/test/java/org/apache/juneau/AssertionHelpers.java
@@ -0,0 +1,21 @@
+package org.apache.juneau;
+
+import static org.apache.juneau.common.internal.StringUtils.*;
+import static org.apache.juneau.common.internal.Utils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
+public class AssertionHelpers {
+
+       /**
+        * Asserts value when stringified matches the specified pattern.
+        */
+       public static Object assertMatches(String pattern, Object value) {
+               var m = getMatchPattern(pattern).matcher(s(value));
+               if (! m.matches()) {
+                       var msg = "Pattern didn't match: 
\n\tExpected:\n"+pattern+"\n\tActual:\n"+value;
+                       System.err.println(msg);  // For easier debugging.
+                       fail(msg);
+               }
+               return value;
+       }
+}
diff --git a/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java 
b/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java
index f4bfd6d96..015701d62 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java
@@ -39,18 +39,6 @@ import org.junit.jupiter.api.MethodOrderer.*;
 @TestMethodOrder(MethodName.class)
 public abstract class SimpleTestBase {
 
-       /**
-        * Asserts value when stringified matches the specified pattern.
-        */
-       protected static void assertMatches(String pattern, Object value) {
-               var m = getMatchPattern(pattern).matcher(s(value));
-               if (! m.matches()) {
-                       var msg = "Pattern didn't match: 
\n\tExpected:\n"+pattern+"\n\tActual:\n"+value;
-                       System.err.println(msg);  // For easier debugging.
-                       fail(msg);
-               }
-       }
-
        /**
         * Asserts the JSON5 representation of the specified object.
         */
@@ -80,6 +68,14 @@ public abstract class SimpleTestBase {
                assertEquals(expected, r(actual));
        }
 
+       /**
+        * Asserts an object matches the expected string after it's been made 
readable.
+        */
+       protected static void assertContains(String expected, Object actual) {
+               var a2 = r(actual);
+               assertTrue(a2.contains(expected), ss("String did not contain 
expected substring.  expected={0}, actual={1}", expected, a2));
+       }
+
        protected static void assertEmpty(Optional<?> o) {
                assertTrue(o != null && o.isEmpty(), "Optional was not empty.");
        }
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
index b93dd081f..571f9407c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/cp/FileFinder_Test.java
@@ -15,7 +15,9 @@ package org.apache.juneau.cp;
 import static java.util.Locale.*;
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
-import java.io.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
+import static org.junit.jupiter.api.Assertions.*;
+
 import java.nio.file.*;
 import java.util.*;
 
@@ -25,12 +27,12 @@ import org.junit.jupiter.api.*;
 
 public class FileFinder_Test extends SimpleTestBase {  // NOSONAR - Needs to 
be public.
 
-       private InputStream stream(FileFinder ff, String path) throws Exception 
{
-               return ff.getStream(path, null).orElse(null);
+       private String read(FileFinder ff, String path) throws Exception {
+               return toUtf8(ff.getStream(path, null).orElse(null));
        }
 
-       private InputStream stream(FileFinder ff, String path, Locale locale) 
throws Exception {
-               return ff.getStream(path, locale).orElse(null);
+       private String read(FileFinder ff, String path, Locale locale) throws 
Exception {
+               return toUtf8(ff.getStream(path, locale).orElse(null));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -42,7 +44,7 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .create()
                        .build();
 
-               assertBytes(stream(x,"files/test1a")).asString().isNull();
+               assertNull(read(x,"files/test1a"));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -58,18 +60,18 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"files/test1/"+p)).asString().isContains("[home:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/"+p)).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/dir/"+p)).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/"+p+" / 
")).asString().isContains("[home:/files/test1/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/"+p+" / 
")).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/dir/"+p+" / 
")).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
+                       assertContains("[home:/files/test1/"+p+"]", 
read(x,"files/test1/"+p));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x,"files/test1/dir/"+p));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x,"files/test1/dir/dir/"+p));
+                       assertContains("[home:/files/test1/"+p+"]", read(x," / 
files/test1/"+p+" / "));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x," / files/test1/dir/"+p+" / "));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x," / files/test1/dir/dir/"+p+" / "));
                }
 
                String[] badPatterns = 
{"files/test1/bad.txt","files/test1/../test1/_a.txt","files/test1/%2E%2E/test1/_a.txt","files/bad.txt",null,"",".","..","%2E","%2E%2E","j.class","k.properties"};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -82,18 +84,18 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"test1/"+p)).asString().isContains("[home:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p)).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p)).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/")).asString().isContains("[home:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/")).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/")).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
+                       assertContains("[home:/files/test1/"+p+"]", 
read(x,"test1/"+p));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p));
+                       assertContains("[home:/files/test1/"+p+"]", 
read(x,"/test1/"+p+"/"));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x,"/test1/dir/"+p+"/"));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x,"/test1/dir/dir/"+p+"/"));
                }
 
                String[] badPatterns = 
{"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -110,34 +112,34 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                for (int i = 0; i < patterns.length; i++) {
                        String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP 
= patterns_ja_JP[i];
 
-                       
assertBytes(stream(x,"test1/"+p,null)).asString().isContains("[home:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,null)).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,null)).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",null)).asString().isContains("[home:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",null)).asString().isContains("[home:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",null)).asString().isContains("[home:/files/test1/dir/dir/"+p+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPANESE)).asString().isContains("[home:/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPANESE)).asString().isContains("[home:/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPANESE)).asString().isContains("[home:/files/test1/dir/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPANESE)).asString().isContains("[home:/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPANESE)).asString().isContains("[home:/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPANESE)).asString().isContains("[home:/files/test1/dir/dir/"+p_ja+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPAN)).asString().isContains("[home:/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPAN)).asString().isContains("[home:/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPAN)).asString().isContains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPAN)).asString().isContains("[home:/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPAN)).asString().isContains("[home:/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPAN)).asString().isContains("[home:/files/test1/dir/dir/"+p_ja_JP+"]");
+                       assertContains("[home:/files/test1/"+p+"]", 
read(x,"test1/"+p,null));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p,null));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p,null));
+                       assertContains("[home:/files/test1/"+p+"]", 
read(x,"/test1/"+p+"/",null));
+                       assertContains("[home:/files/test1/dir/"+p+"]", 
read(x,"/test1/dir/"+p+"/",null));
+                       assertContains("[home:/files/test1/dir/dir/"+p+"]", 
read(x,"/test1/dir/dir/"+p+"/",null));
+
+                       assertContains("[home:/files/test1/"+p_ja+"]", 
read(x,"test1/"+p,JAPANESE));
+                       assertContains("[home:/files/test1/dir/"+p_ja+"]", 
read(x,"test1/dir/"+p,JAPANESE));
+                       assertContains("[home:/files/test1/dir/dir/"+p_ja+"]", 
read(x,"test1/dir/dir/"+p,JAPANESE));
+                       assertContains("[home:/files/test1/"+p_ja+"]", 
read(x,"/test1/"+p+"/",JAPANESE));
+                       assertContains("[home:/files/test1/dir/"+p_ja+"]", 
read(x,"/test1/dir/"+p+"/",JAPANESE));
+                       assertContains("[home:/files/test1/dir/dir/"+p_ja+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPANESE));
+
+                       assertContains("[home:/files/test1/"+p_ja_JP+"]", 
read(x,"test1/"+p,JAPAN));
+                       assertContains("[home:/files/test1/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/"+p,JAPAN));
+                       
assertContains("[home:/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/dir/"+p,JAPAN));
+                       assertContains("[home:/files/test1/"+p_ja_JP+"]", 
read(x,"/test1/"+p+"/",JAPAN));
+                       assertContains("[home:/files/test1/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/"+p+"/",JAPAN));
+                       
assertContains("[home:/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPAN));
                }
 
                String[] badPatterns = 
{"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".","..","j.class","k.properties"};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p,null)).isNull();
-                       assertBytes(stream(x,p,JAPANESE)).isNull();
-                       assertBytes(stream(x,p,JAPAN)).isNull();
+                       assertNull(read(x,p,null));
+                       assertNull(read(x,p,JAPANESE));
+                       assertNull(read(x,p,JAPAN));
                }
        }
 
@@ -147,26 +149,26 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .dir("files/test2")
                        .build();
 
-               assertBytes(stream(x,"a.txt", 
null)).asString().isContains("[home:/files/test2/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
null)).asString().isContains("[home:/files/test2/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/a.txt]");
-
-               assertBytes(stream(x,"dir/a.txt", 
null)).asString().isContains("[home:/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
null)).asString().isContains("[home:/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/dir/a.txt]");
-
-               assertBytes(stream(x,"dir/dir/a.txt", 
null)).asString().isContains("[home:/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
null)).asString().isContains("[home:/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPANESE)).asString().isContains("[home:/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPAN)).asString().isContains("[home:/files/test2/ja/JP/dir/dir/a.txt]");
+               assertContains("[home:/files/test2/a.txt]", read(x,"a.txt", 
null));
+               assertContains("[home:/files/test2/ja/a.txt]", read(x,"a.txt", 
JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/a.txt]", 
read(x,"a.txt", JAPAN));
+               assertContains("[home:/files/test2/a.txt]", read(x,"/a.txt/", 
null));
+               assertContains("[home:/files/test2/ja/a.txt]", 
read(x,"/a.txt/", JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/a.txt]", 
read(x,"/a.txt/", JAPAN));
+
+               assertContains("[home:/files/test2/dir/a.txt]", 
read(x,"dir/a.txt", null));
+               assertContains("[home:/files/test2/ja/dir/a.txt]", 
read(x,"dir/a.txt", JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/dir/a.txt]", 
read(x,"dir/a.txt", JAPAN));
+               assertContains("[home:/files/test2/dir/a.txt]", 
read(x,"/dir/a.txt/", null));
+               assertContains("[home:/files/test2/ja/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPAN));
+
+               assertContains("[home:/files/test2/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", null));
+               assertContains("[home:/files/test2/ja/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPAN));
+               assertContains("[home:/files/test2/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", null));
+               assertContains("[home:/files/test2/ja/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPANESE));
+               assertContains("[home:/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPAN));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -182,18 +184,18 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"files/test1/"+p)).asString().isContains("[cp:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/"+p)).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/dir/"+p)).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/"+p+" / 
")).asString().isContains("[cp:/files/test1/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/"+p+" / 
")).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
+                       assertContains("[cp:/files/test1/"+p+"]", 
read(x,"files/test1/"+p));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", 
read(x,"files/test1/dir/"+p));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x,"files/test1/dir/dir/"+p));
+                       assertContains("[cp:/files/test1/"+p+"]", read(x," / 
files/test1/"+p+" / "));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", read(x," 
/ files/test1/dir/"+p+" / "));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x," / files/test1/dir/dir/"+p+" / "));
                }
 
                String[] badPatterns = 
{"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".","..","LocalizedFileStore_Test.class"};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).setMsg("pattern=[{0}]", 
p).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -206,18 +208,18 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"test1/"+p)).asString().isContains("[cp:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p)).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p)).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/"+p+" / 
")).asString().isContains("[cp:/files/test1/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/"+p+" / 
")).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
+                       assertContains("[cp:/files/test1/"+p+"]", 
read(x,"test1/"+p));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p));
+                       assertContains("[cp:/files/test1/"+p+"]", read(x," / 
test1/"+p+" / "));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", read(x," 
/ test1/dir/"+p+" / "));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x," / test1/dir/dir/"+p+" / "));
                }
 
                String[] badPatterns = 
{"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -235,34 +237,34 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                for (int i = 0; i < patterns.length; i++) {
                        String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP 
= patterns_ja_JP[i];
 
-                       
assertBytes(stream(x,"test1/"+p,null)).asString().isContains("[cp:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,null)).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,null)).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",null)).asString().isContains("[cp:/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",null)).asString().isContains("[cp:/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",null)).asString().isContains("[cp:/files/test1/dir/dir/"+p+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPANESE)).asString().isContains("[cp:/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPANESE)).asString().isContains("[cp:/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPANESE)).asString().isContains("[cp:/files/test1/dir/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPANESE)).asString().isContains("[cp:/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/files/test1/dir/dir/"+p_ja+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPAN)).asString().isContains("[cp:/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPAN)).asString().isContains("[cp:/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPAN)).asString().isContains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPAN)).asString().isContains("[cp:/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]");
+                       assertContains("[cp:/files/test1/"+p+"]", 
read(x,"test1/"+p,null));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p,null));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p,null));
+                       assertContains("[cp:/files/test1/"+p+"]", 
read(x,"/test1/"+p+"/",null));
+                       assertContains("[cp:/files/test1/dir/"+p+"]", 
read(x,"/test1/dir/"+p+"/",null));
+                       assertContains("[cp:/files/test1/dir/dir/"+p+"]", 
read(x,"/test1/dir/dir/"+p+"/",null));
+
+                       assertContains("[cp:/files/test1/"+p_ja+"]", 
read(x,"test1/"+p,JAPANESE));
+                       assertContains("[cp:/files/test1/dir/"+p_ja+"]", 
read(x,"test1/dir/"+p,JAPANESE));
+                       assertContains("[cp:/files/test1/dir/dir/"+p_ja+"]", 
read(x,"test1/dir/dir/"+p,JAPANESE));
+                       assertContains("[cp:/files/test1/"+p_ja+"]", 
read(x,"/test1/"+p+"/",JAPANESE));
+                       assertContains("[cp:/files/test1/dir/"+p_ja+"]", 
read(x,"/test1/dir/"+p+"/",JAPANESE));
+                       assertContains("[cp:/files/test1/dir/dir/"+p_ja+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPANESE));
+
+                       assertContains("[cp:/files/test1/"+p_ja_JP+"]", 
read(x,"test1/"+p,JAPAN));
+                       assertContains("[cp:/files/test1/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/"+p,JAPAN));
+                       assertContains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/dir/"+p,JAPAN));
+                       assertContains("[cp:/files/test1/"+p_ja_JP+"]", 
read(x,"/test1/"+p+"/",JAPAN));
+                       assertContains("[cp:/files/test1/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/"+p+"/",JAPAN));
+                       assertContains("[cp:/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPAN));
                }
 
                String[] badPatterns = 
{"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p,null)).isNull();
-                       assertBytes(stream(x,p,JAPANESE)).isNull();
-                       assertBytes(stream(x,p,JAPAN)).isNull();
+                       assertNull(read(x,p,null));
+                       assertNull(read(x,p,JAPANESE));
+                       assertNull(read(x,p,JAPAN));
                }
        }
 
@@ -273,26 +275,26 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .cp(FileFinder_Test.class, "/files/test2", false)
                        .build();
 
-               assertBytes(stream(x,"a.txt", 
null)).asString().isContains("[cp:/files/test2/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
null)).asString().isContains("[cp:/files/test2/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/a.txt]");
-
-               assertBytes(stream(x,"dir/a.txt", 
null)).asString().isContains("[cp:/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
null)).asString().isContains("[cp:/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/dir/a.txt]");
-
-               assertBytes(stream(x,"dir/dir/a.txt", 
null)).asString().isContains("[cp:/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
null)).asString().isContains("[cp:/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/files/test2/ja/JP/dir/dir/a.txt]");
+               assertContains("[cp:/files/test2/a.txt]", read(x,"a.txt", 
null));
+               assertContains("[cp:/files/test2/ja/a.txt]", read(x,"a.txt", 
JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/a.txt]", read(x,"a.txt", 
JAPAN));
+               assertContains("[cp:/files/test2/a.txt]", read(x,"/a.txt/", 
null));
+               assertContains("[cp:/files/test2/ja/a.txt]", read(x,"/a.txt/", 
JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/a.txt]", 
read(x,"/a.txt/", JAPAN));
+
+               assertContains("[cp:/files/test2/dir/a.txt]", 
read(x,"dir/a.txt", null));
+               assertContains("[cp:/files/test2/ja/dir/a.txt]", 
read(x,"dir/a.txt", JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/dir/a.txt]", 
read(x,"dir/a.txt", JAPAN));
+               assertContains("[cp:/files/test2/dir/a.txt]", 
read(x,"/dir/a.txt/", null));
+               assertContains("[cp:/files/test2/ja/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPAN));
+
+               assertContains("[cp:/files/test2/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", null));
+               assertContains("[cp:/files/test2/ja/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPAN));
+               assertContains("[cp:/files/test2/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", null));
+               assertContains("[cp:/files/test2/ja/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPANESE));
+               assertContains("[cp:/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPAN));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -308,20 +310,20 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"files/test1/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"files/test1/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"files/test1/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"files/test1/dir/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", read(x," / 
files/test1/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", read(x," / 
files/test1/dir/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", read(x," 
/ files/test1/dir/dir/"+p+" / "));
                }
 
-               
assertBytes(stream(x,"_a.txt")).asString().isContains("[cp:/org/apache/juneau/cp/_a.txt]");
+               assertContains("[cp:/org/apache/juneau/cp/_a.txt]", 
read(x,"_a.txt"));
 
                String[] badPatterns = 
{"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -334,12 +336,12 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"files/test1/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"files/test1/dir/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / files/test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"files/test1/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"files/test1/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"files/test1/dir/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", read(x," / 
files/test1/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", read(x," / 
files/test1/dir/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", read(x," 
/ files/test1/dir/dir/"+p+" / "));
                }
        }
 
@@ -352,18 +354,18 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"test1/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"test1/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", read(x," / 
test1/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", read(x," / 
test1/dir/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", read(x," 
/ test1/dir/dir/"+p+" / "));
                }
 
                String[] badPatterns = 
{"files/test1/bad.txt","files/test1/../test1/_a.txt","files/bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p)).isNull();
+                       assertNull(read(x,p));
                }
        }
 
@@ -376,12 +378,12 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                String[] patterns = 
{"_a.txt","_b",".c",".d.txt","e.txt","f","g_foo.txt","h.foo.txt","i_foo"};
 
                for (String p : patterns) {
-                       
assertBytes(stream(x,"test1/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       assertBytes(stream(x," / test1/dir/dir/"+p+" / 
")).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"test1/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", read(x," / 
test1/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", read(x," / 
test1/dir/"+p+" / "));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", read(x," 
/ test1/dir/dir/"+p+" / "));
                }
        }
 
@@ -399,34 +401,34 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                for (int i = 0; i < patterns.length; i++) {
                        String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP 
= patterns_ja_JP[i];
 
-                       
assertBytes(stream(x,"test1/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"test1/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"/test1/"+p+"/",null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"/test1/dir/"+p+"/",null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"/test1/dir/dir/"+p+"/",null));
+
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]", 
read(x,"test1/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]", 
read(x,"test1/dir/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]", 
read(x,"test1/dir/dir/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]", 
read(x,"/test1/"+p+"/",JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]", 
read(x,"/test1/dir/"+p+"/",JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPANESE));
+
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]", 
read(x,"test1/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/dir/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]", 
read(x,"/test1/"+p+"/",JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/"+p+"/",JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPAN));
                }
 
                String[] badPatterns = 
{"test1/bad.txt","test1/../test1/_a.txt","bad.txt",null,"",".",".."};
 
                for (String p : badPatterns) {
-                       assertBytes(stream(x,p,null)).isNull();
-                       assertBytes(stream(x,p,JAPANESE)).isNull();
-                       assertBytes(stream(x,p,JAPAN)).isNull();
+                       assertNull(read(x,p,null));
+                       assertNull(read(x,p,JAPANESE));
+                       assertNull(read(x,p,JAPAN));
                }
        }
 
@@ -444,26 +446,26 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                for (int i = 0; i < patterns.length; i++) {
                        String p = patterns[i], p_ja = patterns_ja[i], p_ja_JP 
= patterns_ja_JP[i];
 
-                       
assertBytes(stream(x,"test1/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]");
-
-                       
assertBytes(stream(x,"test1/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"test1/dir/dir/"+p,JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]");
-                       
assertBytes(stream(x,"/test1/dir/dir/"+p+"/",JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]");
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"test1/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"test1/dir/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"test1/dir/dir/"+p,null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p+"]", 
read(x,"/test1/"+p+"/",null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p+"]", 
read(x,"/test1/dir/"+p+"/",null));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p+"]", 
read(x,"/test1/dir/dir/"+p+"/",null));
+
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]", 
read(x,"test1/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]", 
read(x,"test1/dir/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]", 
read(x,"test1/dir/dir/"+p,JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja+"]", 
read(x,"/test1/"+p+"/",JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja+"]", 
read(x,"/test1/dir/"+p+"/",JAPANESE));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPANESE));
+
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]", 
read(x,"test1/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"test1/dir/dir/"+p,JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/"+p_ja_JP+"]", 
read(x,"/test1/"+p+"/",JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/"+p+"/",JAPAN));
+                       
assertContains("[cp:/org/apache/juneau/cp/files/test1/dir/dir/"+p_ja_JP+"]", 
read(x,"/test1/dir/dir/"+p+"/",JAPAN));
                }
        }
 
@@ -473,26 +475,26 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .cp(FileFinder_Test.class, "files/test2", false)
                        .build();
 
-               assertBytes(stream(x,"a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-
-               assertBytes(stream(x,"dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-
-               assertBytes(stream(x,"dir/dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+               assertContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]", 
read(x,"a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]", 
read(x,"a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]", 
read(x,"a.txt", JAPAN));
+               assertContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]", 
read(x,"/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]", 
read(x,"/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]", 
read(x,"/a.txt/", JAPAN));
+
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]", 
read(x,"dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]", 
read(x,"dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]", 
read(x,"dir/a.txt", JAPAN));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]", 
read(x,"/dir/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPAN));
+
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPAN));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPAN));
        }
 
        @Test void d04b_classpathRelative_localized_hierarchical_recursive() 
throws Exception {
@@ -501,26 +503,26 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .cp(FileFinder_Test2.class, "files/test2", true)
                        .build();
 
-               assertBytes(stream(x,"a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
-
-               assertBytes(stream(x,"dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
-
-               assertBytes(stream(x,"dir/dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"/dir/dir/a.txt/", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+               assertContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]", 
read(x,"a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]", 
read(x,"a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]", 
read(x,"a.txt", JAPAN));
+               assertContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]", 
read(x,"/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]", 
read(x,"/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]", 
read(x,"/a.txt/", JAPAN));
+
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]", 
read(x,"dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]", 
read(x,"dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]", 
read(x,"dir/a.txt", JAPAN));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]", 
read(x,"/dir/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]", 
read(x,"/dir/a.txt/", JAPAN));
+
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPAN));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"/dir/dir/a.txt/", JAPAN));
 
                FileFinder
                        .create()
@@ -536,17 +538,17 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .exclude("(?i).*\\.(txt)")
                        .build();
 
-               assertBytes(stream(x,"a.txt", null)).isNull();
-               assertBytes(stream(x,"a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"a.txt", JAPAN)).isNull();
+               assertNull(read(x,"a.txt", null));
+               assertNull(read(x,"a.txt", JAPANESE));
+               assertNull(read(x,"a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/a.txt", null)).isNull();
-               assertBytes(stream(x,"dir/a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"dir/a.txt", JAPAN)).isNull();
+               assertNull(read(x,"dir/a.txt", null));
+               assertNull(read(x,"dir/a.txt", JAPANESE));
+               assertNull(read(x,"dir/a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/dir/a.txt", null)).isNull();
-               assertBytes(stream(x,"dir/dir/a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"dir/dir/a.txt", JAPAN)).isNull();
+               assertNull(read(x,"dir/dir/a.txt", null));
+               assertNull(read(x,"dir/dir/a.txt", JAPANESE));
+               assertNull(read(x,"dir/dir/a.txt", JAPAN));
 
                x = FileFinder
                        .create()
@@ -554,17 +556,17 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .exclude("(?i).*\\.(TXT)")
                        .build();
 
-               assertBytes(stream(x,"a.txt", null)).isNull();
-               assertBytes(stream(x,"a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"a.txt", JAPAN)).isNull();
+               assertNull(read(x,"a.txt", null));
+               assertNull(read(x,"a.txt", JAPANESE));
+               assertNull(read(x,"a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/a.txt", null)).isNull();
-               assertBytes(stream(x,"dir/a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"dir/a.txt", JAPAN)).isNull();
+               assertNull(read(x,"dir/a.txt", null));
+               assertNull(read(x,"dir/a.txt", JAPANESE));
+               assertNull(read(x,"dir/a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/dir/a.txt", null)).isNull();
-               assertBytes(stream(x,"dir/dir/a.txt", JAPANESE)).isNull();
-               assertBytes(stream(x,"dir/dir/a.txt", JAPAN)).isNull();
+               assertNull(read(x,"dir/dir/a.txt", null));
+               assertNull(read(x,"dir/dir/a.txt", JAPANESE));
+               assertNull(read(x,"dir/dir/a.txt", JAPAN));
 
                x = FileFinder
                        .create()
@@ -572,17 +574,17 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .exclude()
                        .build();
 
-               assertBytes(stream(x,"a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]");
-               assertBytes(stream(x,"a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]");
+               assertContains("[cp:/org/apache/juneau/cp/files/test2/a.txt]", 
read(x,"a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/a.txt]", 
read(x,"a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/a.txt]", 
read(x,"a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]");
-               assertBytes(stream(x,"dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]");
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/a.txt]", 
read(x,"dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/a.txt]", 
read(x,"dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/a.txt]", 
read(x,"dir/a.txt", JAPAN));
 
-               assertBytes(stream(x,"dir/dir/a.txt", 
null)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPANESE)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]");
-               assertBytes(stream(x,"dir/dir/a.txt", 
JAPAN)).asString().isContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]");
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", null));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPANESE));
+               
assertContains("[cp:/org/apache/juneau/cp/files/test2/ja/JP/dir/dir/a.txt]", 
read(x,"dir/dir/a.txt", JAPAN));
        }
 
        
//-----------------------------------------------------------------------------------------------------------------
@@ -615,8 +617,8 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .caching(100_000_000)
                        .build();
 
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[home:/files/test1/_a.txt]");
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[home:/files/test1/_a.txt]");
+               assertContains("[home:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
+               assertContains("[home:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
 
                x = FileFinder
                        .create()
@@ -624,8 +626,8 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .caching(1)
                        .build();
 
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[home:/files/test1/_a.txt]");
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[home:/files/test1/_a.txt]");
+               assertContains("[home:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
+               assertContains("[home:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
 
                x = FileFinder
                        .create()
@@ -633,8 +635,8 @@ public class FileFinder_Test extends SimpleTestBase {  // 
NOSONAR - Needs to be
                        .caching(100_000_000)
                        .build();
 
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[cp:/files/test1/_a.txt]");
-               
assertBytes(stream(x,"files/test1/_a.txt")).asString().isContains("[cp:/files/test1/_a.txt]");
+               assertContains("[cp:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
+               assertContains("[cp:/files/test1/_a.txt]", 
read(x,"files/test1/_a.txt"));
        }
 
        @Test void e03_subclassing() {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
index 9b5f3216d..ddef167d3 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/BasicHttpResource_Test.java
@@ -16,6 +16,7 @@ import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.http.HttpResources.*;
 import static org.apache.juneau.utest.utils.Utils2.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.junit.Assert.*;
 import java.io.*;
 import java.nio.file.*;
@@ -33,62 +34,62 @@ class BasicHttpResource_Test extends SimpleTestBase {
                HttpResource x = stringResource((String)null);
 
                assertNull(x.getContentType());
-               assertBytes(x.getContent()).isNotNull().asString().isEmpty();
+               assertEquals("", toUtf8(x.getContent()));
                assertNull(x.getContentEncoding());
                assertEquals(0, x.getHeaders().size());
 
                x = stringResource("foo");
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
                assertFalse(x.isStreaming());
 
                x = readerResource(reader("foo"));
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
                assertFalse(x.isRepeatable());
                assertTrue(x.isStreaming());
 
                x = byteArrayResource("foo".getBytes());
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
                assertFalse(x.isStreaming());
 
                x = streamResource(inputStream("foo"));
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
                assertFalse(x.isRepeatable());
                assertTrue(x.isStreaming());
 
                x = fileResource(f);
-               assertBytes(x.getContent()).asString().isEmpty();
+               assertEquals("", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
                assertFalse(x.isStreaming());
 
                x = stringResource("foo").setCached();
-               assertBytes(x.getContent()).asString().is("foo");
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
 
                x = readerResource(reader("foo")).setCached();
-               assertBytes(x.getContent()).asString().is("foo");
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
 
                x = byteArrayResource("foo".getBytes()).setCached();
-               assertBytes(x.getContent()).asString().is("foo");
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
 
                x = streamResource(inputStream("foo")).setCached();
-               assertBytes(x.getContent()).asString().is("foo");
-               assertBytes(x.getContent()).asString().is("foo");
+               assertEquals("foo", toUtf8(x.getContent()));
+               assertEquals("foo", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
 
                x = stringResource((String)null).setCached();
-               assertBytes(x.getContent()).isExists().asString().isEmpty();
+               assertEquals("", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
                x.writeTo(new ByteArrayOutputStream());
 
                x = fileResource(f).setCached();
-               assertBytes(x.getContent()).asString().isEmpty();
+               assertEquals("", toUtf8(x.getContent()));
                assertTrue(x.isRepeatable());
                x.writeTo(new ByteArrayOutputStream());
 
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
index 030a2996c..01417551d 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/http/SerializedHttpEntity_Test.java
@@ -18,6 +18,7 @@ import static org.apache.juneau.httppart.HttpPartSchema.*;
 import static org.apache.juneau.internal.CollectionUtils.*;
 import static org.apache.juneau.utest.utils.Utils2.*;
 import static org.junit.jupiter.api.Assertions.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
 
 import java.io.*;
 
@@ -70,7 +71,7 @@ class SerializedHttpEntity_Test extends SimpleTestBase {
        @Test void a05_writeTo() throws Exception {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                serializedEntity("foo", null).writeTo(baos);
-               assertBytes(baos.toByteArray()).asString().is("foo");
+               assertEquals("foo", toUtf8(baos.toByteArray()));
        }
 
        @Test void a06_isRepeatable() {
@@ -81,8 +82,8 @@ class SerializedHttpEntity_Test extends SimpleTestBase {
                
assertLong(serializedEntity(ABean.get(),null).getContentLength()).is(-1L);
        }
 
-       @Test void a08_getContent() throws Exception {
-               
assertBytes(serializedEntity("foo",null).getContent()).asString().is("foo");
+       @Test void a08_getContent() {
+               assertEquals("foo", 
toUtf8(serializedEntity("foo",null).getContent()));
        }
 
        @Test void a09_chunked() throws Exception {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/marshaller/MsgPack_Test.java 
b/juneau-utest/src/test/java/org/apache/juneau/marshaller/MsgPack_Test.java
index 80adcb1d9..f67f8649c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/marshaller/MsgPack_Test.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/marshaller/MsgPack_Test.java
@@ -12,7 +12,6 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.marshaller;
 
-import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.junit.jupiter.api.Assertions.*;
 
@@ -29,10 +28,10 @@ class MsgPack_Test extends SimpleTestBase {
                Object in1 = "foo", in2 = JsonMap.of("foo", "bar");
                String expected1 = "A3666F6F", expected2 = "81A3666F6FA3626172";
 
-               assertBytes(MsgPack.of(in1)).asHex().is(expected1);
-               
assertBytes(bytes(MsgPack.of(in1,baos()))).asHex().is(expected1);
-               assertBytes(MsgPack.of(in2)).asHex().is(expected2);
-               
assertBytes(bytes(MsgPack.of(in2,baos()))).asHex().is(expected2);
+               assertEquals(toHex(MsgPack.of(in1)), expected1);
+               assertEquals(toHex(bytes(MsgPack.of(in1,baos()))), expected1);
+               assertEquals(toHex(MsgPack.of(in2)), expected2);
+               assertEquals(toHex(bytes(MsgPack.of(in2,baos()))), expected2);
        }
 
        @Test void a02_from() throws Exception {
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Body_Test.java
 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Body_Test.java
index 612b0bf5c..aa84394a8 100644
--- 
a/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Body_Test.java
+++ 
b/juneau-utest/src/test/java/org/apache/juneau/rest/client/RestClient_Response_Body_Test.java
@@ -14,6 +14,7 @@ package org.apache.juneau.rest.client;
 
 import static org.apache.juneau.assertions.Assertions.*;
 import static org.apache.juneau.common.internal.IOUtils.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
 import static org.apache.juneau.http.HttpHeaders.*;
 import static org.apache.juneau.utest.utils.Utils2.*;
 import static org.junit.Assert.*;
@@ -103,7 +104,7 @@ class RestClient_Response_Body_Test extends SimpleTestBase {
        @Test void a03_asInputStream() throws Exception {
                RestResponse r1 = client().build().get("/bean").run();
                InputStream is = r1.getContent().asInputStream();
-               assertBytes(is).asString().is("{f:1}");
+               assertEquals("{f:1}", toUtf8(is));
                
assertThrown(()->r1.getContent().asInputStream()).asMessage().isContains("Response
 has already been consumed.");
 
                // Non-repeatable entity.
@@ -117,7 +118,7 @@ class RestClient_Response_Body_Test extends SimpleTestBase {
                RestResponse r3 = x.get("/bean").run();
                r3.getContent().asInputStream();
                is = r3.getContent().asInputStream();
-               assertBytes(is).asString().is("{f:2}");
+               assertEquals("{f:2}", toUtf8(is));
                is = x.get("/bean").run().getContent().asInputStream();
                ((EofSensorInputStream)is).abortConnection();
 
@@ -151,10 +152,10 @@ class RestClient_Response_Body_Test extends 
SimpleTestBase {
 
        @Test void a05_asBytes() throws Exception {
                byte[] x = 
client().build().get("/bean").run().getContent().asBytes();
-               assertBytes(x).asString().is("{f:1}");
+               assertEquals("{f:1}", toUtf8(x));
 
                x = 
client().build().get("/bean").run().assertContent().asBytes().asString().is("{f:1}").getContent().asBytes();
-               assertBytes(x).asString().is("{f:1}");
+               assertEquals("{f:1}", toUtf8(x));
 
                assertThrowsWithMessage(Exception.class, "foo", 
()->testClient().entity(new 
InputStreamEntity(badStream())).get().run().getContent().asBytes());
        }
@@ -162,7 +163,7 @@ class RestClient_Response_Body_Test extends SimpleTestBase {
        @Test void a06_pipeTo() throws Exception {
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                client().build().get("/bean").run().getContent().pipeTo(baos);
-               assertBytes(baos.toByteArray()).asString().is("{f:1}");
+               assertEquals("{f:1}", toUtf8(baos.toByteArray()));
 
                StringWriter sw = new StringWriter();
                client().build().get("/bean").run().getContent().pipeTo(sw);
diff --git 
a/juneau-utest/src/test/java/org/apache/juneau/utils/MethodInvokerTest.java 
b/juneau-utest/src/test/java/org/apache/juneau/utils/MethodInvokerTest.java
index 17f7594bc..643acbe29 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/MethodInvokerTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/MethodInvokerTest.java
@@ -12,17 +12,14 @@
 // 
***************************************************************************************************************************
 package org.apache.juneau.utils;
 
-import static org.apache.juneau.assertions.Assertions.*;
 import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
-
 import java.lang.reflect.*;
 
+import org.apache.juneau.*;
 import org.apache.juneau.rest.stats.*;
-import org.junit.*;
+import org.junit.jupiter.api.*;
 
-@FixMethodOrder(NAME_ASCENDING)
-public class MethodInvokerTest {
+class MethodInvokerTest extends SimpleTestBase {
 
        private MethodExecStore store = MethodExecStore
                .create()
@@ -41,8 +38,7 @@ public class MethodInvokerTest {
                return new MethodInvoker(m, store.getStats(m));
        }
 
-       @Test
-       public void testBasic() throws Exception {
+       @Test void testBasic() throws Exception {
                Method m = A.class.getMethod("foo");
 
                MethodInvoker mi = create(m);
@@ -52,11 +48,10 @@ public class MethodInvokerTest {
                mi.invoke(a);
                mi.invoke(a);
 
-               
assertBean(mi.getStats()).asPropertyMap("runs","errors").asJson().is("{runs:3,errors:0}");
+               assertBean(mi.getStats(), "runs,errors", "3,0");
        }
 
-       @Test
-       public void testException() throws Exception {
+       @Test void testException() throws Exception {
                Method m = A.class.getMethod("bar");
 
                MethodInvoker mi = create(m);
@@ -66,11 +61,10 @@ public class MethodInvokerTest {
                assertThrows(Exception.class, ()->mi.invoke(a));
                assertThrows(Exception.class, ()->mi.invoke(a));
 
-               
assertBean(mi.getStats()).asPropertyMap("runs","errors").asJson().is("{runs:3,errors:3}");
+               assertBean(mi.getStats(), "runs,errors", "3,3");
        }
 
-       @Test
-       public void testIllegalArgument() throws Exception {
+       @Test void testIllegalArgument() throws Exception {
                Method m = A.class.getMethod("baz", int.class);
 
                MethodInvoker mi = create(m);
@@ -80,11 +74,10 @@ public class MethodInvokerTest {
                assertThrows(Exception.class, ()->mi.invoke(a));
                assertThrows(Exception.class, ()->mi.invoke(a, 1, "x"));
 
-               
assertBean(mi.getStats()).asPropertyMap("runs","errors").asJson().is("{runs:3,errors:3}");
+               assertBean(mi.getStats(), "runs,errors", "3,3");
        }
 
-       @Test
-       public void testOtherMethods() throws Exception {
+       @Test void testOtherMethods() throws Exception {
                Method m = A.class.getMethod("foo");
                MethodInvoker mi = create(m);
 

Reply via email to