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 12f4609da Unit test modernization.
new c568c8fab Merge branch 'master' of
https://gitbox.apache.org/repos/asf/juneau.git
12f4609da is described below
commit 12f4609daa192b042bea7811231aefaebb70ef11
Author: James Bognar <[email protected]>
AuthorDate: Tue Aug 5 09:15:13 2025 -0400
Unit test modernization.
---
.../apache/juneau/common/internal/AsciiSet.java | 2 +-
.../apache/juneau/common/internal/StringUtils.java | 182 +++++-
.../org/apache/juneau/common/internal/Utils.java | 75 ++-
.../juneau/config/internal/ConfigMapEntry.java | 2 +-
.../java/org/apache/juneau/json/JsonWriter.java | 4 +-
.../juneau/oapi/OpenApiSerializerSession.java | 10 +-
.../juneau/objecttools/NumberMatcherFactory.java | 6 +-
.../juneau/objecttools/StringMatcherFactory.java | 8 +-
.../juneau/objecttools/TimeMatcherFactory.java | 4 +-
.../org/apache/juneau/svl/VarResolverSession.java | 4 +-
.../org/apache/juneau/uon/UonParserSession.java | 4 +-
.../main/java/org/apache/juneau/uon/UonUtils.java | 4 +-
.../main/java/org/apache/juneau/uon/UonWriter.java | 4 +-
.../juneau/utils/StringExpressionMatcher.java | 6 +-
.../org/apache/juneau/rest/guard/RoleMatcher.java | 6 +-
...{AnnotationsTest.java => Annotations_Test.java} | 45 +-
.../{BasicBeanTests.java => BasicBeans_Test.java} | 45 +-
.../{BeanConfigTest.java => BeanConfig_Test.java} | 612 ++++++++-------------
.../java/org/apache/juneau/SimpleTestBase.java | 260 ++++-----
.../a/rttests/RoundTripBeanPropertiesTest.java | 4 -
.../org/apache/juneau/reflect/ClassInfoTest.java | 2 +-
.../utils/{CharSetTest.java => AsciiSet_Test.java} | 15 +-
.../org/apache/juneau/utils/StringUtilsTest.java | 527 +++++++-----------
23 files changed, 872 insertions(+), 959 deletions(-)
diff --git
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/AsciiSet.java
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/AsciiSet.java
index 8a8618443..97a4b546f 100644
---
a/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/AsciiSet.java
+++
b/juneau-core/juneau-common/src/main/java/org/apache/juneau/common/internal/AsciiSet.java
@@ -29,7 +29,7 @@ public final class AsciiSet {
* @param chars The characters to keep in this store.
* @return A new object.
*/
- public static AsciiSet create(String chars) {
+ public static AsciiSet of(String chars) {
return new Builder().chars(chars).build();
}
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 94297bda1..10d8f1075 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
@@ -17,6 +17,7 @@ import static org.apache.juneau.common.internal.IOUtils.*;
import static org.apache.juneau.common.internal.ThrowableUtils.*;
import static java.nio.charset.StandardCharsets.*;
import static java.lang.Character.*;
+import static org.apache.juneau.common.internal.Utils.*;
import java.io.*;
import java.lang.reflect.*;
@@ -49,11 +50,11 @@ public final class StringUtils {
*/
public static final Predicate<String> NOT_EMPTY =
StringUtils::isNotEmpty;
- private static final AsciiSet numberChars =
AsciiSet.create("-xX.+-#pP0123456789abcdefABCDEF");
- private static final AsciiSet firstNumberChars
=AsciiSet.create("+-.#0123456789");
- private static final AsciiSet octChars = AsciiSet.create("01234567");
- private static final AsciiSet decChars = AsciiSet.create("0123456789");
- private static final AsciiSet hexChars =
AsciiSet.create("0123456789abcdefABCDEF");
+ private static final AsciiSet numberChars =
AsciiSet.of("-xX.+-#pP0123456789abcdefABCDEF");
+ private static final AsciiSet firstNumberChars
=AsciiSet.of("+-.#0123456789");
+ private static final AsciiSet octChars = AsciiSet.of("01234567");
+ private static final AsciiSet decChars = AsciiSet.of("0123456789");
+ private static final AsciiSet hexChars =
AsciiSet.of("0123456789abcdefABCDEF");
// Maps 6-bit nibbles to BASE64 characters.
private static final char[] base64m1 =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".toCharArray();
@@ -512,6 +513,16 @@ public final class StringUtils {
return split(s, ',');
}
+ /**
+ * Shortcut for calling <code>split(s, <js>','</js>)</code>
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s) {
+ return split2(s, ',');
+ }
+
/**
* Same as {@link #split(String)} but consumes the tokens instead of
creating an array.
*
@@ -549,6 +560,33 @@ public final class StringUtils {
return split(s, c, Integer.MAX_VALUE);
}
+ /**
+ * Splits a character-delimited string into a string array.
+ *
+ * <p>
+ * Does not split on escaped-delimiters (e.g. "\,");
+ * Resulting tokens are trimmed of whitespace.
+ *
+ * <p>
+ * <b>NOTE:</b> This behavior is different than the Jakarta equivalent.
+ * split("a,b,c",',') -> {"a","b","c"}
+ * split("a, b ,c ",',') -> {"a","b","c"}
+ * split("a,,c",',') -> {"a","","c"}
+ * split(",,",',') -> {"","",""}
+ * split("",',') -> {}
+ * split(null,',') -> null
+ * split("a,b\,c,d", ',', false) -> {"a","b\,c","d"}
+ * split("a,b\\,c,d", ',', false) -> {"a","b\","c","d"}
+ * split("a,b\,c,d", ',', true) -> {"a","b,c","d"}
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s, char c) {
+ return split2(s, c, Integer.MAX_VALUE);
+ }
+
/**
* Same as {@link #split(String,char)} but consumes the tokens instead
of creating an array.
*
@@ -595,15 +633,28 @@ public final class StringUtils {
* @return The tokens, or <jk>null</jk> if the string was null.
*/
public static String[] split(String s, char c, int limit) {
+ var l = split2(s, c, limit);
+ return l == null ? null : l.toArray(new String[l.size()]);
+ }
+
+ /**
+ * Same as {@link #split(String, char)} but limits the number of tokens
returned.
+ *
+ * @param s The string to split. Can be <jk>null</jk>.
+ * @param c The character to split on.
+ * @param limit The maximum number of tokens to return.
+ * @return The tokens, or <jk>null</jk> if the string was null.
+ */
+ public static List<String> split2(String s, char c, int limit) {
var escapeChars = getEscapeSet(c);
if (s == null)
return null; // NOSONAR - Intentional.
if (isEmpty(s))
- return new String[0];
+ return Collections.emptyList();
if (s.indexOf(c) == -1)
- return new String[]{s};
+ return Collections.singletonList(s);
var l = new LinkedList<String>();
var sArray = s.toCharArray();
@@ -627,7 +678,7 @@ public final class StringUtils {
var s3 = unEscapeChars(s2, escapeChars);
l.add(s3.trim());
- return l.toArray(new String[l.size()]);
+ return l;
}
/**
@@ -725,7 +776,7 @@ public final class StringUtils {
return m;
}
- private static final AsciiSet MAP_ESCAPE_SET = AsciiSet.create(",=\\");
+ private static final AsciiSet MAP_ESCAPE_SET = AsciiSet.of(",=\\");
/**
* Returns <jk>true</jk> if the specified string contains any of the
specified characters.
@@ -771,6 +822,117 @@ public final class StringUtils {
return splitQuoted(s, false);
}
+ /**
+ * Splits a comma-delimited list containing "nesting constructs".
+ *
+ * Nesting constructs are simple embedded "{...}" comma-delimted lists.
+ *
+ * Example:
+ * "a{b,c},d" -> ["a{b,c}","d"]
+ *
+ * Handles escapes and trims whitespace from tokens.
+ *
+ * @param s The input string.
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static List<String> splitNested(String s) {
+ var escapeChars = getEscapeSet(',');
+
+ if (s == null) return null; // NOSONAR - Intentional.
+ if (isEmpty(s)) return Collections.emptyList();
+ if (s.indexOf(',') == -1) return
Collections.singletonList(trim(s));
+
+ var l = new LinkedList<String>();
+
+ var x1 = 0;
+ var inEscape = false;
+ var depthCount = 0;
+
+ for (var i = 0; i < s.length(); i++) {
+ var c = s.charAt(i);
+ if (inEscape) {
+ if (c == '\\') {
+ inEscape = false;
+ }
+ } else {
+ if (c == '\\') {
+ inEscape = true;
+ } else if (c == '{') {
+ depthCount++;
+ } else if (c == '}') {
+ depthCount--;
+ } else if (c == ',' && depthCount == 0) {
+
l.add(trim(unEscapeChars(s.substring(x1, i), escapeChars)));
+ x1 = i+1;
+ }
+ }
+ }
+ l.add(trim(unEscapeChars(s.substring(x1, s.length()),
escapeChars)));
+
+ return l;
+ }
+
+ /**
+ * Splits a nested comma-delimited list.
+ *
+ * Nesting constructs are simple embedded "{...}" comma-delimted lists.
+ *
+ * Example:
+ * "a{b,c{d,e}}" -> ["b","c{d,e}"]
+ *
+ * Handles escapes and trims whitespace from tokens.
+ *
+ * @param s The input string.
+ * The results, or <jk>null</jk> if the input was <jk>null</jk>.
+ * <br>An empty string results in an empty array.
+ */
+ public static List<String> splitNestedInner(String s) {
+ if (s == null) throw illegalArg("String was null.");
+ if (isEmpty(s)) throw illegalArg("String was empty.");
+
+ final int
+ S1 = 1, // Looking for '{'
+ S2 = 2; // Found '{', looking for '}'
+
+ var start = -1;
+ var end = -1;
+ var state = S1;
+ var depth = 0;
+ var inEscape = false;
+
+ for (var i = 0; i < s.length(); i++) {
+ var c = s.charAt(i);
+ if (inEscape) {
+ if (c == '\\') {
+ inEscape = false;
+ }
+ } else {
+ if (c == '\\') {
+ inEscape = true;
+ } else if (state == S1) {
+ if (c == '{') {
+ start = i+1;
+ state = S2;
+ }
+ } else /* state == S2 */ {
+ if (c == '{') {
+ depth++;
+ } else if (depth > 0 && c == '}') {
+ depth--;
+ } else if (c == '}') {
+ end = i;
+ break;
+ }
+ }
+ }
+ }
+
+ if (start == -1) throw illegalArg("Start character '{' not
found in string.", s);
+ if (end == -1) throw illegalArg("End character '}' not found in
string.", s);
+ return splitNested(s.substring(start, end));
+ }
+
/**
* Same as {@link #splitQuoted(String)} but allows you to optionally
keep the quote characters.
*
@@ -850,7 +1012,7 @@ public final class StringUtils {
return l.toArray(new String[l.size()]);
}
- private static final AsciiSet QUOTE_ESCAPE_SET =
AsciiSet.create("\"'\\");
+ private static final AsciiSet QUOTE_ESCAPE_SET = AsciiSet.of("\"'\\");
/**
* Returns <jk>true</jk> if specified string is <jk>null</jk> or empty.
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 df57c6237..aaee109d1 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
@@ -559,17 +559,10 @@ public class Utils {
return result;
}
- private static final AsciiSet QUOTE_ESCAPE_SET =
AsciiSet.create("\"'\\");
- private static final AsciiSet COMMA_ESCAPE_SET = AsciiSet.create(",");
+ private static final AsciiSet QUOTE_ESCAPE_SET = AsciiSet.of("\"'\\");
+ private static final AsciiSet COMMA_ESCAPE_SET = AsciiSet.of(",");
- /**
- * Creates a supplier for a runtime exception.
- */
- public static Supplier<RuntimeException> runtimeException(String msg,
Object...args) {
- return () -> new RuntimeException(MessageFormat.format(msg,
args));
- }
-
/**
* Takes a supplier of anything and turns it into a Supplier<String>.
* Useful when passing arguments to the logger.
@@ -655,7 +648,42 @@ public class Utils {
return val == null ? null : val.toString();
}
- private static final AsciiSet ESCAPE_SET = AsciiSet.create(",=");
+ private static final AsciiSet ESCAPE_SET = AsciiSet.of(",=");
+
+ /**
+ * Shortcut for converting an object to a string.
+ */
+ public static String readable(Object o) {
+ if (o instanceof Collection)
+ return (String)
Collection.class.cast(o).stream().map(Utils::readable).collect(joining(",","[","]"));
+ if (o instanceof Map)
+ return (String)
Map.class.cast(o).entrySet().stream().map(Utils::readable).collect(joining(",","{","}"));
+ if (o instanceof Map.Entry) {
+ var e = Map.Entry.class.cast(o);
+ return readable(e.getKey()) + '=' +
readable(e.getValue());
+ }
+ if (o instanceof GregorianCalendar) {
+ return
GregorianCalendar.class.cast(o).toZonedDateTime().format(DateTimeFormatter.ISO_INSTANT);
+ }
+ if (o instanceof Date) {
+ return Date.class.cast(o).toInstant().toString();
+ }
+ if (o != null && o.getClass().isArray()) {
+ List<Object> l = list();
+ for (var i = 0; i < Array.getLength(o); i++) {
+ l.add(Array.get(o, i));
+ }
+ return readable(l);
+ }
+ return StringUtils.stringify(o);
+ }
+
+ /**
+ * Shortcut for {@link #readable(Object)}
+ */
+ public static String r(Object o) {
+ return readable(o);
+ }
/**
* Prepends '\' to the beginning of ',' and '='.
@@ -752,8 +780,8 @@ public class Utils {
* @return The same content that would normally be rendered via
<c>t.printStackTrace()</c>
*/
public static String getStackTrace(Throwable t) {
- StringWriter sw = new StringWriter();
- try (PrintWriter pw = new PrintWriter(sw)) {
+ var sw = new StringWriter();
+ try (var pw = new PrintWriter(sw)) {
t.printStackTrace(pw);
}
return sw.toString();
@@ -765,6 +793,27 @@ public class Utils {
public static String obfuscate(String s) {
if (s == null || s.length() < 2)
return "*";
- return s.substring(0, 1) + s.substring(1).replaceAll(".", "*");
+ return s.substring(0, 1) + s.substring(1).replaceAll(".", "*");
// NOSONAR
+ }
+
+ /**
+ * Returns a stream of strings from a comma-delimited string.
+ */
+ public static List<String> cdl(String value) {
+ return Arrays.asList(StringUtils.split(value));
+ }
+
+ /**
+ * Creates an {@link IllegalArgumentException}.
+ */
+ public static IllegalArgumentException illegalArg(String msg,
Object...args) {
+ return new IllegalArgumentException(args.length == 0 ? msg :
format(msg, args));
+ }
+
+ /**
+ * Creates a {@link RuntimeException}.
+ */
+ public static RuntimeException runtimeException(String msg,
Object...args) {
+ return new RuntimeException(args.length == 0 ? msg :
format(msg, args));
}
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
index b4a9679e8..b2db96c87 100644
---
a/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
+++
b/juneau-core/juneau-config/src/main/java/org/apache/juneau/config/internal/ConfigMapEntry.java
@@ -160,5 +160,5 @@ public class ConfigMapEntry {
return w;
}
- private static final AsciiSet REPLACE_CHARS = AsciiSet.create("\\#");
+ private static final AsciiSet REPLACE_CHARS = AsciiSet.of("\\#");
}
\ No newline at end of file
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonWriter.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonWriter.java
index f1b20bc44..d43761632 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonWriter.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/json/JsonWriter.java
@@ -37,8 +37,8 @@ public final class JsonWriter extends SerializerWriter {
// Characters that trigger special handling of serializing attribute
values.
private static final AsciiSet
- encodedChars = AsciiSet.create("\n\t\b\f\r'\"\\"),
- encodedChars2 = AsciiSet.create("\n\t\b\f\r'\"\\/");
+ encodedChars = AsciiSet.of("\n\t\b\f\r'\"\\"),
+ encodedChars2 = AsciiSet.of("\n\t\b\f\r'\"\\/");
private static final KeywordSet reservedWords = new KeywordSet(
"arguments","break","case","catch","class","const","continue","debugger","default","delete",
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
index de668eb31..9f90ea4cd 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/oapi/OpenApiSerializerSession.java
@@ -431,11 +431,11 @@ public class OpenApiSerializerSession extends
UonSerializerSession {
}
private static class OapiStringBuilder {
- static final AsciiSet EQ = AsciiSet.create("=\\");
- static final AsciiSet PIPE = AsciiSet.create("|\\");
- static final AsciiSet PIPE_OR_EQ = AsciiSet.create("|=\\");
- static final AsciiSet COMMA = AsciiSet.create(",\\");
- static final AsciiSet COMMA_OR_EQ = AsciiSet.create(",=\\");
+ static final AsciiSet EQ = AsciiSet.of("=\\");
+ static final AsciiSet PIPE = AsciiSet.of("|\\");
+ static final AsciiSet PIPE_OR_EQ = AsciiSet.of("|=\\");
+ static final AsciiSet COMMA = AsciiSet.of(",\\");
+ static final AsciiSet COMMA_OR_EQ = AsciiSet.of(",=\\");
private final StringBuilder sb = new StringBuilder();
private final HttpPartCollectionFormat cf;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
index 58fb9006e..c0ff14d5f 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/NumberMatcherFactory.java
@@ -64,9 +64,9 @@ public class NumberMatcherFactory extends MatcherFactory {
NumberRange[] numberRanges;
String pattern;
private static final AsciiSet
- SNUM = AsciiSet.create("-0123456789."),
- NUM = AsciiSet.create("0123456789."),
- WS = AsciiSet.create(" \t");
+ SNUM = AsciiSet.of("-0123456789."),
+ NUM = AsciiSet.of("0123456789."),
+ WS = AsciiSet.of(" \t");
public NumberMatcher(String s) {
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
index 6eb28726e..1e24be5fb 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/StringMatcherFactory.java
@@ -64,10 +64,10 @@ public class StringMatcherFactory extends MatcherFactory {
private static class StringMatcher extends AbstractMatcher {
private String pattern;
private static final AsciiSet
- META_CHARS = AsciiSet.create("*?'\""),
- SQ_CHAR = AsciiSet.create("'"),
- DQ_CHAR = AsciiSet.create("\""),
- REGEX_CHARS = AsciiSet.create("+\\[]{}()^$.");
+ META_CHARS = AsciiSet.of("*?'\""),
+ SQ_CHAR = AsciiSet.of("'"),
+ DQ_CHAR = AsciiSet.of("\""),
+ REGEX_CHARS = AsciiSet.of("+\\[]{}()^$.");
Pattern[] orPatterns, andPatterns, notPatterns;
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/TimeMatcherFactory.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/TimeMatcherFactory.java
index 7d70604f2..470b7d203 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/TimeMatcherFactory.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/objecttools/TimeMatcherFactory.java
@@ -106,8 +106,8 @@ public class TimeMatcherFactory extends MatcherFactory {
private static class TimeMatcher extends AbstractMatcher {
private static final AsciiSet
- DT = AsciiSet.create("0123456789-:T./"),
- WS = AsciiSet.create(" \t");
+ DT = AsciiSet.of("0123456789-:T./"),
+ WS = AsciiSet.of(" \t");
TimestampRange[] ranges;
List<TimestampRange> l = new LinkedList<>();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
index 7f05c5ceb..ad5cbb716 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/svl/VarResolverSession.java
@@ -362,8 +362,8 @@ public class VarResolverSession {
}
private static final AsciiSet
- AS1 = AsciiSet.create("\\{"),
- AS2 = AsciiSet.create("\\${}")
+ AS1 = AsciiSet.of("\\{"),
+ AS2 = AsciiSet.of("\\${}")
;
/**
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
index 73f2d89be..fbff67005 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonParserSession.java
@@ -49,7 +49,7 @@ public class UonParserSession extends ReaderParserSession
implements HttpPartPar
//-------------------------------------------------------------------------------------------------------------------
// Characters that need to be preceded with an escape character.
- private static final AsciiSet escapedChars =
AsciiSet.create("~'\u0001\u0002");
+ private static final AsciiSet escapedChars =
AsciiSet.of("~'\u0001\u0002");
private static final char AMP='\u0001', EQ='\u0002'; // Flags set in
reader to denote & and = characters.
@@ -887,7 +887,7 @@ public class UonParserSession extends ReaderParserSession
implements HttpPartPar
return ("null".equals(s) ? null : trim(s));
}
- private static final AsciiSet endCharsParam = AsciiSet.create(""+AMP),
endCharsNormal = AsciiSet.create(",)"+AMP);
+ private static final AsciiSet endCharsParam = AsciiSet.of(""+AMP),
endCharsNormal = AsciiSet.of(",)"+AMP);
/*
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonUtils.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonUtils.java
index 685f454aa..d1f5d36ee 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonUtils.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonUtils.java
@@ -25,8 +25,8 @@ import org.apache.juneau.common.internal.*;
*/
public final class UonUtils {
- private static final AsciiSet needsQuoteChars =
AsciiSet.create("),=\n\t\r\b\f ");
- private static final AsciiSet maybeNeedsQuotesFirstChar =
AsciiSet.create("),=\n\t\r\b\f tfn+-.#0123456789");
+ private static final AsciiSet needsQuoteChars =
AsciiSet.of("),=\n\t\r\b\f ");
+ private static final AsciiSet maybeNeedsQuotesFirstChar =
AsciiSet.of("),=\n\t\r\b\f tfn+-.#0123456789");
/**
* Returns <jk>true</jk> if the specified string needs to be quoted per
UON notation.
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonWriter.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonWriter.java
index d502c93a4..c9517a532 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonWriter.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/uon/UonWriter.java
@@ -44,9 +44,9 @@ public final class UonWriter extends SerializerWriter {
private static final AsciiSet unencodedCharsAttrName =
AsciiSet.create().ranges("a-z","A-Z","0-9").chars(";/?:@-_.!*'$(),~").build();
// Characters that need to be preceded with an escape character.
- private static final AsciiSet escapedChars = AsciiSet.create("~'");
+ private static final AsciiSet escapedChars = AsciiSet.of("~'");
- private static final AsciiSet noChars = AsciiSet.create("");
+ private static final AsciiSet noChars = AsciiSet.of("");
private static char[] hexArray = "0123456789ABCDEF".toCharArray();
diff --git
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
index a5bc3c592..871ffde79 100644
---
a/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
+++
b/juneau-core/juneau-marshall/src/main/java/org/apache/juneau/utils/StringExpressionMatcher.java
@@ -51,9 +51,9 @@ public class StringExpressionMatcher {
private final Exp exp;
private static final AsciiSet
- WS = AsciiSet.create(" \t"),
- OP = AsciiSet.create(",|&"),
- META = AsciiSet.create("*?");
+ WS = AsciiSet.of(" \t"),
+ OP = AsciiSet.of(",|&"),
+ META = AsciiSet.of("*?");
/**
* Constructor.
diff --git
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
index d3680945d..be7ca6043 100644
---
a/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
+++
b/juneau-rest/juneau-rest-server/src/main/java/org/apache/juneau/rest/guard/RoleMatcher.java
@@ -52,9 +52,9 @@ public class RoleMatcher {
private final Exp exp;
private static final AsciiSet
- WS = AsciiSet.create(" \t"),
- OP = AsciiSet.create(",|&"),
- META = AsciiSet.create("*?");
+ WS = AsciiSet.of(" \t"),
+ OP = AsciiSet.of(",|&"),
+ META = AsciiSet.of("*?");
/**
* Constructor.
diff --git a/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
b/juneau-utest/src/test/java/org/apache/juneau/Annotations_Test.java
similarity index 78%
rename from juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
rename to juneau-utest/src/test/java/org/apache/juneau/Annotations_Test.java
index 587d93de1..151fa13dc 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/AnnotationsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/Annotations_Test.java
@@ -12,24 +12,21 @@
//
***************************************************************************************************************************
package org.apache.juneau;
-import static org.apache.juneau.assertions.Assertions.*;
import static org.junit.Assert.*;
import org.apache.juneau.annotation.*;
import org.junit.jupiter.api.*;
-@SuppressWarnings("rawtypes")
-class AnnotationsTest extends SimpleTestBase {
+class Annotations_Test extends SimpleTestBase {
//====================================================================================================
// Bean with explicitly specified properties.
//====================================================================================================
@Test void testBeanWithExplicitProperties() throws Exception {
var bc = BeanContext.DEFAULT;
- BeanMap bm = null;
// Basic test
- bm =
bc.newBeanMap(Person1.class).load("{age:21,name:'foobar'}");
+ var bm =
bc.newBeanMap(Person1.class).load("{age:21,name:'foobar'}");
assertNotNull(bm);
assertNotNull(bm.getBean());
assertEquals(21, bm.get("age"));
@@ -37,8 +34,8 @@ class AnnotationsTest extends SimpleTestBase {
bm.put("age", 65);
bm.put("name", "futbol");
- assertEquals(65, bm.get("age"));
- assertEquals("futbol", bm.get("name"));
+ assertMap(bm, "name,age", "futbol,65");
+ assertBean(bm.getBean(), "name,age", "futbol,65");
}
/** Class with explicitly specified properties */
@@ -55,11 +52,10 @@ class AnnotationsTest extends SimpleTestBase {
}
@Test void testBeanWithExplicitProperties2() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
- BeanMap bm = null;
+ var bc = BeanContext.DEFAULT;
// Basic test
- bm =
bc.newBeanMap(Person2.class).load("{age:21,name:'foobar'}");
+ var bm =
bc.newBeanMap(Person2.class).load("{age:21,name:'foobar'}");
assertNotNull(bm);
assertNotNull(bm.getBean());
assertEquals(21, bm.get("age"));
@@ -67,8 +63,8 @@ class AnnotationsTest extends SimpleTestBase {
bm.put("age", 65);
bm.put("name", "futbol");
- assertEquals(65, bm.get("age"));
- assertEquals("futbol", bm.get("name"));
+ assertMap(bm, "name,age", "futbol,65");
+ assertBean(bm.getBean(), "name,age", "futbol,65");
}
/** Class with explicitly specified properties */
@@ -85,11 +81,10 @@ class AnnotationsTest extends SimpleTestBase {
}
@Test void testBeanWithExplicitProperties3() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
- BeanMap bm = null;
+ var bc = BeanContext.DEFAULT;
// Basic test
- bm =
bc.newBeanMap(Person3.class).load("{age:21,name:'foobar'}");
+ var bm =
bc.newBeanMap(Person3.class).load("{age:21,name:'foobar'}");
assertNotNull(bm);
assertNotNull(bm.getBean());
assertEquals(21, bm.get("age"));
@@ -97,8 +92,8 @@ class AnnotationsTest extends SimpleTestBase {
bm.put("age", 65);
bm.put("name", "futbol");
- assertEquals(65, bm.get("age"));
- assertEquals("futbol", bm.get("name"));
+ assertMap(bm, "name,age", "futbol,65");
+ assertBean(bm.getBean(), "name,age", "futbol,65");
}
/** Class with explicitly specified properties */
@@ -115,11 +110,10 @@ class AnnotationsTest extends SimpleTestBase {
}
@Test void testBeanWithExplicitProperties_usingConfig() throws
Exception {
- BeanContext bc =
BeanContext.DEFAULT.copy().applyAnnotations(PersonConfig.class).build();
- BeanMap bm = null;
+ var bc =
BeanContext.DEFAULT.copy().applyAnnotations(PersonConfig.class).build();
// Basic test
- bm =
bc.newBeanMap(Person4.class).load("{age:21,name:'foobar'}");
+ var bm =
bc.newBeanMap(Person4.class).load("{age:21,name:'foobar'}");
assertNotNull(bm);
assertNotNull(bm.getBean());
assertEquals(21, bm.get("age"));
@@ -127,8 +121,8 @@ class AnnotationsTest extends SimpleTestBase {
bm.put("age", 65);
bm.put("name", "futbol");
- assertEquals(65, bm.get("age"));
- assertEquals("futbol", bm.get("name"));
+ assertMap(bm, "name,age", "futbol,65");
+ assertBean(bm.getBean(), "name,age", "futbol,65");
}
/** Class with explicitly specified properties */
@@ -150,14 +144,13 @@ class AnnotationsTest extends SimpleTestBase {
// Private/protected/default fields should be ignored.
//====================================================================================================
@Test void testForOnlyPublicFields() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
- BeanMap bm = null;
+ var bc = BeanContext.DEFAULT;
// Make sure only public fields are detected
- bm = bc.newBeanMap(A.class).load("{publicField:123}");
+ var bm = bc.newBeanMap(A.class).load("{publicField:123}");
assertNotNull("F1", bm);
assertNotNull("F2", bm.getBean());
- assertObject(bm.getBean()).asJson().is("{publicField:123}");
+ assertJson(bm.getBean(), "{publicField:123}");
}
public static class A {
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
b/juneau-utest/src/test/java/org/apache/juneau/BasicBeans_Test.java
similarity index 73%
rename from juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
rename to juneau-utest/src/test/java/org/apache/juneau/BasicBeans_Test.java
index 264cb4aa4..407ae1934 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/BasicBeanTests.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BasicBeans_Test.java
@@ -12,18 +12,14 @@
//
***************************************************************************************************************************
package org.apache.juneau;
-import static org.apache.juneau.assertions.Assertions.*;
-import static org.junit.runners.MethodSorters.*;
-
import java.beans.*;
import java.util.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.json.*;
-import org.junit.*;
+import org.junit.jupiter.api.*;
-@FixMethodOrder(NAME_ASCENDING)
-public class BasicBeanTests {
+class BasicBeans_Test extends SimpleTestBase {
//------------------------------------------------------------------------------------------------------------------
// Beans with transient fields and methods.
@@ -34,7 +30,7 @@ public class BasicBeanTests {
public transient int f2;
public static A1 create() {
- A1 x = new A1();
+ var x = new A1();
x.f1 = 1;
x.f2 = 2;
return x;
@@ -44,21 +40,18 @@ public class BasicBeanTests {
@BeanConfig(disableIgnoreTransientFields="true")
public static class A {}
- @Test
- public void a01_testTransientFieldsIgnored() {
- assertObject(A1.create()).asJson().is("{f1:1}");
+ @Test void a01_testTransientFieldsIgnored() {
+ assertJson(A1.create(), "{f1:1}");
}
- @Test
- public void a02_testTransientFieldsIgnored_overrideSetting() {
- JsonSerializer s =
Json5Serializer.DEFAULT.copy().disableIgnoreTransientFields().build();
- assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
+ @Test void a02_testTransientFieldsIgnored_overrideSetting() {
+ var s =
Json5Serializer.DEFAULT.copy().disableIgnoreTransientFields().build();
+ assertSerialized(A1.create(), s, "{f1:1,f2:2}");
}
- @Test
- public void a03_testTransientFieldsIgnored_overrideAnnotation() {
- JsonSerializer s =
Json5Serializer.DEFAULT.copy().applyAnnotations(A.class).build();
- assertObject(A1.create()).asString(s).is("{f1:1,f2:2}");
+ @Test void a03_testTransientFieldsIgnored_overrideAnnotation() {
+ var s =
Json5Serializer.DEFAULT.copy().applyAnnotations(A.class).build();
+ assertSerialized(A1.create(), s, "{f1:1,f2:2}");
}
public static class A2 {
@@ -76,16 +69,15 @@ public class BasicBeanTests {
}
public static A2 create() {
- A2 x = new A2();
+ var x = new A2();
x.f1 = 1;
x.f2 = 2;
return x;
}
}
- @Test
- public void a04_testTransientMethodsIgnored() {
- assertObject(A2.create()).asJson().is("{f1:1}");
+ @Test void a04_testTransientMethodsIgnored() {
+ assertJson(A2.create(), "{f1:1}");
}
//------------------------------------------------------------------------------------------------------------------
@@ -97,17 +89,16 @@ public class BasicBeanTests {
public Map<String,Integer> f1 = new TreeMap<>();
public static B create() {
- B x = new B();
+ var x = new B();
x.f1.put("a", 1);
return x;
}
}
- @Test
- public void b01_beanWithDynaProperty() throws Exception {
- assertObject(B.create()).asJson().is("{a:1}");
+ @Test void b01_beanWithDynaProperty() throws Exception {
+ assertJson(B.create(), "{a:1}");
B b = JsonParser.DEFAULT.parse("{a:1}", B.class);
- assertObject(b).asJson().is("{a:1}");
+ assertJson(b, "{a:1}");
}
}
\ No newline at end of file
diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
b/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java
similarity index 52%
rename from juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
rename to juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java
index 493d8e573..2570bc392 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/BeanConfigTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java
@@ -12,13 +12,14 @@
//
***************************************************************************************************************************
package org.apache.juneau;
-import static org.apache.juneau.assertions.Assertions.*;
-import static org.apache.juneau.internal.CollectionUtils.*;
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
+import static org.apache.juneau.Visibility.*;
+import static org.apache.juneau.common.internal.Utils.*;
+import static org.apache.juneau.internal.CollectionUtils.map;
+import static org.junit.jupiter.api.Assertions.*;
import java.io.*;
import java.lang.reflect.*;
+import java.time.*;
import java.util.*;
import org.apache.juneau.annotation.*;
@@ -26,107 +27,75 @@ import org.apache.juneau.collections.*;
import org.apache.juneau.json.*;
import org.apache.juneau.parser.*;
import org.apache.juneau.swap.*;
-import org.junit.*;
+import org.junit.jupiter.api.*;
@SuppressWarnings("rawtypes")
-@FixMethodOrder(NAME_ASCENDING)
-public class BeanConfigTest {
+class BeanConfig_Test extends SimpleTestBase {
//====================================================================================================
// testBasic
//====================================================================================================
- @Test
- public void testBasic() {
+ @Test void a01_basic() {
- BeanContext bc = BeanContext.DEFAULT;
+ var bc = BeanContext.DEFAULT;
- Person p1 = new Person();
+ var p1 = new Person();
p1.setName("John Doe");
p1.setAge(25);
- Address a = new Address("101 Main St.", "Las Vegas", "NV",
"89101");
- AddressablePerson p2 = new AddressablePerson();
+ var a = new Address("101 Main St.", "Las Vegas", "NV", "89101");
+ var p2 = new AddressablePerson();
p2.setName("Jane Doe");
p2.setAge(21);
p2.setAddress(a);
// setup the reference results
- Map m1 = new LinkedHashMap();
+ var m1 = new LinkedHashMap();
m1.put("name", p1.getName());
m1.put("age", Integer.valueOf(p1.getAge()));
- Map m2 = new LinkedHashMap();
+ var m2 = new LinkedHashMap();
m2.put("street", a.getStreet());
m2.put("city", a.getCity());
m2.put("state", a.getState());
m2.put("zip", a.getZip());
- Map m3 = new LinkedHashMap();
+ var m3 = new LinkedHashMap();
m3.put("name", p2.getName());
m3.put("age", Integer.valueOf(p2.getAge()));
m3.put("address", p2.getAddress());
- Map pm1 = bc.toBeanMap(p1);
+ var pm1 = bc.toBeanMap(p1);
- if (pm1.size() != m1.size())
- fail("Bean Map size failed for: " + p1 + " / " +
pm1.size()+ " / " + m1.size());
+ assertEquals(pm1.size(), m1.size(), ss("Bean Map size failed
for: {0} / {1} / {2}", p1, pm1.size(), m1.size()));
+ assertEquals(pm1.keySet(), m1.keySet(), ss("Bean Map key set
equality failed for: {0} / {1} / {2}", p1, pm1.keySet() , m1.keySet()));
+ assertEquals(m1.keySet(), pm1.keySet(), ss("Bean Map key set
reverse equality failed for: {0} / {1} / {2}", p1, pm1.keySet(), m1.keySet()));
+ assertEquals(pm1, m1, ss("Bean Map equality failed for: {0} /
{1} / {2}", p1, pm1, m1)); // NOSONAR
+ assertThrows(BeanRuntimeException.class,
()->bc.newBeanMap(Address.class)); // Address returned as a new bean type, but
shouldn't be since it doesn't have a default constructor.
+ assertNull(bc.newBeanMap(java.lang.Integer.class),
"java.lang.Integer incorrectly designated as bean type.");
+ assertNull(bc.newBeanMap(java.lang.Class.class),
"java.lang.Class incorrectly designated as bean type.");
- if (!pm1.keySet().equals(m1.keySet()))
- fail("Bean Map key set equality failed for: " + p1 + "
/ " + pm1.keySet() + " / " + m1.keySet());
+ var bm1 = bc.toBeanMap(new Address("street", "city", "state",
"zip"));
- if (!m1.keySet().equals(pm1.keySet()))
- fail("Bean Map key set reverse equality failed for: " +
p1 + " / " + pm1.keySet() + " / " + m1.keySet());
+ assertEquals(bm1.size(), m2.size(), ss("Bean Adapter map's key
set has wrong size: {0} / {1} / {2}", a, bm1.size(), m2.size()));
- if (!pm1.equals(m1))
- fail("Bean Map equality failed for: " + p1 + " / " +
pm1 + " / " + m1);
-
- if (!m1.equals(pm1))
- fail("Bean Map reverse equality failed for: " + p1 + "
/ " + pm1 + " / " + m1);
-
- BeanMap bm1 = null;
- // Address returned as a new bean type, but shouldn't be since
it doesn't have a default constructor.
-
assertThrown(()->bc.newBeanMap(Address.class)).isType(BeanRuntimeException.class);
- bm1 = bc.toBeanMap(new Address("street", "city", "state",
"zip"));
-
- BeanMap bm2 = bc.newBeanMap(java.lang.Integer.class);
- if (bm2 != null)
- fail("java.lang.Integer incorrectly desingated as bean
type.");
-
- BeanMap bm3 = bc.newBeanMap(java.lang.Class.class);
- if (bm3 != null)
- fail("java.lang.Class incorrectly desingated as bean
type.");
-
- Map m4 = bm1;
- if (m4.size() != m2.size())
- fail("Bean Adapter map's key set has wrong size: " + a
+ " / " + m4.size() + " / " + m2.size());
-
- Iterator iter = m4.keySet().iterator();
- Set temp = new HashSet();
- int count = 0;
+ var iter = bm1.keySet().iterator();
+ var temp = new HashSet();
+ var count = 0;
while (iter.hasNext()) {
temp.add(iter.next());
count++;
}
- if (count != m2.size())
- fail("Iteration count over bean adpater key set failed:
" + a + " / " + count + " / " + m2.size());
-
- if (!m2.keySet().equals(temp))
- fail("Iteration over bean adpater key set failed: " + a
+ " / " + m4.keySet() + " / " + m2.keySet());
- BeanMap bm4 = bc.toBeanMap(p2);
- if (bm4 == null) {
- fail("Failed to identify class as bean type: " +
p2.getClass());
- return;
- }
+ assertEquals(count, m2.size(), ss("Iteration count over bean
adpater key set failed: {0} / {1} / {2}", a, count, m2.size()));
+ assertEquals(m2.keySet(), temp, ss("Iteration over bean adpater
key set failed: {0} / {1} / {2}", a, bm1.keySet(), m2.keySet()));
+ assertNotNull(bc.toBeanMap(p2), ss("Failed to identify class as
bean type: {0}", p2.getClass()));
- Map m5 = bm4;
+ var m5 = bc.toBeanMap(p2);
Set es1 = m5.entrySet();
- if (!es1.equals(m3.entrySet()))
- fail("Entry set equality failed: " + p2 + " / " + es1 +
" / " + m3.entrySet());
-
- if (!m3.entrySet().equals(es1))
- fail("Entry set reverse equality failed: " + p2 + " / "
+ es1 + " / " + m3.entrySet());
+ assertEquals(es1, m3.entrySet(), ss("Entry set equality failed:
{0} / {1} / {2}", p2, es1, m3.entrySet()));
+ assertEquals(m3.entrySet(), es1, ss("Entry set reverse equality
failed: {0} / {1} / {2}", p2, es1, m3.entrySet()));
iter = es1.iterator();
temp = new HashSet();
@@ -135,11 +104,9 @@ public class BeanConfigTest {
temp.add(iter.next());
count++;
}
- if (count != m3.size())
- fail("Iteration count over bean adpater entry set
failed: " + a + " / " + count + " / " + m3.size());
- if (!m3.entrySet().equals(temp))
- fail("Iteration over bean adpater entry set failed: " +
a + " / " + es1 + " / " + m3.entrySet());
+ assertEquals(count, m3.size(), ss("Iteration count over bean
adpater entry set failed: {0} / {1} / {2}", a, count, m3.size()));
+ assertEquals(m3.entrySet(), temp, ss("Iteration over bean
adpater entry set failed: {0} / {1} / {2}", a, es1, m3.entrySet()));
}
public static class Person {
@@ -147,30 +114,29 @@ public class BeanConfigTest {
private int age;
public Person() {
- this.name = null;
- this.age = -1;
+ name = null;
+ age = -1;
}
public String getName() {
- return this.name;
+ return name;
}
- public void setName(String name) {
- this.name = name;
+ public void setName(String v) {
+ name = v;
}
public int getAge() {
- return this.age;
+ return age;
}
- public void setAge(int age) {
- this.age = age;
+ public void setAge(int v) {
+ age = v;
}
@Override /* Object */
public String toString() {
- return ("Person(name: " + this.getName() + ", age: "
- + this.getAge() + ")");
+ return format("Person(name: {0}, age: {1})", name, age);
}
}
@@ -188,70 +154,34 @@ public class BeanConfigTest {
}
public String getStreet() {
- return this.street;
+ return street;
}
public String getCity() {
- return this.city;
+ return city;
}
public String getState() {
- return this.state;
+ return state;
}
public String getZip() {
- return this.zip;
+ return zip;
}
@Override /* Object */
public boolean equals(Object o) {
- if (o == null)
- return false;
- if (this == o)
- return true;
- if (this.getClass() != o.getClass())
- return false;
- Address a = (Address) o;
-
- String v1 = this.getStreet();
- String v2 = a.getStreet();
- if ((v1 == null) ? (v2 != null) : (!v1.equals(v2)))
- return false;
-
- v1 = this.getCity();
- v2 = a.getCity();
- if ((v1 == null) ? (v2 != null) : (!v1.equals(v2)))
- return false;
-
- v1 = this.getState();
- v2 = a.getState();
- if ((v1 == null) ? (v2 != null) : (!v1.equals(v2)))
- return false;
-
- v1 = this.getZip();
- v2 = a.getZip();
- return ((v1 == null) ? (v2 == null) : (v1.equals(v2)));
+ return eq(this, (Address)o, (x,y) -> eq(x.getStreet(),
y.getStreet()) && eq(x.getCity(), y.getCity()) && eq(x.getState(),
y.getState()) && eq(x.getZip(), y.getZip()));
}
@Override /* Object */
public int hashCode() {
- int code = 0;
- if (this.street != null)
- code ^= this.street.hashCode();
- if (this.city != null)
- code ^= this.city.hashCode();
- if (this.state != null)
- code ^= this.state.hashCode();
- if (this.zip != null)
- code ^= this.zip.hashCode();
- return code;
+ return hash(street, city, state, zip);
}
@Override /* Object */
public String toString() {
- return ("Address(street: " + this.getStreet() + ",
city: "
- + this.getCity() + ", state: " +
this.getState()
- + ", zip: " + this.getZip() + ")");
+ return format("Address(street: {0}, city: {1}, state:
{2}, zip: {3})", street, city, state, zip);
}
}
@@ -263,11 +193,11 @@ public class BeanConfigTest {
}
public Address getAddress() {
- return this.address;
+ return address;
}
- public void setAddress(Address addr) {
- this.address = addr;
+ public void setAddress(Address v) {
+ address = v;
}
@Override /* Object */
@@ -279,9 +209,8 @@ public class BeanConfigTest {
//====================================================================================================
// Exhaustive test of BeanContext.convertToType()
//====================================================================================================
- @Test
- public void testBeanContextConvertToType() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
+ @Test void testBeanContextConvertToType() throws Exception {
+ var bc = BeanContext.DEFAULT;
Object o;
// Primitive nulls.
@@ -345,7 +274,7 @@ public class BeanConfigTest {
// Class with Constructor(String).
o = "xxx";
- File file = bc.convertToType(o, File.class);
+ var file = bc.convertToType(o, File.class);
assertEquals("xxx", file.getName());
// List of ints to array
@@ -361,12 +290,12 @@ public class BeanConfigTest {
assertEquals("x", bc.convertToType(o,
ReadOnlyPerson[][].class)[0][0].getName());
// Array of strings to array of ints
- o = new String[] { "1", "2", "3" };
+ o = a("1", "2", "3");
assertEquals(Integer.valueOf(1), bc.convertToType(o,
Integer[].class)[0]);
assertEquals(1, bc.convertToType(o, int[].class)[0]);
// Array to list
- o = new Integer[] { 1, 2, 3 };
+ o = a(1, 2, 3);
assertEquals(Integer.valueOf(1), bc.convertToType(o,
LinkedList.class).get(0));
// HashMap to TreeMap
@@ -381,19 +310,17 @@ public class BeanConfigTest {
assertEquals("foo", bc.convertToType(o,
Map.class).values().iterator().next());
// Array to String
- o = new Object[] { "a", 1, false };
+ o = a("a", 1, false);
assertEquals("['a',1,false]", bc.convertToType(o,
String.class));
- o = new Object[][] { { "a", 1, false } };
+ o = new Object[]{a("a", 1, false)};
assertEquals("[['a',1,false]]", bc.convertToType(o,
String.class));
-
}
//====================================================================================================
// Test properties set through a constructor.
//====================================================================================================
- @Test
- public void testReadOnlyProperties() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
+ @Test void testReadOnlyProperties() throws Exception {
+ var bc = BeanContext.DEFAULT;
Object o;
// Bean to String
@@ -405,7 +332,6 @@ public class BeanConfigTest {
assertEquals(1, bc.convertToType(o,
ReadOnlyPerson[].class)[0].getAge());
}
-
@Bean(p="name,age")
public static class ReadOnlyPerson {
private final String name;
@@ -418,22 +344,21 @@ public class BeanConfigTest {
}
public String getName() {
- return this.name;
+ return name;
}
public int getAge() {
- return this.age;
+ return age;
}
@Override /* Object */
public String toString() {
- return "toString():name=" + name + ",age=" + age;
+ return format("toString():name={0},age={1}", name, age);
}
}
- @Test
- public void testReadOnlyProperties_usingConfig() throws Exception {
- BeanContext bc =
BeanContext.DEFAULT.copy().applyAnnotations(ReadOnlyPerson2Config.class).build();
+ @Test void testReadOnlyProperties_usingConfig() throws Exception {
+ var bc =
BeanContext.DEFAULT.copy().applyAnnotations(ReadOnlyPerson2Config.class).build();
Object o;
// Bean to String
@@ -445,28 +370,26 @@ public class BeanConfigTest {
assertEquals(1, bc.convertToType(o,
ReadOnlyPerson2[].class)[0].getAge());
}
-
public static class ReadOnlyPerson2 {
private final String name;
private final int age;
-
public ReadOnlyPerson2(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
- return this.name;
+ return name;
}
public int getAge() {
- return this.age;
+ return age;
}
@Override /* Object */
public String toString() {
- return "toString():name=" + name + ",age=" + age;
+ return format("toString():name={0},age={1}", name, age);
}
}
@@ -481,9 +404,8 @@ public class BeanConfigTest {
//====================================================================================================
// testEnums
//====================================================================================================
- @Test
- public void testEnums() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
+ @Test void testEnums() throws Exception {
+ var bc = BeanContext.DEFAULT;
Object o;
// Enum
@@ -492,7 +414,7 @@ public class BeanConfigTest {
assertEquals("ENUM2", bc.convertToType(TestEnum.ENUM2,
String.class));
// Array of enums
- o = new String[] { "ENUM2" };
+ o = a("ENUM2");
assertEquals(TestEnum.ENUM2, bc.convertToType(o,
TestEnum[].class)[0]);
}
@@ -503,41 +425,26 @@ public class BeanConfigTest {
//====================================================================================================
// testProxyHandler
//====================================================================================================
- @Test
- public void testProxyHandler() {
- BeanSession session = BeanContext.DEFAULT_SESSION;
-
- A f1 = (A) Proxy.newProxyInstance(this.getClass()
- .getClassLoader(), new Class[] { A.class },
- new AHandler());
-
- BeanMap bm1 = session.toBeanMap(f1);
- if (bm1 == null) {
- fail("Failed to obtain bean adapter for proxy: " + f1);
- return;
- }
+ @Test void testProxyHandler() {
+ var session = BeanContext.DEFAULT_SESSION;
+
+ var f1 = (A)
Proxy.newProxyInstance(this.getClass().getClassLoader(), new Class[] { A.class
}, new AHandler());
+
+ var bm1 = session.toBeanMap(f1);
+ assertNotNull(bm1, ss("Failed to obtain bean adapter for proxy:
{0}", f1));
+
+ var bm2 = session.newBeanMap(A.class);
+ assertNotNull(bm2, ss("Failed to create dynamic proxy bean for
interface: {0}", A.class.getName()));
- BeanMap bm2 = session.newBeanMap(A.class);
- if (bm2 == null) {
- fail("Failed to create dynamic proxy bean for
interface: " + A.class.getName());
- return;
- }
bm2.put("a", "Hello");
bm2.put("b", Integer.valueOf(50));
f1.setA("Hello");
f1.setB(50);
- if (!bm2.get("a").equals("Hello"))
- fail("Failed to set string property 'a' on dynamic
proxy bean. " + bm2);
-
- if (!bm2.get("b").equals(Integer.valueOf(50)))
- fail("Failed to set string property 'b' on dynamic
proxy bean. " + bm2);
-
- if (!bm1.equals(bm2))
- fail("Failed equality test of dynamic proxies beans: "
+ bm1 + " / " + bm2);
-
- if (!bm2.equals(bm1))
- fail("Failed reverse equality test of dynamic proxies
beans: " + bm1 + " / " + bm2);
+ assertEquals(bm2.get("a"), "Hello", ss("Failed to set string
property 'a' on dynamic proxy bean. {0}", bm2)); // NOSONAR
+ assertEquals(bm2.get("b"), Integer.valueOf(50), ss("Failed to
set string property 'b' on dynamic proxy bean. {0}", bm2));
+ assertEquals(bm1, bm2, ss("Failed equality test of dynamic
proxies beans: {0} / {1}", bm1, bm2));
+ assertEquals(bm2, bm1, ss("Failed reverse equality test of
dynamic proxies beans: {0} / {1}", bm1, bm2));
}
public interface A {
@@ -554,31 +461,30 @@ public class BeanConfigTest {
private Map map;
public AHandler() {
- this.map = new HashMap();
- this.map.put("a", "");
- this.map.put("b", Integer.valueOf(0));
+ map = new HashMap();
+ map.put("a", "");
+ map.put("b", Integer.valueOf(0));
}
@Override /* InvocationHandler */
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- String methodName = method.getName();
+ public Object invoke(Object proxy, Method method, Object[]
args) throws Throwable {
+ var methodName = method.getName();
if (methodName.equals("getA")) {
- return this.map.get("a");
+ return map.get("a");
}
if (methodName.equals("setA")) {
- this.map.put("a", args[0]);
+ map.put("a", args[0]);
return null;
}
if (methodName.equals("getB")) {
- return this.map.get("b");
+ return map.get("b");
}
if (methodName.equals("setB")) {
- this.map.put("b", args[0]);
+ map.put("b", args[0]);
return null;
}
if (methodName.equals("toString")) {
- return this.map.toString();
+ return map.toString();
}
return null;
}
@@ -587,10 +493,9 @@ public class BeanConfigTest {
//====================================================================================================
// testFluentStyleSetters
//====================================================================================================
- @Test
- public void testFluentStyleSetters() {
- B2 t = new B2().init();
- BeanMap m = BeanContext.DEFAULT.toBeanMap(t);
+ @Test void testFluentStyleSetters() {
+ var t = new B2().init();
+ var m = BeanContext.DEFAULT.toBeanMap(t);
m.put("f1", 2);
assertEquals(2, t.f1);
}
@@ -598,181 +503,110 @@ public class BeanConfigTest {
public static class B {
int f1;
public int getF1() { return f1; }
- public B setF1(int f1) { this.f1 = f1; return this; }
+ public B setF1(int v) { f1 = v; return this; }
}
public static class B2 extends B {
@Override /* B */
- public B2 setF1(int f1) { this.f1 = f1; return this; }
- public B2 init() { this.f1 = 1; return this;}
+ public B2 setF1(int v) { f1 = v; return this; }
+ public B2 init() { f1 = 1; return this;}
}
//====================================================================================================
// testClassMetaCaching
//====================================================================================================
- @Test
- public void testClassMetaCaching() {
- Parser.Builder p1, p2;
-
- p1 = JsonParser.create();
- p2 = JsonParser.create();
- assertSameCache(p1, p2);
-
- p1.beansRequireDefaultConstructor();
- assertDifferentCache(p1, p2);
- p2.beansRequireDefaultConstructor();
- assertSameCache(p1, p2);
-
- p1.beansRequireSerializable();
- assertDifferentCache(p1, p2);
- p2.beansRequireSerializable();
- assertSameCache(p1, p2);
-
- p1.beansRequireSettersForGetters();
- assertDifferentCache(p1, p2);
- p2.beansRequireSettersForGetters();
- assertSameCache(p1, p2);
-
- p1.disableBeansRequireSomeProperties();
- assertDifferentCache(p1, p2);
- p2.disableBeansRequireSomeProperties();
- assertSameCache(p1, p2);
-
- p1.beanMapPutReturnsOldValue();
- assertDifferentCache(p1, p2);
- p2.beanMapPutReturnsOldValue();
- assertSameCache(p1, p2);
-
- p1.beanConstructorVisibility(Visibility.DEFAULT);
- assertDifferentCache(p1, p2);
- p2.beanConstructorVisibility(Visibility.DEFAULT);
- assertSameCache(p1, p2);
- p1.beanConstructorVisibility(Visibility.NONE);
- assertDifferentCache(p1, p2);
- p2.beanConstructorVisibility(Visibility.NONE);
- assertSameCache(p1, p2);
- p1.beanConstructorVisibility(Visibility.PRIVATE);
- assertDifferentCache(p1, p2);
- p2.beanConstructorVisibility(Visibility.PRIVATE);
- assertSameCache(p1, p2);
- p1.beanConstructorVisibility(Visibility.PROTECTED);
- assertDifferentCache(p1, p2);
- p2.beanConstructorVisibility(Visibility.PROTECTED);
- assertSameCache(p1, p2);
-
- p1.beanClassVisibility(Visibility.DEFAULT);
- assertDifferentCache(p1, p2);
- p2.beanClassVisibility(Visibility.DEFAULT);
- assertSameCache(p1, p2);
- p1.beanClassVisibility(Visibility.NONE);
- assertDifferentCache(p1, p2);
- p2.beanClassVisibility(Visibility.NONE);
- assertSameCache(p1, p2);
- p1.beanClassVisibility(Visibility.PRIVATE);
- assertDifferentCache(p1, p2);
- p2.beanClassVisibility(Visibility.PRIVATE);
- assertSameCache(p1, p2);
- p1.beanClassVisibility(Visibility.PROTECTED);
- assertDifferentCache(p1, p2);
- p2.beanClassVisibility(Visibility.PROTECTED);
- assertSameCache(p1, p2);
-
- p1.beanFieldVisibility(Visibility.DEFAULT);
- assertDifferentCache(p1, p2);
- p2.beanFieldVisibility(Visibility.DEFAULT);
- assertSameCache(p1, p2);
- p1.beanFieldVisibility(Visibility.NONE);
- assertDifferentCache(p1, p2);
- p2.beanFieldVisibility(Visibility.NONE);
- assertSameCache(p1, p2);
- p1.beanFieldVisibility(Visibility.PRIVATE);
- assertDifferentCache(p1, p2);
- p2.beanFieldVisibility(Visibility.PRIVATE);
- assertSameCache(p1, p2);
- p1.beanFieldVisibility(Visibility.PROTECTED);
- assertDifferentCache(p1, p2);
- p2.beanFieldVisibility(Visibility.PROTECTED);
- assertSameCache(p1, p2);
-
- p1.beanMethodVisibility(Visibility.DEFAULT);
- assertDifferentCache(p1, p2);
- p2.beanMethodVisibility(Visibility.DEFAULT);
- assertSameCache(p1, p2);
- p1.beanMethodVisibility(Visibility.NONE);
- assertDifferentCache(p1, p2);
- p2.beanMethodVisibility(Visibility.NONE);
- assertSameCache(p1, p2);
- p1.beanMethodVisibility(Visibility.PRIVATE);
- assertDifferentCache(p1, p2);
- p2.beanMethodVisibility(Visibility.PRIVATE);
- assertSameCache(p1, p2);
- p1.beanMethodVisibility(Visibility.PROTECTED);
- assertDifferentCache(p1, p2);
- p2.beanMethodVisibility(Visibility.PROTECTED);
- assertSameCache(p1, p2);
-
- p1.useJavaBeanIntrospector();
- assertDifferentCache(p1, p2);
- p2.useJavaBeanIntrospector();
- assertSameCache(p1, p2);
-
- p1.disableInterfaceProxies();
- assertDifferentCache(p1, p2);
- p2.disableInterfaceProxies();
- assertSameCache(p1, p2);
-
- p1.ignoreUnknownBeanProperties();
- assertDifferentCache(p1, p2);
- p2.ignoreUnknownBeanProperties();
- assertSameCache(p1, p2);
-
- p1.disableIgnoreUnknownNullBeanProperties();
- assertDifferentCache(p1, p2);
- p2.disableIgnoreUnknownNullBeanProperties();
- assertSameCache(p1, p2);
-
- p1.disableIgnoreMissingSetters();
- assertDifferentCache(p1, p2);
- p2.disableIgnoreMissingSetters();
- assertSameCache(p1, p2);
-
- p1.ignoreInvocationExceptionsOnGetters();
- assertDifferentCache(p1, p2);
- p2.ignoreInvocationExceptionsOnGetters();
- assertSameCache(p1, p2);
-
- p1.ignoreInvocationExceptionsOnSetters();
- assertDifferentCache(p1, p2);
- p2.ignoreInvocationExceptionsOnSetters();
- assertSameCache(p1, p2);
-
- p1.notBeanPackages("foo");
- assertDifferentCache(p1, p2);
- p2.notBeanPackages("foo");
- assertSameCache(p1, p2);
- p1.notBeanPackages("bar");
- assertDifferentCache(p1, p2);
- p2.notBeanPackages("bar");
- assertSameCache(p1, p2);
- p1.notBeanPackages("baz");
- p1.notBeanPackages("bing");
- assertDifferentCache(p1, p2);
- p2.notBeanPackages("bing");
- p2.notBeanPackages("baz");
- assertSameCache(p1, p2);
+ @Test void testClassMetaCaching() {
+ var p1 = JsonParser.create();
+ var p2 = JsonParser.create();
+ assertSameCache(p1, p2);
+
+ assertDifferentCache(p1.beansRequireDefaultConstructor(), p2);
+ assertSameCache(p1, p2.beansRequireDefaultConstructor());
+
+ assertDifferentCache(p1.beansRequireSerializable(), p2);
+ assertSameCache(p1, p2.beansRequireSerializable());
+
+ assertDifferentCache(p1.beansRequireSettersForGetters(), p2);
+ assertSameCache(p1, p2.beansRequireSettersForGetters());
+
+ assertDifferentCache(p1.disableBeansRequireSomeProperties(),
p2);
+ assertSameCache(p1, p2.disableBeansRequireSomeProperties());
+
+ assertDifferentCache(p1.beanMapPutReturnsOldValue(), p2);
+ assertSameCache(p1, p2.beanMapPutReturnsOldValue());
+
+ assertDifferentCache(p1.beanConstructorVisibility(DEFAULT), p2);
+ assertSameCache(p1, p2.beanConstructorVisibility(DEFAULT));
+ assertDifferentCache(p1.beanConstructorVisibility(NONE), p2);
+ assertSameCache(p1, p2.beanConstructorVisibility(NONE));
+ assertDifferentCache(p1.beanConstructorVisibility(PRIVATE), p2);
+ assertSameCache(p1, p2.beanConstructorVisibility(PRIVATE));
+ assertDifferentCache(p1.beanConstructorVisibility(PROTECTED),
p2);
+ assertSameCache(p1, p2.beanConstructorVisibility(PROTECTED));
+
+ assertDifferentCache(p1.beanClassVisibility(DEFAULT), p2);
+ assertSameCache(p1, p2.beanClassVisibility(DEFAULT));
+ assertDifferentCache(p1.beanClassVisibility(NONE), p2);
+ assertSameCache(p1, p2.beanClassVisibility(NONE));
+ assertDifferentCache(p1.beanClassVisibility(PRIVATE), p2);
+ assertSameCache(p1, p2.beanClassVisibility(PRIVATE));
+ assertDifferentCache(p1.beanClassVisibility(PROTECTED), p2);
+ assertSameCache(p1, p2.beanClassVisibility(PROTECTED));
+
+ assertDifferentCache(p1.beanFieldVisibility(DEFAULT), p2);
+ assertSameCache(p1, p2.beanFieldVisibility(DEFAULT));
+ assertDifferentCache(p1.beanFieldVisibility(NONE), p2);
+ assertSameCache(p1, p2.beanFieldVisibility(NONE));
+ assertDifferentCache(p1.beanFieldVisibility(PRIVATE), p2);
+ assertSameCache(p1, p2.beanFieldVisibility(PRIVATE));
+ assertDifferentCache(p1.beanFieldVisibility(PROTECTED), p2);
+ assertSameCache(p1, p2.beanFieldVisibility(PROTECTED));
+
+ assertDifferentCache(p1.beanMethodVisibility(DEFAULT), p2);
+ assertSameCache(p1, p2.beanMethodVisibility(DEFAULT));
+ assertDifferentCache(p1.beanMethodVisibility(NONE), p2);
+ assertSameCache(p1, p2.beanMethodVisibility(NONE));
+ assertDifferentCache(p1.beanMethodVisibility(PRIVATE), p2);
+ assertSameCache(p1, p2.beanMethodVisibility(PRIVATE));
+ assertDifferentCache(p1.beanMethodVisibility(PROTECTED), p2);
+ assertSameCache(p1, p2.beanMethodVisibility(PROTECTED));
+
+ assertDifferentCache(p1.useJavaBeanIntrospector(), p2);
+ assertSameCache(p1, p2.useJavaBeanIntrospector());
+
+ assertDifferentCache(p1.disableInterfaceProxies(), p2);
+ assertSameCache(p1, p2.disableInterfaceProxies());
+
+ assertDifferentCache(p1.ignoreUnknownBeanProperties(), p2);
+ assertSameCache(p1, p2.ignoreUnknownBeanProperties());
+
+
assertDifferentCache(p1.disableIgnoreUnknownNullBeanProperties(), p2);
+ assertSameCache(p1,
p2.disableIgnoreUnknownNullBeanProperties());
+
+ assertDifferentCache(p1.disableIgnoreMissingSetters(), p2);
+ assertSameCache(p1, p2.disableIgnoreMissingSetters());
+
+ assertDifferentCache(p1.ignoreInvocationExceptionsOnGetters(),
p2);
+ assertSameCache(p1, p2.ignoreInvocationExceptionsOnGetters());
+
+ assertDifferentCache(p1.ignoreInvocationExceptionsOnSetters(),
p2);
+ assertSameCache(p1, p2.ignoreInvocationExceptionsOnSetters());
+
+ assertDifferentCache(p1.notBeanPackages("foo"), p2);
+ assertSameCache(p1, p2.notBeanPackages("foo"));
+ assertDifferentCache(p1.notBeanPackages("bar"), p2);
+ assertSameCache(p1, p2.notBeanPackages("bar"));
+
assertDifferentCache(p1.notBeanPackages("baz").notBeanPackages("bing"), p2);
+
assertSameCache(p2.notBeanPackages("bing").notBeanPackages("baz"), p2);
p1.beanContext().notBeanPackages().remove("bar");
assertDifferentCache(p1, p2);
p2.beanContext().notBeanPackages().remove("bar");
assertSameCache(p1, p2);
- p1.swaps(DummyPojoSwapA.class);
- assertDifferentCache(p1, p2);
- p2.swaps(DummyPojoSwapA.class);
- assertSameCache(p1, p2);
- p1.swaps(DummyPojoSwapB.class,DummyPojoSwapC.class); // Order
of filters is important!
- p2.swaps(DummyPojoSwapC.class,DummyPojoSwapB.class);
- assertDifferentCache(p1, p2);
+ assertDifferentCache(p1.swaps(DummyPojoSwapA.class), p2);
+ assertSameCache(p1, p2.swaps(DummyPojoSwapA.class));
+
assertDifferentCache(p1.swaps(DummyPojoSwapB.class,DummyPojoSwapC.class),
p2.swaps(DummyPojoSwapC.class,DummyPojoSwapB.class)); // Order of filters is
important!
}
public static class DummyPojoSwapA extends MapSwap<A> {}
@@ -781,22 +615,23 @@ public class BeanConfigTest {
public static class C {}
private void assertSameCache(Parser.Builder p1b, Parser.Builder p2b) {
- Parser p1 = p1b.build(), p2 = p2b.build();
+ var p1 = p1b.build();
+ var p2 = p2b.build();
assertTrue(p1.getBeanContext().hasSameCache(p2.getBeanContext()));
}
private void assertDifferentCache(Parser.Builder p1b, Parser.Builder
p2b) {
- Parser p1 = p1b.build(), p2 = p2b.build();
+ var p1 = p1b.build();
+ var p2 = p2b.build();
assertFalse(p1.getBeanContext().hasSameCache(p2.getBeanContext()));
}
//====================================================================================================
// testNotABeanReasons
//====================================================================================================
- @Test
- public void testNotABeanNonStaticInnerClass() {
- BeanContext bc = BeanContext.DEFAULT;
- ClassMeta cm = bc.getClassMeta(C1.class);
+ @Test void testNotABeanNonStaticInnerClass() {
+ var bc = BeanContext.DEFAULT;
+ var cm = bc.getClassMeta(C1.class);
assertFalse(cm.canCreateNewInstance());
}
@@ -810,21 +645,23 @@ public class BeanConfigTest {
// For performance reasons, array properties are stored as temporary
ArrayLists until the
// BeanMap.getBean() method is called.
//====================================================================================================
- @Test(timeout=1000) // Should be around 100ms at most.
- public void testAddingToArrayProperty() {
- BeanContext bc = BeanContext.DEFAULT;
- BeanMap<D> bm = bc.newBeanMap(D.class);
- for (int i = 0; i < 5000; i++) {
- bm.add("f1", i);
- bm.add("f2", i);
- bm.add("f3", i);
- bm.add("f4", i);
- }
- D d = bm.getBean();
- assertEquals(5000, d.f1.length);
- assertEquals(5000, d.f2.length);
- assertEquals(5003, d.f3.length);
- assertEquals(5003, d.f4.length);
+ // Should be around 100ms at most.
+ @Test void testAddingToArrayProperty() {
+ assertTimeout(Duration.ofSeconds(1), () -> {
+ var bc = BeanContext.DEFAULT;
+ var bm = bc.newBeanMap(D.class);
+ for (var i = 0; i < 5000; i++) {
+ bm.add("f1", i);
+ bm.add("f2", i);
+ bm.add("f3", i);
+ bm.add("f4", i);
+ }
+ var d = bm.getBean();
+ assertEquals(5000, d.f1.length);
+ assertEquals(5000, d.f2.length);
+ assertEquals(5003, d.f3.length);
+ assertEquals(5003, d.f4.length);
+ });
}
public class D {
@@ -833,30 +670,25 @@ public class BeanConfigTest {
public int[] f3 = {1,2,3};
private int[] f4 = {1,2,3};
public int[] getF2() {return f2;}
- public void setF2(int[] f2) {this.f2 = f2;}
+ public void setF2(int[] v) {f2 = v;}
public int[] getF4() {return f4;}
- public void setF4(int[] f4) {this.f4 = f4;}
+ public void setF4(int[] v) {f4 = v;}
}
//====================================================================================================
// testClassClassMeta
// Make sure we can get ClassMeta objects against the Class class.
//====================================================================================================
- @Test
- public void testClassClassMeta() {
- ClassMeta cm = BeanContext.DEFAULT.getClassMeta(Class.class);
- assertNotNull(cm);
-
- cm = BeanContext.DEFAULT.getClassMeta(Class[].class);
- assertNotNull(cm);
+ @Test void testClassClassMeta() {
+ assertNotNull(BeanContext.DEFAULT.getClassMeta(Class.class));
+ assertNotNull(BeanContext.DEFAULT.getClassMeta(Class[].class));
}
//====================================================================================================
// testBlanks
//====================================================================================================
- @Test
- public void testBlanks() throws Exception {
- BeanContext bc = BeanContext.DEFAULT;
+ @Test void testBlanks() throws Exception {
+ var bc = BeanContext.DEFAULT;
// Blanks get interpreted as the default value for primitives
and null for boxed objects.
assertEquals(0, (int)bc.convertToType("", int.class));
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 f20fc2af6..dca72c21c 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/SimpleTestBase.java
@@ -13,18 +13,20 @@
package org.apache.juneau;
import static org.apache.juneau.utest.utils.Utils2.*;
+import static org.apache.juneau.common.internal.StringUtils.*;
import static java.util.Optional.*;
+import static java.util.stream.Collectors.*;
import static org.junit.jupiter.api.Assertions.*;
import java.lang.reflect.*;
import java.util.*;
-import java.util.regex.*;
+import java.util.function.*;
import org.apache.juneau.annotation.*;
import org.apache.juneau.common.internal.*;
-import org.apache.juneau.common.utils.*;
import org.apache.juneau.marshaller.*;
+import org.apache.juneau.serializer.*;
import org.junit.jupiter.api.*;
import org.junit.jupiter.api.MethodOrderer.*;
@@ -34,9 +36,11 @@ import org.junit.jupiter.api.MethodOrderer.*;
@TestMethodOrder(MethodName.class)
public abstract class SimpleTestBase {
- /** Assert value when stringified matches the specified pattern. */
- protected void assertMatches(String pattern, Object value) {
- var m = StringUtils.getMatchPattern(pattern).matcher(s(value));
+ /**
+ * 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.
@@ -44,158 +48,166 @@ public abstract class SimpleTestBase {
}
}
- protected void assertJson(Object value, String json) {
+ /**
+ * Asserts the JSON5 representation of the specified object.
+ */
+ protected static void assertJson(Object value, String json) {
assertEquals(json, Json5.DEFAULT.write(value));
}
/**
- * Asserts an object matches the expected string after it's been
stringified.
+ * Asserts the serialized representation of the specified object.
*/
- protected void assertString(String expected, Object actual) {
- assertEquals(expected, s(actual));
+ protected static void assertSerialized(Object value, WriterSerializer
s, String json) {
+ assertEquals(json, s.toString(value));
}
- protected void assertNotEmpty(Collection<?> c) {
- assertTrue(c != null && ! c.isEmpty());
+ /**
+ * Asserts an object matches the expected string after it's been made
readable.
+ */
+ protected static void assertString(String expected, Object actual) {
+ assertEquals(expected, r(actual));
}
- protected void assertNotEmpty(Map<?,?> c) {
- assertTrue(c != null && ! c.isEmpty());
+ /**
+ * Asserts the entries in an array matches the expected strings after
they've been made readable.
+ */
+ protected static void assertArray(Object array, String...expected) {
+ if (Array.getLength(array) != expected.length)
+ ffail("Wrong array length. expected={0}, actual={1}",
expected.length, Array.getLength(array));
+ for (var i = 0; i < expected.length; i++)
+ if (ne(r(Array.get(array, i)), expected[i]))
+ ffail("Element at index {0} did not match.
expected={1}, actual={2}", i, expected[i], r(Array.get(array, i)));
}
- protected void assertEmpty(Collection<?> c) {
- assertTrue(c != null && c.isEmpty());
+ /**
+ * Asserts the entries in a list matches the expected strings after
they've been made readable.
+ */
+ protected static void assertList(List<?> list, String...expected) {
+ if (list.size() != expected.length)
+ ffail("Wrong list length. expected={0}, actual={1}",
expected.length, list.size());
+ for (var i = 0; i < expected.length; i++)
+ if (ne(r(list.get(i)), expected[i]))
+ ffail("Element at index {0} did not match.
expected={1}, actual={2}", i, expected[i], r(list.get(i)));
}
- protected void assertSize(int expected, Collection<?> c) {
- assertEquals(expected,
ofNullable(c).map(Collection::size).orElse(-1));
+ /**
+ * Formatted fail.
+ */
+ protected static void ffail(String msg, Object...args) {
+ fail(StringUtils.format(msg, args));
}
/**
- * Asserts an exception is thrown and contains the specified message.
- * Example: assertThrown(()->doSomething(), "My exception message:
foo*");
+ * Asserts the entries in a map matches the expected strings after
they've been made readable.
*/
- protected void assertThrown(Snippet snippet, String msg) {
- try {
- snippet.run();
- fail("Exception not thrown.");
- } catch (Throwable e) {
- if (! StringUtils.getMatchPattern(msg,
Pattern.DOTALL).matcher(e.getMessage()).matches()) {
- System.err.println("Thrown message didn't
match. Message=" + e.getMessage());
- fail("Thrown message didn't match. Message=" +
e.getMessage());
- }
- }
+ protected static void assertMap(Map<?,?> map, String...expected) {
+ assertList(map.entrySet().stream().map(x -> r(x.getKey()) + "="
+ r(x.getValue())).toList(), expected);
}
- protected void assertThrown(Snippet snippet, Class<? extends Throwable>
thrownType) {
- try {
- snippet.run();
- fail("Exception not thrown.");
- } catch (AssertionError e) {
- throw e;
- } catch (Throwable e) {
- assertTrue(thrownType.isInstance(e), ()->"Wrong type
thrown: " + e.getClass().getName());
- }
+ /**
+ * Asserts that a collection is not null or empty.
+ */
+ protected static void assertNotEmpty(Collection<?> c) {
+ assertTrue(c != null && ! c.isEmpty());
}
/**
- * Asserts an exception is not thrown
- * Example: assertThrown(()->doSomething());
+ * Asserts that a maps is not null or empty.
*/
- protected void assertNotThrown(Snippet snippet) {
- try {
- snippet.run();
- } catch (Throwable e) {
- fail("Exception thrown.");
- }
+ protected static void assertNotEmpty(Map<?,?> c) {
+ assertTrue(c != null && ! c.isEmpty());
+ }
+
+ /**
+ * Asserts that a collection is not null and empty.
+ */
+ protected static void assertEmpty(Collection<?> c) {
+ assertTrue(c != null && c.isEmpty());
+ }
+
+ /**
+ * Asserts that a collection is not null and of the specified size.
+ */
+ protected static void assertSize(int expected, Collection<?> c) {
+ assertEquals(expected,
ofNullable(c).map(Collection::size).orElse(-1));
}
/**
- * Asserts that the fields/properties on the specified bean are the
specified values.
- * Collections and calendars are serialized consistently for ease of
testing.
+ * Asserts that the fields/properties on the specified bean are the
specified values after being converted to readable strings.
+ *
* Example:
* assertBean(
* myBean,
* "prop1,prop2,prop3"
* "val1,val2,val3"
* );
+ *
+ * Subsets of properties on nested beans can also be specified by
appending arbitrarily-nested "{...}" constructs to property names.
+ * assertBean(
+ * myBean,
+ * "prop1{prop1a,prop1b},prop2,prop3"
+ * "val1{val1a,val1b},val2,val3"
+ * );
+ * This also works for lists and arrays when numeric subproperty names
are used.
+ * assertBean(
+ * myBean,
+ * "myListProp{0,1,2},prop2,prop3"
+ * "val1{val1a,val1b,val1c},val2,val3"
+ * );
*/
- protected void assertBean(Object o, String fields, String value) {
+ protected static void assertBean(Object o, String fields, String value)
{
if (o == null) throw new NullPointerException("Bean was null");
- var sb = new StringBuilder();
- var f = StringUtils.split(fields);
- for (var i = 0; i < f.length; i++) {
- if (i > 0) sb.append(",");
- sb.append(s(getBeanProp(o, f[i])));
- }
- assertEquals(value, sb.toString());
+ assertEquals(value, splitNested(fields).stream().map(x ->
getReadableEntry(o, x)).collect(joining(",")));
}
/**
- * Asserts that the values of the specified fields match the list of
beans.
+ * Asserts that the values in the specified map are the specified
values after being converted to readable strings.
+ * Example:
+ * assertMap(
+ * myMap,
+ * "prop1,prop2,prop3"
+ * "val1,val2,val3"
+ * );
+ */
+ protected static void assertMap(Map<?,?> o, String fields, String
value) {
+ if (o == null) throw new NullPointerException("Map was null");
+ assertEquals(value, cdl(fields).stream().map(x ->
getReadableEntry(o, x)).collect(joining(",")));
+ }
+
+ /**
+ * Asserts that the values of the specified fields match the list of
beans after being converted to readable strings.
* @param l The list of beans to check.
* @param fields A comma-delimited list of bean property names.
* @param values The comma-delimited list of values for each bean.
*/
@SuppressWarnings("rawtypes")
- protected void assertBeans(Collection l, String fields,
Object...values) {
+ protected static void assertBeans(Collection l, String fields,
Object...values) {
assertEquals(values.length, l.size(), ()->"Expected
"+values.length+" rows but had actual " + l.size());
var r = 0;
- var f = StringUtils.split(fields);
+ var f = splitNested(fields);
for (var o : l) {
- var sb = new StringBuilder();
- var first = true;
- for (var ff : f) {
- if (! first) sb.append(",");
- first = false;
- String[] subfields = null;
- if (contains(ff, '{')) {
- subfields =
ff.substring(ff.indexOf('{')+1, ff.indexOf("}")).split(":");
- ff = ff.substring(0, ff.indexOf('{'));
- }
- var bp = getBeanProp(o, ff);
- if (subfields != null) {
- if (isListOrArray(bp)) {
- sb.append("[");
- for (var i = 0; i < length(bp);
i++) {
- if (i > 0)
sb.append(",");
-
sb.append(beanProps(get(bp, i), subfields));
- }
- sb.append("]");
- } else {
- sb.append(beanProps(bp,
subfields));
- }
- } else {
- sb.append(s(getBeanProp(o, ff)));
- }
- }
- assertEquals(s(values[r]), sb.toString(), "Object at
row " + (r+1) + " didn't match.");
+ var actual = f.stream().map(x -> getReadableEntry(o,
x)).collect(joining(","));
+ var r2 = r+1;
+ assertEquals(r(values[r]), actual, ()->"Object at row "
+ r2 + " didn't match.");
r++;
}
}
- /**
- * Returns the specified bean properties on the specified bean as a
comma-delimited list.
- */
- private String beanProps(Object o, String[] properties) {
- if (o == null) return "null";
- var sb = new StringBuilder();
- sb.append("{");
- for (var i = 0; i < properties.length; i++) {
- if (i > 0) sb.append(",");
- sb.append(s(getBeanProp(o, properties[i])));
- }
- sb.append("}");
- return sb.toString();
+ private static String getReadableEntry(Object o, String name) {
+ var i = name.indexOf("{");
+ var pn = i == -1 ? name : name.substring(0, i);
+ var spn = i == -1 ? null : splitNestedInner(name);
+ var e = getEntry(o, pn);
+ if (spn == null) return r(e);
+ return spn.stream().map(x -> getReadableEntry(e,
x)).collect(joining(","));
}
- /**
- * Returns the specified element from a List or array.
- */
- private Object get(Object o, int i) {
- if (o instanceof List) return ((List<?>)o).get(i);
- if (o.getClass().isArray()) return Array.get(o, i);
- throw new RuntimeException("Invalid data type for
length(Object): " + o.getClass().getSimpleName());
+ private static Object getEntry(Object o, String name) {
+ if (o instanceof List) return
List.class.cast(o).get(Integer.parseInt(name));
+ if (o.getClass().isArray()) return Array.get(o,
Integer.parseInt(name));
+ if (o instanceof Map) return Map.class.cast(o).get(name);
+ return getBeanProp(o, name);
}
/**
@@ -212,16 +224,16 @@ public abstract class SimpleTestBase {
* Methods and fields can be any visibility.
*/
public static Object getBeanProp(Object o, String name) {
- return Utils.safe(() -> {
- Field f = null;
- Class<?> c = o.getClass();
+ return safe(() -> {
+ var f = (Field)null;
+ var c = o.getClass();
var n = Character.toUpperCase(name.charAt(0)) +
name.substring(1);
var m = Arrays.stream(c.getMethods()).filter(x ->
isGetter(x, n)).filter(x -> x.getAnnotation(BeanIgnore.class) ==
null).findFirst().orElse(null);
if (m != null) {
m.setAccessible(true);
return m.invoke(o);
}
- Class<?> c2 = c;
+ var c2 = c;
while (f == null && c2 != null) {
f =
Arrays.stream(c2.getDeclaredFields()).filter(x ->
x.getName().equals(name)).findFirst().orElse(null);
c2 = c2.getSuperclass();
@@ -230,7 +242,7 @@ public abstract class SimpleTestBase {
f.setAccessible(true);
return f.get(o);
}
- throw new RuntimeException("No field called " + name +
" found on class "+c.getName()+"");
+ throw runtimeException("No field called {0} found on
class {1}", name, c.getName());
});
}
@@ -239,23 +251,6 @@ public abstract class SimpleTestBase {
return ((("get"+n).equals(mn) || ("is"+n).equals(mn)) &&
m.getParameterCount() == 0);
}
- /**
- * Returns true if this is a List or array.
- */
- private boolean isListOrArray(Object o) {
- return o instanceof List || o.getClass().isArray();
- }
-
- /**
- * Returns the length of a List or array.
- */
- private int length(Object o) {
- if (o == null) return 0;
- if (o instanceof List) return ((List<?>)o).size();
- if (o.getClass().isArray()) return Array.getLength(o);
- throw new RuntimeException("Invalid data type for
length(Object): " + o.getClass().getSimpleName());
- }
-
/**
* Creates an array of objects.
*/
@@ -263,4 +258,11 @@ public abstract class SimpleTestBase {
protected static <T> T[] a(T...x) {
return x;
}
-}
+
+ /**
+ * Simplified string supplier with message arguments.
+ */
+ public static Supplier<String> ss(String pattern, Object...args) {
+ return ()->StringUtils.format(pattern, args);
+ }
+}
\ No newline at end of file
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanPropertiesTest.java
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanPropertiesTest.java
index 761d849b0..0dc5089bb 100644
---
a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanPropertiesTest.java
+++
b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanPropertiesTest.java
@@ -50,7 +50,6 @@ public class RoundTripBeanPropertiesTest extends
RoundTripTest {
o.f1[0] = alist(123L);
o = roundTrip(o);
assertEquals(123, o.f1[0].get(0).intValue());
- assertTrue(o.f1[0].get(0) instanceof Long);
}
public static class A02 {
@@ -63,7 +62,6 @@ public class RoundTripBeanPropertiesTest extends
RoundTripTest {
o.f1 = CollectionUtils.<Long[]>alist(new Long[]{123L});
o = roundTrip(o);
assertEquals(123, o.f1.get(0)[0].intValue());
- assertTrue(o.f1.get(0)[0] instanceof Long);
}
public static class A03 {
@@ -77,7 +75,6 @@ public class RoundTripBeanPropertiesTest extends
RoundTripTest {
o.f1[0] = new List[]{alist(123L)};
o = roundTrip(o);
assertEquals(123, o.f1[0][0].get(0).intValue());
- assertTrue(o.f1[0][0].get(0) instanceof Long);
}
public static class A04 {
@@ -90,6 +87,5 @@ public class RoundTripBeanPropertiesTest extends
RoundTripTest {
o.f1 = CollectionUtils.<Long[][]>alist(new Long[][]{new
Long[]{123L}});
o = roundTrip(o);
assertEquals(123, o.f1.get(0)[0][0].intValue());
- assertTrue(o.f1.get(0)[0][0] instanceof Long);
}
}
\ No newline at end of file
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/reflect/ClassInfoTest.java
b/juneau-utest/src/test/java/org/apache/juneau/reflect/ClassInfoTest.java
index 85366b035..b89320409 100644
--- a/juneau-utest/src/test/java/org/apache/juneau/reflect/ClassInfoTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/reflect/ClassInfoTest.java
@@ -162,7 +162,7 @@ public class ClassInfoTest {
@Test
public void inner() {
- assertTrue(of(A1.class).inner() instanceof Class);
+ assertNotNull(of(A1.class).inner());
assertTrue(of(A1.class).innerType() instanceof Class);
}
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/utils/CharSetTest.java
b/juneau-utest/src/test/java/org/apache/juneau/utils/AsciiSet_Test.java
similarity index 90%
rename from juneau-utest/src/test/java/org/apache/juneau/utils/CharSetTest.java
rename to juneau-utest/src/test/java/org/apache/juneau/utils/AsciiSet_Test.java
index 4d590ef19..f9622d971 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/CharSetTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/AsciiSet_Test.java
@@ -13,24 +13,25 @@
package org.apache.juneau.utils;
import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
+import org.apache.juneau.*;
import org.apache.juneau.common.internal.*;
import org.junit.*;
-@FixMethodOrder(NAME_ASCENDING)
-public class CharSetTest {
+/**
+ * Tests {@link AsciiSet}.
+ */
+class AsciiSet_Test extends SimpleTestBase {
//====================================================================================================
// test - Basic tests
//====================================================================================================
- @Test
- public void test() {
- AsciiSet cs = AsciiSet.create("abc\u1234");
+ @Test void a01_basic() {
+ var cs = AsciiSet.of("abc\u1234");
assertTrue(cs.contains('a'));
assertFalse(cs.contains('d'));
assertFalse(cs.contains('\u1234'));
assertFalse(cs.contains((char)-1));
assertFalse(cs.contains((char)128));
}
-}
\ No newline at end of file
+}
\ No newline at end of file
diff --git
a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
index ccb218419..2b115f9d4 100755
--- a/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
+++ b/juneau-utest/src/test/java/org/apache/juneau/utils/StringUtilsTest.java
@@ -12,30 +12,30 @@
//
***************************************************************************************************************************
package org.apache.juneau.utils;
-import static org.apache.juneau.assertions.Assertions.*;
import static org.apache.juneau.common.internal.StringUtils.*;
import static org.apache.juneau.internal.CollectionUtils.*;
-import static org.junit.Assert.*;
-import static org.junit.runners.MethodSorters.*;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.jupiter.api.Assertions.assertThrows;
import java.util.*;
+import org.apache.juneau.*;
import org.apache.juneau.collections.*;
import org.apache.juneau.common.internal.*;
-import org.apache.juneau.json.*;
-import org.apache.juneau.serializer.*;
-import org.apache.juneau.utest.utils.Utils2;
-import org.junit.*;
+import org.apache.juneau.utest.utils.*;
+import org.junit.jupiter.api.*;
-@FixMethodOrder(NAME_ASCENDING)
-public class StringUtilsTest {
+class StringUtilsTest extends SimpleTestBase {
//====================================================================================================
// isNumeric(String,Class)
// parseNumber(String,Class)
//====================================================================================================
- @Test
- public void testParseNumber() {
+ @Test void a01_testParser() {
// Integers
assertTrue(isNumeric("123"));
@@ -140,9 +140,9 @@ public class StringUtilsTest {
assertTrue(isNumeric("0x123e1"));
assertEquals(0x123e1, parseNumber("0x123e1", null));
- assertThrown(()->parseNumber("x", Number.class)).isExists();
- assertThrown(()->parseNumber("x", null)).isExists();
- assertThrown(()->parseNumber("x",
BadNumber.class)).asMessage().isContains("Unsupported Number type");
+ assertThrows(NumberFormatException.class, ()->parseNumber("x",
Number.class));
+ assertThrows(NumberFormatException.class, ()->parseNumber("x",
null));
+ assertThrows(NumberFormatException.class, ()->parseNumber("x",
BadNumber.class), "Unsupported Number type");
}
@SuppressWarnings("serial")
@@ -151,8 +151,7 @@ public class StringUtilsTest {
//====================================================================================================
// test - Basic tests
//====================================================================================================
- @Test
- public void testNumberRanges() {
+ @Test void a02_numberRanges() {
String s;
// An integer range is -2,147,483,648 to 2,147,483,647
@@ -245,89 +244,52 @@ public class StringUtilsTest {
s = String.valueOf("214748364x");
assertFalse(isNumeric(s));
- assertThrown(()->parseNumber(String.valueOf("214748364x"),
Number.class)).isType(NumberFormatException.class);
+ assertThrows(NumberFormatException.class,
()->parseNumber("214748364x", Number.class));
s = String.valueOf("2147483640x");
assertFalse(isNumeric(s));
- assertThrown(()->parseNumber(String.valueOf("2147483640x"),
Long.class)).isType(NumberFormatException.class);
+ assertThrows(NumberFormatException.class,
()->parseNumber("2147483640x", Long.class));
}
//====================================================================================================
// testReplaceVars
//====================================================================================================
- @Test
- public void testReplaceVars() throws Exception {
- JsonMap m =
JsonMap.ofJson("{a:'A',b:1,c:true,d:'{e}',e:'E{f}E',f:'F',g:'{a}',h:'a',i:null}");
-
- String s = "xxx";
- assertEquals("xxx", replaceVars(s, m));
-
- s = "{a}";
- assertEquals("A", replaceVars(s, m));
- s = "{a}{a}";
- assertEquals("AA", replaceVars(s, m));
- s = "x{a}x";
- assertEquals("xAx", replaceVars(s, m));
- s = "x{a}x{a}x";
- assertEquals("xAxAx", replaceVars(s, m));
-
- s = "{b}";
- assertEquals("1", replaceVars(s, m));
- s = "{b}{b}";
- assertEquals("11", replaceVars(s, m));
- s = "x{b}x";
- assertEquals("x1x", replaceVars(s, m));
- s = "x{b}x{b}x";
- assertEquals("x1x1x", replaceVars(s, m));
-
- s = "{c}";
- assertEquals("true", replaceVars(s, m));
- s = "{c}{c}";
- assertEquals("truetrue", replaceVars(s, m));
- s = "x{c}x{c}x";
- assertEquals("xtruextruex", replaceVars(s, m));
-
- s = "{d}";
- assertEquals("EFE", replaceVars(s, m));
- s = "{d}{d}";
- assertEquals("EFEEFE", replaceVars(s, m));
- s = "x{d}x";
- assertEquals("xEFEx", replaceVars(s, m));
- s = "x{d}x{d}x";
- assertEquals("xEFExEFEx", replaceVars(s, m));
-
- s = "{g}";
- assertEquals("A", replaceVars(s, m));
- s = "{g}{g}";
- assertEquals("AA", replaceVars(s, m));
- s = "x{g}x";
- assertEquals("xAx", replaceVars(s, m));
- s = "x{g}x{g}x";
- assertEquals("xAxAx", replaceVars(s, m));
-
- s = "{x}";
- assertEquals("{x}", replaceVars(s, m));
- s = "{x}{x}";
- assertEquals("{x}{x}", replaceVars(s, m));
- s = "x{x}x{x}x";
- assertEquals("x{x}x{x}x", replaceVars(s, m));
-
- s = "{{g}}";
- assertEquals("{A}", replaceVars(s, m));
- s = "{{h}}";
- assertEquals("A", replaceVars(s, m));
-
- s = "{{i}}";
- assertEquals("{}", replaceVars(s, m));
- s = "{}";
- assertEquals("{}", replaceVars(s, m));
+ @Test void a03_replaceVars() throws Exception {
+ var m =
JsonMap.ofJson("{a:'A',b:1,c:true,d:'{e}',e:'E{f}E',f:'F',g:'{a}',h:'a',i:null}");
+
+ assertEquals("xxx", replaceVars("xxx", m));
+ assertEquals("A", replaceVars("{a}", m));
+ assertEquals("AA", replaceVars("{a}{a}", m));
+ assertEquals("xAx", replaceVars("x{a}x", m));
+ assertEquals("xAxAx", replaceVars("x{a}x{a}x", m));
+ assertEquals("1", replaceVars("{b}", m));
+ assertEquals("11", replaceVars("{b}{b}", m));
+ assertEquals("x1x", replaceVars("x{b}x", m));
+ assertEquals("x1x1x", replaceVars("x{b}x{b}x", m));
+ assertEquals("true", replaceVars("{c}", m));
+ assertEquals("truetrue", replaceVars("{c}{c}", m));
+ assertEquals("xtruextruex", replaceVars("x{c}x{c}x", m));
+ assertEquals("EFE", replaceVars("{d}", m));
+ assertEquals("EFEEFE", replaceVars("{d}{d}", m));
+ assertEquals("xEFEx", replaceVars("x{d}x", m));
+ assertEquals("xEFExEFEx", replaceVars("x{d}x{d}x", m));
+ assertEquals("A", replaceVars("{g}", m));
+ assertEquals("AA", replaceVars("{g}{g}", m));
+ assertEquals("xAx", replaceVars("x{g}x", m));
+ assertEquals("xAxAx", replaceVars("x{g}x{g}x", m));
+ assertEquals("{x}", replaceVars("{x}", m));
+ assertEquals("{x}{x}", replaceVars("{x}{x}", m));
+ assertEquals("x{x}x{x}x", replaceVars("x{x}x{x}x", m));
+ assertEquals("{A}", replaceVars("{{g}}", m));
+ assertEquals("A", replaceVars("{{h}}", m));
+ assertEquals("{}", replaceVars("{{i}}", m));
+ assertEquals("{}", replaceVars("{}", m));
}
//====================================================================================================
// isFloat(String)
//====================================================================================================
- @Test
- public void testisFloat() {
+ @Test void a04_isFloat() {
String[] valid = {
"+1.0",
"-1.0",
@@ -346,10 +308,10 @@ public class StringUtilsTest {
"0x1.fffffffffffffp1023",
"0x1.FFFFFFFFFFFFFP1023",
};
- for (String s : valid)
+ for (var s : valid)
assertTrue(isFloat(s));
- String[] invalid = {
+ var invalid = new String[] {
null,
"",
"a",
@@ -360,16 +322,15 @@ public class StringUtilsTest {
"+a",
"11a",
};
- for (String s : invalid)
+ for (var s : invalid)
assertFalse(isFloat(s));
}
//====================================================================================================
// isDecimal(String)
//====================================================================================================
- @Test
- public void testisDecimal() {
- String[] valid = {
+ @Test void a05_isDecimal() {
+ var valid = new String[] {
"+1",
"-1",
"0x123",
@@ -380,10 +341,10 @@ public class StringUtilsTest {
"#DEF",
"0123",
};
- for (String s : valid)
+ for (var s : valid)
assertTrue(isDecimal(s));
- String[] invalid = {
+ var invalid = new String[] {
null,
"",
"a",
@@ -397,7 +358,7 @@ public class StringUtilsTest {
"0128",
"012A",
};
- for (String s : invalid)
+ for (var s : invalid)
assertFalse(isDecimal(s));
}
@@ -409,8 +370,7 @@ public class StringUtilsTest {
// join(int[],char)
// join(Collection,char)
//====================================================================================================
- @Test
- public void testJoin() {
+ @Test void a01_join() {
assertNull(join((Object[])null, ","));
assertEquals("1", join(new Object[]{1}, ","));
assertEquals("1,2", join(new Object[]{1,2}, ","));
@@ -437,122 +397,57 @@ public class StringUtilsTest {
//====================================================================================================
// split(String,char)
//====================================================================================================
- @Test
- public void testSplit() {
- String[] r;
-
+ @Test void a07_split() {
assertNull(split((String)null));
- assertObject(split("")).asJson().is("[]");
- assertObject(split("1")).asJson().is("['1']");
- assertObject(split("1,2")).asJson().is("['1','2']");
- assertObject(split("1\\,2")).asJson().is("['1,2']");
-
- r = split("1\\\\,2");
- assertEquals("1\\", r[0]);
- assertEquals("2", r[1]);
-
- r = split("1\\\\\\,2");
- assertEquals(1, r.length);
- assertEquals("1\\,2", r[0]);
-
- r = split("1,2\\");
- assertEquals("2\\", r[1]);
-
- r = split("1,2\\\\");
- assertEquals("2\\", r[1]);
-
- r = split("1,2\\,");
- assertEquals("2,", r[1]);
-
- r = split("1,2\\\\,");
- assertEquals("2\\", r[1]);
- assertEquals("", r[2]);
- }
-
- @Test
- public void testSplit2() {
- List<String> l1 = list();
- split((String)null, l1::add);
- assertList(l1).isEmpty();
-
- List<String> l2 = list();
- split("", l2::add);
- assertObject(l2).asJson().is("[]");
-
- List<String> l3 = list();
- split("1", l3::add);
- assertObject(l3).asJson().is("['1']");
-
- List<String> l4 = list();
- split("1,2", l4::add);
- assertObject(l4).asJson().is("['1','2']");
-
- List<String> l5 = list();
- split("1\\,2", l5::add);
- assertObject(l5).asJson().is("['1,2']");
-
- List<String> l6 = list();
- split("1\\\\,2", l6::add);
- assertEquals("1\\", l6.get(0));
- assertEquals("2", l6.get(1));
-
- List<String> l7 = list();
- split("1\\\\\\,2", l7::add);
- assertEquals(1, l7.size());
- assertEquals("1\\,2", l7.get(0));
-
- List<String> l8 = list();
- split("1,2\\", l8::add);
- assertEquals("2\\", l8.get(1));
-
- List<String> l9 = list();
- split("1,2\\\\", l9::add);
- assertEquals("2\\", l9.get(1));
-
- List<String> l10 = list();
- split("1,2\\,", l10::add);
- assertEquals("2,", l10.get(1));
-
- List<String> l11 = list();
- split("1,2\\\\,", l11::add);
- assertEquals("2\\", l11.get(1));
- assertEquals("", l11.get(2));
+ assertArray(split(""));
+ assertArray(split("1"), "1");
+ assertArray(split("1,2"), "1", "2");
+ assertArray(split("1\\,2"), "1,2");
+ assertArray(split("1\\\\,2"), "1\\", "2");
+ assertArray(split("1\\\\\\,2"), "1\\,2");
+ assertArray(split("1,2\\"), "1", "2\\");
+ assertArray(split("1,2\\\\"), "1", "2\\");
+ assertArray(split("1,2\\,"), "1", "2,");
+ assertArray(split("1,2\\\\,"), "1", "2\\", "");
+ }
+
+ @Test void a08_split2() {
+ assertEmpty(split2test(null));
+ assertString("[]", split2test(""));
+ assertString("[1]", split2test("1"));
+ assertString("[1,2]", split2test("1,2"));
+ assertList(split2test("1\\,2"), "1,2");
+ assertList(split2test("1\\\\,2"), "1\\", "2");
+ assertList(split2test("1\\\\\\,2"), "1\\,2");
+ assertList(split2test("1,2\\"), "1", "2\\");
+ assertList(split2test("1,2\\\\"), "1", "2\\");
+ assertList(split2test("1,2\\,"), "1", "2,");
+ assertList(split2test("1,2\\\\,"), "1", "2\\", "");
+ }
+
+ private List<String> split2test(String s) {
+ List<String> l = list();
+ split(s, l::add);
+ return l;
}
//====================================================================================================
// split(String,char,int)
//====================================================================================================
- @Test
- public void testSplitWithLimit() {
- String[] r;
-
- r = split("boo:and:foo", ':', 10);
- assertObject(r).asJson().is("['boo','and','foo']");
-
- r = split("boo:and:foo", ':', 2);
- assertObject(r).asJson().is("['boo','and:foo']");
-
- r = split("boo:and:foo", ':', 1);
- assertObject(r).asJson().is("['boo:and:foo']");
-
- r = split("boo:and:foo", ':', 0);
- assertObject(r).asJson().is("['boo:and:foo']");
-
- r = split("boo:and:foo", ':', -1);
- assertObject(r).asJson().is("['boo:and:foo']");
-
- r = split("boo : and : foo", ':', 10);
- assertObject(r).asJson().is("['boo','and','foo']");
-
- r = split("boo : and : foo", ':', 2);
- assertObject(r).asJson().is("['boo','and : foo']");
+ @Test void a09_splitWithLimit() {
+ assertString("[boo,and,foo]", split("boo:and:foo", ':', 10));
+ assertString("[boo,and:foo]", split("boo:and:foo", ':', 2));
+ assertString("[boo:and:foo]", split("boo:and:foo", ':', 1));
+ assertString("[boo:and:foo]", split("boo:and:foo", ':', 0));
+ assertString("[boo:and:foo]", split("boo:and:foo", ':', -1));
+ assertString("[boo,and,foo]", split("boo : and : foo", ':',
10));
+ assertString("[boo,and : foo]", split("boo : and : foo", ':',
2));
}
//====================================================================================================
// nullIfEmpty(String)
//====================================================================================================
- @Test
- public void testNullIfEmpty() {
+ @Test void a10_nullIfEmpty() {
assertNull(nullIfEmpty(null));
assertNull(nullIfEmpty(""));
assertNotNull(nullIfEmpty("x"));
@@ -561,9 +456,8 @@ public class StringUtilsTest {
//====================================================================================================
// unescapeChars(String,char[],char)
//====================================================================================================
- @Test
- public void testUnescapeChars() {
- AsciiSet escape = AsciiSet.create("\\,|");
+ @Test void a11_unescapeChars() {
+ var escape = AsciiSet.of("\\,|");
assertNull(unEscapeChars(null, escape));
assertEquals("xxx", unEscapeChars("xxx", escape));
@@ -577,15 +471,14 @@ public class StringUtilsTest {
assertEquals(",", unEscapeChars("\\,", escape));
assertEquals("|", unEscapeChars("\\|", escape));
- escape = AsciiSet.create(",|");
+ escape = AsciiSet.of(",|");
assertEquals("x\\\\xx", unEscapeChars("x\\\\xx", escape));
}
//====================================================================================================
// decodeHex(String)
//====================================================================================================
- @Test
- public void testDecodeHex() {
+ @Test void a12_decodeHex() {
assertNull(decodeHex(null));
assertEquals("19azAZ", decodeHex("19azAZ"));
assertEquals("[0][1][ffff]", decodeHex("\u0000\u0001\uFFFF"));
@@ -594,8 +487,7 @@ public class StringUtilsTest {
//====================================================================================================
// startsWith(String,char)
//====================================================================================================
- @Test
- public void testStartsWith() {
+ @Test void a13_startsWith() {
assertFalse(startsWith(null, 'a'));
assertFalse(startsWith("", 'a'));
assertTrue(startsWith("a", 'a'));
@@ -605,8 +497,7 @@ public class StringUtilsTest {
//====================================================================================================
// endsWith(String,char)
//====================================================================================================
- @Test
- public void testEndsWith() {
+ @Test void a14_endsWith() {
assertFalse(endsWith(null, 'a'));
assertFalse(endsWith("", 'a'));
assertTrue(endsWith("a", 'a'));
@@ -617,31 +508,23 @@ public class StringUtilsTest {
// base64EncodeToString(String)
// base64DecodeToString(String)
//====================================================================================================
- @Test
- public void testBase64EncodeToString() {
- String s = null;
-
- assertEquals(s, base64DecodeToString(base64EncodeToString(s)));
- s = "";
- assertEquals(s, base64DecodeToString(base64EncodeToString(s)));
- s = "foobar";
- assertEquals(s, base64DecodeToString(base64EncodeToString(s)));
- s = "\u0000\uffff";
- assertEquals(s, base64DecodeToString(base64EncodeToString(s)));
-
- assertThrown(()->base64Decode("a")).asMessage().is("Invalid
BASE64 string length. Must be multiple of 4.");
-
assertThrown(()->base64Decode("aaa")).isType(IllegalArgumentException.class);
+ @Test void a15_base64EncodeToString() {
+ assertNull(base64DecodeToString(base64EncodeToString(null)));
+ assertEquals("",
base64DecodeToString(base64EncodeToString("")));
+ assertEquals("foobar",
base64DecodeToString(base64EncodeToString("foobar")));
+ assertEquals("\u0000\uffff",
base64DecodeToString(base64EncodeToString("\u0000\uffff")));
+ assertThrows(IllegalArgumentException.class,
()->base64Decode("a"), "Invalid BASE64 string length. Must be multiple of 4.");
+ assertThrows(IllegalArgumentException.class,
()->base64Decode("aaa"));
}
//====================================================================================================
// generateUUID(String)
//====================================================================================================
- @Test
- public void testGenerateUUID() {
- for (int i = 0; i < 10; i++) {
- String s = random(i);
+ @Test void a16_generateUUID() {
+ for (var i = 0; i < 10; i++) {
+ var s = random(i);
assertEquals(i, s.length());
- for (char c : s.toCharArray())
+ for (var c : s.toCharArray())
assertTrue(Character.isLowerCase(c) ||
Character.isDigit(c));
}
}
@@ -649,8 +532,7 @@ public class StringUtilsTest {
//====================================================================================================
// trim(String)
//====================================================================================================
- @Test
- public void testTrim() {
+ @Test void a17_trim() {
assertNull(trim(null));
assertEquals("", trim(""));
assertEquals("", trim(" "));
@@ -659,27 +541,22 @@ public class StringUtilsTest {
//====================================================================================================
// parseISO8601Date(String)
//====================================================================================================
- @Test
- public void testParseISO8601Date() throws Exception {
- WriterSerializer s = JsonSerializer.create().json5().build();
-
+ @Test void a18_parseISO8601Date() throws Exception {
assertNull(parseIsoDate(null));
assertNull(parseIsoDate(""));
Utils2.setTimeZone("GMT");
try {
- assertEquals("'2000-01-01T00:00:00'",
s.serialize(parseIsoDate("2000")));
- assertEquals("'2000-02-01T00:00:00'",
s.serialize(parseIsoDate("2000-02")));
- assertEquals("'2000-02-03T00:00:00'",
s.serialize(parseIsoDate("2000-02-03")));
- assertEquals("'2000-02-03T04:00:00'",
s.serialize(parseIsoDate("2000-02-03T04")));
- assertEquals("'2000-02-03T04:05:00'",
s.serialize(parseIsoDate("2000-02-03T04:05")));
- assertEquals("'2000-02-03T04:05:06'",
s.serialize(parseIsoDate("2000-02-03T04:05:06")));
- assertEquals("'2000-02-03T04:00:00'",
s.serialize(parseIsoDate("2000-02-03 04")));
- assertEquals("'2000-02-03T04:05:00'",
s.serialize(parseIsoDate("2000-02-03 04:05")));
- assertEquals("'2000-02-03T04:05:06'",
s.serialize(parseIsoDate("2000-02-03 04:05:06")));
-
- // ISO8601 doesn't support milliseconds, so it gets
trimmed.
- assertEquals("'2000-02-03T04:05:06'",
s.serialize(parseIsoDate("2000-02-03 04:05:06,789")));
+ assertString("2000-01-01T00:00:00Z",
parseIsoDate("2000"));
+ assertString("2000-02-01T00:00:00Z",
parseIsoDate("2000-02"));
+ assertString("2000-02-03T00:00:00Z",
parseIsoDate("2000-02-03"));
+ assertString("2000-02-03T04:00:00Z",
parseIsoDate("2000-02-03T04"));
+ assertString("2000-02-03T04:05:00Z",
parseIsoDate("2000-02-03T04:05"));
+ assertString("2000-02-03T04:05:06Z",
parseIsoDate("2000-02-03T04:05:06"));
+ assertString("2000-02-03T04:00:00Z",
parseIsoDate("2000-02-03 04"));
+ assertString("2000-02-03T04:05:00Z",
parseIsoDate("2000-02-03 04:05"));
+ assertString("2000-02-03T04:05:06Z",
parseIsoDate("2000-02-03 04:05:06"));
+ assertString("2000-02-03T04:05:06Z",
parseIsoDate("2000-02-03 04:05:06,789"));// ISO8601 doesn't support
milliseconds, so it gets trimmed.
} finally {
Utils2.unsetTimeZone();
}
@@ -688,25 +565,23 @@ public class StringUtilsTest {
//====================================================================================================
// parseMap(String,char,char,boolean)
//====================================================================================================
- @Test
- public void testSplitMap() {
- assertObject(splitMap("a=1", true)).asJson().is("{a:'1'}");
- assertObject(splitMap("a=1,b=2",
true)).asJson().is("{a:'1',b:'2'}");
- assertObject(splitMap(" a = 1 , b = 2 ",
true)).asJson().is("{a:'1',b:'2'}");
- assertObject(splitMap(" a = 1 , b = 2 ",
false)).asJson().is("{' a ':' 1 ',' b ':' 2 '}");
- assertObject(splitMap("a", true)).asJson().is("{a:''}");
- assertObject(splitMap("a,b", true)).asJson().is("{a:'',b:''}");
- assertObject(splitMap("a=1,b",
true)).asJson().is("{a:'1',b:''}");
- assertObject(splitMap("a,b=1",
true)).asJson().is("{a:'',b:'1'}");
- assertObject(splitMap("a\\==1",
true)).asJson().is("{'a=':'1'}");
- assertObject(splitMap("a\\\\=1",
true)).asJson().is("{'a\\\\':'1'}");
+ @Test void a19_splitMap() {
+ assertString("{a=1}", splitMap("a=1", true));
+ assertString("{a=1,b=2}", splitMap("a=1,b=2", true));
+ assertString("{a=1,b=2}", splitMap(" a = 1 , b = 2 ", true));
+ assertString("{ a = 1 , b = 2 }", splitMap(" a = 1 , b = 2 ",
false));
+ assertString("{a=}", splitMap("a", true));
+ assertString("{a=,b=}", splitMap("a,b", true));
+ assertString("{a=1,b=}", splitMap("a=1,b", true));
+ assertString("{a=,b=1}", splitMap("a,b=1", true));
+ assertString("{a==1}", splitMap("a\\==1", true));
+ assertString("{a\\=1}", splitMap("a\\\\=1", true));
}
//====================================================================================================
// isAbsoluteUri(String)
//====================================================================================================
- @Test
- public void testIsAbsoluteUri() {
+ @Test void a10_isAbsoluteUri() {
assertFalse(isAbsoluteUri(null));
assertFalse(isAbsoluteUri(""));
assertTrue(isAbsoluteUri("http://foo"));
@@ -722,8 +597,7 @@ public class StringUtilsTest {
//====================================================================================================
// getAuthorityUri(String)
//====================================================================================================
- @Test
- public void testGetAuthorityUri() {
+ @Test void a21_getAuthorityUri() {
assertEquals("http://foo", getAuthorityUri("http://foo"));
assertEquals("http://foo:123",
getAuthorityUri("http://foo:123"));
assertEquals("http://foo:123",
getAuthorityUri("http://foo:123/"));
@@ -733,34 +607,32 @@ public class StringUtilsTest {
//====================================================================================================
// splitQuoted(String)
//====================================================================================================
- @Test
- public void getSplitQuoted() {
- assertObject(splitQuoted(null)).asJson().is("null");
- assertObject(splitQuoted("")).asJson().is("[]");
- assertObject(splitQuoted(" \t ")).asJson().is("[]");
- assertObject(splitQuoted("foo")).asJson().is("['foo']");
- assertObject(splitQuoted("foo bar
baz")).asJson().is("['foo','bar','baz']");
- assertObject(splitQuoted("'foo'")).asJson().is("['foo']");
- assertObject(splitQuoted(" ' foo ' ")).asJson().is("[' foo ']");
- assertObject(splitQuoted("'foo'
'bar'")).asJson().is("['foo','bar']");
- assertObject(splitQuoted("\"foo\"")).asJson().is("['foo']");
- assertObject(splitQuoted(" \" foo \" ")).asJson().is("[' foo
']");
- assertObject(splitQuoted("\"foo\"
\"bar\"")).asJson().is("['foo','bar']");
-
assertObject(splitQuoted("'foo\\'bar'")).asJson().is("['foo\\'bar']");
-
assertObject(splitQuoted("'foo\\\"bar'")).asJson().is("['foo\"bar']");
-
assertObject(splitQuoted("'\\'foo\\'bar\\''")).asJson().is("['\\'foo\\'bar\\'']");
-
assertObject(splitQuoted("'\\\"foo\\\"bar\\\"'")).asJson().is("['\"foo\"bar\"']");
-
assertObject(splitQuoted("'\\'foo\\''")).asJson().is("['\\'foo\\'']");
-
assertObject(splitQuoted("\"\\\"foo\\\"\"")).asJson().is("['\"foo\"']");
-
assertObject(splitQuoted("'\"foo\"'")).asJson().is("['\"foo\"']");
-
assertObject(splitQuoted("\"'foo'\"")).asJson().is("['\\'foo\\'']");
+ @Test void a22_splitQuoted() {
+ assertNull(splitQuoted(null));
+ assertArray(splitQuoted(""));
+ assertArray(splitQuoted(" \t "));
+ assertArray(splitQuoted("foo"), "foo");
+ assertArray(splitQuoted("foo bar baz"), "foo", "bar", "baz");
+ assertArray(splitQuoted("'foo'"), "foo");
+ assertArray(splitQuoted(" ' foo ' "), " foo ");
+ assertArray(splitQuoted("'foo' 'bar'"), "foo", "bar");
+ assertArray(splitQuoted("\"foo\""), "foo");
+ assertArray(splitQuoted(" \" foo \" "), " foo ");
+ assertArray(splitQuoted("\"foo\" \"bar\""), "foo", "bar");
+ assertArray(splitQuoted("'foo\\'bar'"), "foo'bar");
+ assertArray(splitQuoted("'foo\\\"bar'"), "foo\"bar");
+ assertArray(splitQuoted("'\\'foo\\'bar\\''"), "'foo'bar'");
+ assertArray(splitQuoted("'\\\"foo\\\"bar\\\"'"),
"\"foo\"bar\"");
+ assertArray(splitQuoted("'\\'foo\\''"), "'foo'");
+ assertArray(splitQuoted("\"\\\"foo\\\"\""), "\"foo\"");
+ assertArray(splitQuoted("'\"foo\"'"), "\"foo\"");
+ assertArray(splitQuoted("\"'foo'\""), "'foo'");
}
//====================================================================================================
// firstNonWhitespaceChar(String)
//====================================================================================================
- @Test
- public void testFirstNonWhitespaceChar() {
+ @Test void a23_firstNonWhitespaceChar() {
assertEquals('f', firstNonWhitespaceChar("foo"));
assertEquals('f', firstNonWhitespaceChar(" foo"));
assertEquals('f', firstNonWhitespaceChar("\tfoo"));
@@ -773,8 +645,7 @@ public class StringUtilsTest {
//====================================================================================================
// lastNonWhitespaceChar(String)
//====================================================================================================
- @Test
- public void testLastNonWhitespaceChar() {
+ @Test void a24_lastNonWhitespaceChar() {
assertEquals('r', lastNonWhitespaceChar("bar"));
assertEquals('r', lastNonWhitespaceChar(" bar "));
assertEquals('r', lastNonWhitespaceChar("\tbar\t"));
@@ -787,8 +658,7 @@ public class StringUtilsTest {
//====================================================================================================
// testIsJsonObject(Object)
//====================================================================================================
- @Test
- public void testIsJsonObject() {
+ @Test void a25_isJsonObject() {
assertTrue(isJsonObject("{foo:'bar'}", true));
assertTrue(isJsonObject(" { foo:'bar' } ", true));
assertFalse(isJsonObject(" { foo:'bar' ", true));
@@ -799,8 +669,7 @@ public class StringUtilsTest {
//====================================================================================================
// isJsonArray(Object)
//====================================================================================================
- @Test
- public void testIsJsonArray() {
+ @Test void a26_isJsonArray() {
assertTrue(isJsonArray("[123,'bar']", true));
assertTrue(isJsonArray(" [ 123,'bar' ] ", true));
assertFalse(isJsonArray(" [ 123,'bar' ", true));
@@ -811,8 +680,7 @@ public class StringUtilsTest {
//====================================================================================================
// addLineNumbers(String)
//====================================================================================================
- @Test
- public void testAddLineNumbers() {
+ @Test void a27_addLineNumbers() {
assertNull(getNumberedLines(null));
assertEquals("1: \n", getNumberedLines(""));
assertEquals("1: foo\n", getNumberedLines("foo"));
@@ -822,8 +690,7 @@ public class StringUtilsTest {
//====================================================================================================
// compare(String,String)
//====================================================================================================
- @Test
- public void testCompare() {
+ @Test void a28_compare() {
assertTrue(compare("a","b") < 0);
assertTrue(compare("b","a") > 0);
assertTrue(compare(null,"b") < 0);
@@ -834,8 +701,7 @@ public class StringUtilsTest {
//====================================================================================================
// matchPattern(String)
//====================================================================================================
- @Test
- public void testGetMatchPattern() {
+ @Test void a29_getMatchPattern() {
assertTrue(getMatchPattern("a").matcher("a").matches());
assertTrue(getMatchPattern("*a*").matcher("aaa").matches());
assertFalse(getMatchPattern("*b*").matcher("aaa").matches());
@@ -844,8 +710,7 @@ public class StringUtilsTest {
//====================================================================================================
// getDuration(String)
//====================================================================================================
- @Test
- public void testGetDuration() {
+ @Test void a30_getDuration() {
assertEquals(-1, getDuration(null));
assertEquals(-1, getDuration(""));
assertEquals(-1, getDuration(" "));
@@ -929,8 +794,7 @@ public class StringUtilsTest {
//====================================================================================================
// getDuration(String)
//====================================================================================================
- @Test
- public void testStripInvalidHttpHeaderChars() {
+ @Test void a31_stripInvalidHttpHeaderChars() {
assertEquals("xxx", stripInvalidHttpHeaderChars("xxx"));
assertEquals("\t []^x",
stripInvalidHttpHeaderChars("\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u0020\\[]^x"));
}
@@ -938,8 +802,7 @@ public class StringUtilsTest {
//====================================================================================================
// abbreviate(String,int)
//====================================================================================================
- @Test
- public void testAbbrevate() {
+ @Test void a32_abbrevate() {
assertNull("xxx", abbreviate(null, 0));
assertEquals("foo", abbreviate("foo", 3));
assertEquals("...", abbreviate("fooo", 3));
@@ -950,20 +813,18 @@ public class StringUtilsTest {
//====================================================================================================
// splitMethodArgs(String)
//====================================================================================================
- @Test
- public void testSplitMethodArgs() {
-
assertObject(splitMethodArgs("java.lang.String")).asJson().is("['java.lang.String']");
-
assertObject(splitMethodArgs("java.lang.String,java.lang.Integer")).asJson().is("['java.lang.String','java.lang.Integer']");
- assertObject(splitMethodArgs("x,y")).asJson().is("['x','y']");
-
assertObject(splitMethodArgs("x,y<a,b>,z")).asJson().is("['x','y<a,b>','z']");
-
assertObject(splitMethodArgs("x,y<a<b,c>,d<e,f>>,z")).asJson().is("['x','y<a<b,c>,d<e,f>>','z']");
+ @Test void a33_splitMethodArgs() {
+ assertArray(splitMethodArgs("java.lang.String"),
"java.lang.String");
+
assertArray(splitMethodArgs("java.lang.String,java.lang.Integer"),
"java.lang.String", "java.lang.Integer");
+ assertArray(splitMethodArgs("x,y"), "x","y");
+ assertArray(splitMethodArgs("x,y<a,b>,z"), "x", "y<a,b>", "z");
+ assertArray(splitMethodArgs("x,y<a<b,c>,d<e,f>>,z"), "x",
"y<a<b,c>,d<e,f>>", "z");
}
//====================================================================================================
// fixUrl(String)
//====================================================================================================
- @Test
- public void testFixUrl() {
+ @Test void a34_fixUrl() {
assertEquals(null, fixUrl(null));
assertEquals("", fixUrl(""));
assertEquals("xxx", fixUrl("xxx"));
@@ -976,8 +837,7 @@ public class StringUtilsTest {
//====================================================================================================
// diffPosition(String,String)
//====================================================================================================
- @Test
- public void testDiffPosition() {
+ @Test void a35_diffPosition() {
assertEquals(-1, diffPosition("a", "a"));
assertEquals(-1, diffPosition(null, null));
assertEquals(0, diffPosition("a", "b"));
@@ -991,8 +851,7 @@ public class StringUtilsTest {
//====================================================================================================
// diffPositionIc(String,String)
//====================================================================================================
- @Test
- public void testDiffPositionIc() {
+ @Test void a36_diffPositionIc() {
assertEquals(-1, diffPositionIc("a", "a"));
assertEquals(-1, diffPositionIc("a", "A"));
assertEquals(-1, diffPositionIc(null, null));
@@ -1003,4 +862,32 @@ public class StringUtilsTest {
assertEquals(0, diffPositionIc("a", null));
assertEquals(0, diffPositionIc(null, "b"));
}
-}
\ No newline at end of file
+
+
//====================================================================================================
+ // splitNested(String)
+
//====================================================================================================
+ @Test void a37_splitNested() {
+ assertNull(splitNested(null));
+ assertList(splitNested(""));
+ assertList(splitNested("a"), "a");
+ assertList(splitNested("a,b,c"), "a", "b", "c");
+ assertList(splitNested("a{b,c},d"), "a{b,c}", "d");
+ assertList(splitNested("a,b{c,d}"), "a", "b{c,d}");
+ assertList(splitNested("a,b{c,d{e,f}}"), "a", "b{c,d{e,f}}");
+ assertList(splitNested("a { b , c } , d "), "a { b , c }", "d");
+ assertList(splitNested("a\\,b"), "a,b");
+ assertList(splitNested("a\\\\,b"), "a\\", "b");
+ }
+
+
//====================================================================================================
+ // splitNestedInner(String)
+
//====================================================================================================
+ @Test void a38_splitNestedInner() {
+ assertThrows(IllegalArgumentException.class,
()->splitNestedInner(null), "String was null.");
+ assertThrows(IllegalArgumentException.class,
()->splitNestedInner(""), "String was empty.");
+ assertList(splitNestedInner("a{b}"), "b");
+ assertList(splitNestedInner(" a { b } "), "b");
+ assertList(splitNestedInner("a{b,c}"), "b", "c");
+ assertList(splitNestedInner("a{b{c,d},e{f,g}}"), "b{c,d}",
"e{f,g}");
+ }
+}
\ No newline at end of file