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 fc150eb4f Test modernization new be6ea448b Merge branch 'master' of https://gitbox.apache.org/repos/asf/juneau.git fc150eb4f is described below commit fc150eb4f889977d6845fd73eb29d8d56ef7ea64 Author: James Bognar <james.bog...@salesforce.com> AuthorDate: Fri Aug 29 12:54:06 2025 -0400 Test modernization --- .../java/org/apache/juneau/BeanConfig_Test.java | 14 +- .../test/java/org/apache/juneau/BeanMap_Test.java | 15 +- .../src/test/java/org/apache/juneau/TestUtils.java | 111 +++++++--- .../juneau/a/rttests/RoundTripBeanMaps_Test.java | 41 ++-- .../apache/juneau/dto/swagger/Contact_Test.java | 53 ++--- .../dto/swagger/ExternalDocumentation_Test.java | 47 +++-- .../apache/juneau/dto/swagger/HeaderInfo_Test.java | 89 ++++---- .../org/apache/juneau/dto/swagger/Info_Test.java | 46 +++-- .../org/apache/juneau/dto/swagger/Items_Test.java | 31 +-- .../apache/juneau/dto/swagger/License_Test.java | 38 +++- .../apache/juneau/dto/swagger/Operation_Test.java | 100 ++++----- .../juneau/dto/swagger/ParameterInfo_Test.java | 43 +--- .../juneau/dto/swagger/ResponseInfo_Test.java | 52 +++-- .../juneau/dto/swagger/SecurityScheme_Test.java | 53 ++--- .../org/apache/juneau/dto/swagger/Tag_Test.java | 40 ++-- .../org/apache/juneau/dto/swagger/Xml_Test.java | 44 ++-- .../juneau/http/remote/RrpcInterface_Test.java | 224 ++++++++++----------- .../java/org/apache/juneau/rest/Swagger_Test.java | 34 ++-- .../rest/annotation/Swagger_FormData_Test.java | 20 +- .../rest/annotation/Swagger_Header_Test.java | 20 +- .../juneau/rest/annotation/Swagger_Path_Test.java | 51 ++--- .../rest/annotation/Swagger_Response_Test.java | 81 +++----- .../juneau/testutils/pojos/SwappedObject.java | 5 + .../juneau/testutils/pojos/TypedBeanImpl.java | 5 + .../java/org/apache/juneau/uon/UonParser_Test.java | 3 +- .../urlencoding/CommonParser_UrlEncodingTest.java | 11 +- 26 files changed, 656 insertions(+), 615 deletions(-) diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java b/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java index ef640bd81..f64f20fbd 100755 --- a/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/BeanConfig_Test.java @@ -237,13 +237,11 @@ class BeanConfig_Test extends SimpleTestBase { // Bean o = "{name:'x',age:123}"; - assertEquals("x", bc.convertToType(o, Person.class).getName()); - assertEquals(123, bc.convertToType(o, Person.class).getAge()); + assertBean(bc.convertToType(o, Person.class), "name,age", "x,123"); // Read-only bean o = "{name:'x',age:123}"; - assertEquals("x", bc.convertToType(o, ReadOnlyPerson.class).getName()); - assertEquals(123, bc.convertToType(o, ReadOnlyPerson.class).getAge()); + assertBean(bc.convertToType(o, ReadOnlyPerson.class), "name,age", "x,123"); // Class with forString(String) method. o = UUID.randomUUID(); @@ -405,8 +403,7 @@ class BeanConfig_Test extends SimpleTestBase { f1.setA("Hello"); f1.setB(50); - assertEquals(bm2.get("a"), "Hello", fs("Failed to set string property 'a' on dynamic proxy bean. {0}", bm2)); // NOSONAR - assertEquals(bm2.get("b"), Integer.valueOf(50), fs("Failed to set string property 'b' on dynamic proxy bean. {0}", bm2)); + assertMap(bm2, "a,b", "Hello,50"); assertEquals(bm1, bm2, fs("Failed equality test of dynamic proxies beans: {0} / {1}", bm1, bm2)); assertEquals(bm2, bm1, fs("Failed reverse equality test of dynamic proxies beans: {0} / {1}", bm1, bm2)); } @@ -619,10 +616,7 @@ class BeanConfig_Test extends SimpleTestBase { 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); + assertBean(d, "f1{length},f2{length},f3{length},f4{length}", "{5000},{5000},{5003},{5003}"); }); } diff --git a/juneau-utest/src/test/java/org/apache/juneau/BeanMap_Test.java b/juneau-utest/src/test/java/org/apache/juneau/BeanMap_Test.java index df6d6a0fc..8eee2e537 100755 --- a/juneau-utest/src/test/java/org/apache/juneau/BeanMap_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/BeanMap_Test.java @@ -1038,12 +1038,10 @@ class BeanMap_Test extends SimpleTestBase { assertEquals(1, t.f1); t = (R2)m.cast(R1.class); - assertEquals(1, t.f1); - assertEquals(2, t.f2); + assertBean(t, "f1,f2", "1,2"); t = (R2)m.cast(bc.getClassMeta(R1.class)); - assertEquals(1, t.f1); - assertEquals(2, t.f2); + assertBean(t, "f1,f2", "1,2"); // Without _type m = new JsonMap(session); @@ -1051,16 +1049,13 @@ class BeanMap_Test extends SimpleTestBase { m.put("f2", "2"); m = (JsonMap)m.cast(Object.class); - assertEquals(1, t.f1); - assertEquals(2, t.f2); + assertBean(t, "f1,f2", "1,2"); t = m.cast(R2.class); - assertEquals(1, t.f1); - assertEquals(2, t.f2); + assertBean(t, "f1,f2", "1,2"); t = m.cast(bc.getClassMeta(R2.class)); - assertEquals(1, t.f1); - assertEquals(2, t.f2); + assertBean(t, "f1,f2", "1,2"); } // Bean with no properties diff --git a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java index 9e53ae2ac..6030efacc 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java +++ b/juneau-utest/src/test/java/org/apache/juneau/TestUtils.java @@ -135,25 +135,8 @@ public class TestUtils extends Utils2 { /** * Asserts the entries in an array matches the expected strings after they've been made readable. */ - @SuppressWarnings("unchecked") public static void assertArray(Object array, Object...expected) { - if (expected.length == 1 && expected[0] instanceof String && s(expected[0]).contains(",")) - expected = s(expected[0]).charAt(0) == '>' ? new String[]{s(expected[0]).substring(1)} : splita(s(expected[0])); - if (Array.getLength(array) != expected.length) - fail(fs("Wrong array length. expected={0}, actual={1}", expected.length, Array.getLength(array))); - for (var i = 0; i < expected.length; i++) { - var x = Array.get(array, i); - if (expected[i] instanceof String e) { - if (ne(r(x), e)) - fail(fs("Element at index {0} did not match. expected={1}, actual={2}", i, e, r(x))); - } else if (expected[i] instanceof Predicate e) { - if (! e.test(x)) - fail(fs("Element at index {0} did pass predicate. actual={1}", i, r(x))); - } else { - if (ne(expected[i], x)) - fail(fs("Element at index {0} did not match. expected={1}, actual={2}", i, r(expected[i]), r(x))); - } - } + assertCollection(arrayToList(array), expected); } /** @@ -358,7 +341,7 @@ public class TestUtils extends Utils2 { if (o instanceof Iterable o2) return isNumeric(name) ? toList(o2).get(Integer.parseInt(name)) : getBeanProp(o, name); if (o instanceof Iterator o2) return isNumeric(name) ? toList(o2).get(Integer.parseInt(name)) : getBeanProp(o, name); if (o instanceof Enumeration o2) return isNumeric(name) ? toList(o2).get(Integer.parseInt(name)) : getBeanProp(o, name); - return TestUtils.getBeanProp(o, name); + return getBeanProp(o, name); } private static boolean isNumeric(String name) { @@ -394,15 +377,21 @@ public class TestUtils extends Utils2 { f.setAccessible(true); return f.get(o); } + m = Arrays.stream(c.getMethods()).filter(x -> x.getName().equals("get") && x.getParameterCount() == 1 && x.getParameterTypes()[0] == String.class && x.getAnnotation(BeanIgnore.class) == null).findFirst().orElse(null); + if (m != null) { + m.setAccessible(true); + return m.invoke(o, name); + } + if (c.isArray()) { + switch (name) { + case "length": return Array.getLength(o); + default: // Fall through. + } + } throw runtimeException("No field called {0} found on class {1}", name, c.getName()); }); } - private static boolean isGetter(Method m, String n) { - var mn = m.getName(); - return ((("get"+n).equals(mn) || ("is"+n).equals(mn)) && m.getParameterCount() == 0); - } - public static String json(Object o) { return Json5.DEFAULT.write(o); } @@ -618,4 +607,78 @@ public class TestUtils extends Utils2 { } assertMap(m, properties, expected); } + + /** + * Converts any array (including primitive arrays) to a List. + * + * @param array The array to convert. Can be any array type including primitives. + * @return A List containing the array elements. Primitive values are auto-boxed. + * Returns null if the input is null. + * @throws IllegalArgumentException if the input is not an array. + */ + public static List<Object> arrayToList(Object array) { + if (array == null) { + return null; + } + + if (!array.getClass().isArray()) { + throw new IllegalArgumentException("Input must be an array, but was: " + array.getClass().getName()); + } + + var componentType = array.getClass().getComponentType(); + var length = Array.getLength(array); + var result = new ArrayList<Object>(length); + + // Handle primitive arrays specifically for better performance + if (componentType.isPrimitive()) { + if (componentType == int.class) { + var arr = (int[]) array; + for (int value : arr) { + result.add(value); + } + } else if (componentType == long.class) { + var arr = (long[]) array; + for (long value : arr) { + result.add(value); + } + } else if (componentType == double.class) { + var arr = (double[]) array; + for (double value : arr) { + result.add(value); + } + } else if (componentType == float.class) { + var arr = (float[]) array; + for (float value : arr) { + result.add(value); + } + } else if (componentType == boolean.class) { + var arr = (boolean[]) array; + for (boolean value : arr) { + result.add(value); + } + } else if (componentType == byte.class) { + var arr = (byte[]) array; + for (byte value : arr) { + result.add(value); + } + } else if (componentType == char.class) { + var arr = (char[]) array; + for (char value : arr) { + result.add(value); + } + } else if (componentType == short.class) { + var arr = (short[]) array; + for (short value : arr) { + result.add(value); + } + } + } else { + // Handle Object arrays + for (var i = 0; i < length; i++) { + result.add(Array.get(array, i)); + } + } + + return result; + } } diff --git a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMaps_Test.java b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMaps_Test.java index 84da99df0..dafcda52e 100755 --- a/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMaps_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/a/rttests/RoundTripBeanMaps_Test.java @@ -170,15 +170,15 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { l.get(0).setF1("bar"); l = t.roundTrip(l, List.class, IBean.class); - assertEquals("bar", l.get(0).getF1()); + assertBean(l.get(0), "f1", "bar"); l = t.roundTrip(l, LinkedList.class, IBean.class); - assertEquals("bar", l.get(0).getF1()); + assertBean(l.get(0), "f1", "bar"); l.get(0).setF1("bing"); l = t.roundTrip(l, List.class, CBean.class); - assertEquals("bing", l.get(0).getF1()); + assertBean(l.get(0), "f1", "bing"); l = t.roundTrip(l, LinkedList.class, CBean.class); - assertEquals("bing", l.get(0).getF1()); + assertBean(l.get(0), "f1", "bing"); } //==================================================================================================== @@ -192,15 +192,15 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { l.get("foo").setF1("bar"); l = t.roundTrip(l, Map.class, String.class, IBean.class); - assertEquals("bar", l.get("foo").getF1()); + assertBean(l.get("foo"), "f1", "bar"); l = t.roundTrip(l, LinkedHashMap.class, String.class, IBean.class); - assertEquals("bar", l.get("foo").getF1()); + assertBean(l.get("foo"), "f1", "bar"); l.get("foo").setF1("bing"); l = t.roundTrip(l, Map.class, String.class, CBean.class); - assertEquals("bing", l.get("foo").getF1()); + assertBean(l.get("foo"), "f1", "bing"); l = t.roundTrip(l, LinkedHashMap.class, String.class, CBean.class); - assertEquals("bing", l.get("foo").getF1()); + assertBean(l.get("foo"), "f1", "bing"); } //==================================================================================================== @@ -214,12 +214,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { b = t.roundTrip(b); if (t.returnOriginalObject || t.getParser() == null) return; - assertEquals(0, b.f1); - assertEquals(0, b.f2); - assertEquals(1, b.f3); - assertEquals(1, b.f4); - assertEquals(0, b.getF5()); - assertEquals(1, b.getF6()); + assertBean(b, "f1,f2,f3,f4,f5,f6", "0,0,1,1,0,1"); } public interface IBean { @@ -434,7 +429,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var r = s.serialize(ba1); var b = p.parse(r, BA.class); assertTrue(b instanceof BA1); - assertJson(b, "{f0a:'f0a',f0b:'f0b',f1:'f1'}"); + assertBean(b, "f0a,f0b,f1", "f0a,f0b,f1"); } @Bean(dictionary={BA1.class,BA2.class}) @@ -477,7 +472,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var r = s.serialize(c1); var c = p.parse(r, CA.class); assertTrue(c instanceof CA1); - assertJson(c, "{f0a:'f0a',f0b:'f0b',f1:'f1'}"); + assertBean(c, "f0a,f0b,f1", "f0a,f0b,f1"); } public abstract static class CA { @@ -524,7 +519,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var r = s.serialize(d); d = p.parse(r, D1.class); assertNull(d.f1); - assertJson(d, "{f3:'f3',f2:'f2'}"); + assertBean(d, "f3,f2", "f3,f2"); } @Bean(p="f3,f2") @@ -588,7 +583,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var e = new E1().init(); var r = s.serialize(e); e = p.parse(r, E1.class); - assertJson(e, "{f1:'f1',f3:'f3'}"); + assertBean(e, "f1,f3", "f1,f3"); } @Bean(excludeProperties="f2") @@ -619,7 +614,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var e = new E2().init(); var r = s.serialize(e); e = p.parse(r, E2.class); - assertJson(e, "{f1:'f1',f3:'f3'}"); + assertBean(e, "f1,f3", "f1,f3"); } public static class E2 { @@ -649,7 +644,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { var x = new FA2().init(); var r = s.serialize(x); x = p.parse(r, FA2.class); - assertJson(x, "{f1:'f1'}"); + assertBean(x, "f1", "f1"); } @Bean(interfaceClass=FA1.class) @@ -689,7 +684,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { x = new FB2().init(); r = s.build().serialize(x); x = p.build().parse(r, FB2.class); - assertJson(x, "{f1:'f1'}"); + assertBean(x, "f1", "f1"); // --- BeanFilter defined on child class class --- s.interfaces(FB1.class); @@ -698,7 +693,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { x = new FB2().init(); r = s.build().serialize(x); x = p.build().parse(r, FB2.class); - assertJson(x, "{f1:'f1'}"); + assertBean(x, "f1", "f1"); // --- BeanFilter defined as plain class --- s.interfaces(FB1.class); @@ -707,7 +702,7 @@ class RoundTripBeanMaps_Test extends SimpleTestBase { x = new FB2().init(); r = s.build().serialize(x); x = p.build().parse(r, FB2.class); - assertJson(x, "{f1:'f1'}"); + assertBean(x, "f1", "f1"); } public static class FB1 { diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java index b3910deef..da97c3a10 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Contact_Test.java @@ -32,10 +32,14 @@ class Contact_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Contact(); - assertEquals("foo", t.setName("foo").getName()); + + assertBean( + t.setName("a").setEmail("b").setUrl(URI.create("http://c")), + "name,email,url", + "a,b,http://c" + ); + assertNull(t.setName(null).getName()); - assertString("http://bar", t.setUrl(URI.create("http://bar")).getUrl()); - assertEquals("foo", t.setEmail("foo").getEmail()); assertNull(t.setEmail(null).getEmail()); } @@ -46,32 +50,33 @@ class Contact_Test extends SimpleTestBase { var t = new Contact(); t - .set("name", "foo") - .set("url", "bar") - .set("email", "baz") - .set("$ref", "qux"); + .set("name", "a") + .set("url", "b") + .set("email", "c") + .set("$ref", "d"); - assertJson(t, "{name:'foo',url:'bar',email:'baz','$ref':'qux'}"); + assertBean(t, "name,url,email,$ref", "a,b,c,d"); t - .set("name", new StringBuilder("foo")) - .set("url", new StringBuilder("bar")) - .set("email", new StringBuilder("baz")) - .set("$ref", new StringBuilder("qux")); + .set("name", new StringBuilder("a")) + .set("url", new StringBuilder("b")) + .set("email", new StringBuilder("c")) + .set("$ref", new StringBuilder("d")); - assertJson(t, "{name:'foo',url:'bar',email:'baz','$ref':'qux'}"); + assertBean(t, "name,url,email,$ref", "a,b,c,d"); - assertEquals("foo", t.get("name", String.class)); - assertString("bar", t.get("url", URI.class)); - assertEquals("baz", t.get("email", String.class)); - assertEquals("qux", t.get("$ref", String.class)); + assertMapped( + t, (obj,prop) -> obj.get(prop, String.class), + "name,url,email,$ref", + "a,b,c,d" + ); t.set("null", null).set(null, "null"); assertNull(t.get("null", Object.class)); assertNull(t.get(null, Object.class)); assertNull(t.get("foo", Object.class)); - assertJson(JsonParser.DEFAULT.parse("{name:'foo',url:'bar',email:'baz','$ref':'qux'}", Contact.class), "{name:'foo',url:'bar',email:'baz','$ref':'qux'}"); + assertBean(JsonParser.DEFAULT.parse("{name:'a',url:'b',email:'c','$ref':'d'}", Contact.class), "name,url,email,$ref", "a,b,c,d"); } @Test void b02_copy() { @@ -82,13 +87,13 @@ class Contact_Test extends SimpleTestBase { assertJson(t, "{}"); t - .set("name", "foo") - .set("url", "bar") - .set("email", "baz") - .set("$ref", "qux") + .set("name", "a") + .set("url", "b") + .set("email", "c") + .set("$ref", "d") .copy(); - assertJson(t, "{name:'foo',url:'bar',email:'baz','$ref':'qux'}"); + assertBean(t, "name,url,email,$ref", "a,b,c,d"); } @Test void b03_keySet() { @@ -102,6 +107,6 @@ class Contact_Test extends SimpleTestBase { .set("email", "baz") .set("$ref", "qux"); - assertJson(t.keySet(), "['email','name','url','$ref']"); + assertSet(t.keySet(), "email,name,url,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java index a2fe1afae..667d0de23 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ExternalDocumentation_Test.java @@ -32,9 +32,14 @@ class ExternalDocumentation_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new ExternalDocumentation(); - assertEquals("foo", t.setDescription("foo").getDescription()); + + assertBean( + t.setDescription("a").setUrl(URI.create("http://b")), + "description,url", + "a,http://b" + ); + assertNull(t.setDescription(null).getDescription()); - assertString("http://bar", t.setUrl(URI.create("http://bar")).getUrl()); } /** @@ -44,29 +49,31 @@ class ExternalDocumentation_Test extends SimpleTestBase { var t = new ExternalDocumentation(); t - .set("description", "foo") - .set("url", "bar") - .set("$ref", "baz"); + .set("description", "a") + .set("url", "b") + .set("$ref", "c"); - assertJson(t, "{description:'foo',url:'bar','$ref':'baz'}"); + assertBean(t, "description,url,$ref", "a,b,c"); t - .set("description", new StringBuilder("foo")) - .set("url", new StringBuilder("bar")) - .set("$ref", new StringBuilder("baz")); + .set("description", new StringBuilder("a2")) + .set("url", new StringBuilder("b2")) + .set("$ref", new StringBuilder("c2")); - assertJson(t, "{description:'foo',url:'bar','$ref':'baz'}"); + assertBean(t, "description,url,$ref", "a2,b2,c2"); - assertEquals("foo", t.get("description", String.class)); - assertString("bar", t.get("url", URI.class)); - assertEquals("baz", t.get("$ref", String.class)); + assertMapped( + t, (obj,prop) -> obj.get(prop, String.class), + "description,url,$ref", + "a2,b2,c2" + ); t.set("null", null).set(null, "null"); assertNull(t.get("null", Object.class)); assertNull(t.get(null, Object.class)); assertNull(t.get("foo", Object.class)); - assertJson(JsonParser.DEFAULT.parse("{description:'foo',url:'bar','$ref':'baz'}", ExternalDocumentation.class), "{description:'foo',url:'bar','$ref':'baz'}"); + assertBean(JsonParser.DEFAULT.parse("{description:'a',url:'b','$ref':'c'}", ExternalDocumentation.class), "description,url,$ref", "a,b,c"); } @Test void b02_copy() { @@ -77,24 +84,24 @@ class ExternalDocumentation_Test extends SimpleTestBase { assertJson(t, "{}"); t - .set("description", "foo") - .set("url", "bar") - .set("$ref", "baz") + .set("description", "a") + .set("url", "b") + .set("$ref", "c") .copy(); - assertJson(t, "{description:'foo',url:'bar','$ref':'baz'}"); + assertBean(t, "description,url,$ref", "a,b,c"); } @Test void b03_keySet() { var t = new ExternalDocumentation(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("description", "foo") .set("url", "bar") .set("$ref", "baz"); - assertJson(t.keySet(), "['description','url','$ref']"); + assertSet(t.keySet(), "description,url,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java index dd2001490..bfc862a1a 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/HeaderInfo_Test.java @@ -33,45 +33,37 @@ class HeaderInfo_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new HeaderInfo(); - assertEquals("foo", t.setDescription("foo").getDescription()); + + // General - Combined assertBean test + assertBean( + t.setDescription("foo").setType("foo").setFormat("foo").setItems(items("foo")) + .setCollectionFormat("foo").setDefault("foo").setMaximum(123).setExclusiveMaximum(true) + .setMinimum(123).setExclusiveMinimum(true).setMaxLength(123).setMinLength(123) + .setPattern("foo").setMaxItems(123).setMinItems(123).setUniqueItems(true) + .setEnum(set("foo","bar")).setMultipleOf(123).setExample("foo").setRef("foo"), + "description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,example,ref", + "foo,foo,foo,{foo},foo,foo,123,true,123,true,123,123,foo,123,123,true,[foo,bar],123,foo,foo" + ); + + // Special cases assertNull(t.setDescription(null).getDescription()); - assertEquals("foo", t.setType("foo").getType()); assertNull(t.setType(null).getType()); - assertEquals("foo", t.setFormat("foo").getFormat()); assertNull(t.setFormat(null).getFormat()); - assertJson(t.setItems(items("foo")).getItems(), "{type:'foo'}"); assertNull(t.setItems((Items)null).getItems()); - assertEquals("foo", t.setCollectionFormat("foo").getCollectionFormat()); assertNull(t.setCollectionFormat(null).getCollectionFormat()); - assertEquals("foo", t.setDefault("foo").getDefault()); - assertString("foo", t.setDefault(new StringBuilder("foo")).getDefault()); assertNull(t.setDefault(null).getDefault()); - assertEquals(123, t.setMaximum(123).getMaximum()); assertEquals(123f, t.setMaximum(123f).getMaximum()); - assertTrue(t.setExclusiveMaximum(true).getExclusiveMaximum()); - assertEquals(123, t.setMinimum(123).getMinimum()); assertEquals(123f, t.setMinimum(123f).getMinimum()); - assertTrue(t.setExclusiveMinimum(true).getExclusiveMinimum()); - assertEquals(123, t.setMaxLength(123).getMaxLength()); - assertEquals(123, t.setMinLength(123).getMinLength()); - assertEquals("foo", t.setPattern("foo").getPattern()); assertNull(t.setPattern(null).getPattern()); - assertEquals(123, t.setMaxItems(123).getMaxItems()); - assertEquals(123, t.setMinItems(123).getMinItems()); - assertTrue(t.setUniqueItems(true).getUniqueItems()); - assertJson(t.setEnum(set("foo","bar")).getEnum(), "['foo','bar']"); - assertJson(t.setEnum(set()).getEnum(), "[]"); - assertJson(t.setEnum("foo","bar").getEnum(), "['foo','bar']"); + assertSet(t.setEnum(set()).getEnum()); + assertSet(t.setEnum("foo","bar").getEnum(), "foo,bar"); assertNull(t.setEnum((Set<Object>)null).getEnum()); - assertJson(t.addEnum("foo","bar").getEnum(), "['foo','bar']"); - assertJson(t.addEnum("baz").getEnum(), "['foo','bar','baz']"); - assertEquals(123, t.setMultipleOf(123).getMultipleOf()); + assertSet(t.addEnum("foo","bar").getEnum(), "foo,bar"); + assertSet(t.addEnum("baz").getEnum(), "foo,bar,baz"); assertEquals(123f, t.setMultipleOf(123f).getMultipleOf()); - assertEquals("foo", t.setExample("foo").getExample()); - assertEquals(123f, t.setExample(123f).getExample()); + assertBean(t.setExample(123f), "example", "123.0"); assertNull(t.setExample((String)null).getExample()); - assertEquals("foo", t.setRef("foo").getRef()); - assertNull(t.setRef(null).getRef()); + assertBean(t.setRef(null), "ref", "null"); } /** @@ -102,7 +94,9 @@ class HeaderInfo_Test extends SimpleTestBase { .set("uniqueItems", true) .set("$ref", "ref"); - assertJson(t, "{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}"); + assertBean(t, + "description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example", + "d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e"); t .set("default", "a") @@ -126,7 +120,9 @@ class HeaderInfo_Test extends SimpleTestBase { .set("uniqueItems", "true") .set("$ref", "ref"); - assertJson(t, "{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}"); + assertBean(t, + "description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example", + "d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e"); t .set("default", new StringBuilder("a")) @@ -150,28 +146,13 @@ class HeaderInfo_Test extends SimpleTestBase { .set("uniqueItems", new StringBuilder("true")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}"); + assertBean(t, + "description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example", + "d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e"); - assertString("a", t.get("default", Object.class)); - assertJson(t.get("enum", Object.class), "['b']"); - assertEquals("c", t.get("collectionFormat", Object.class)); - assertEquals("d", t.get("description", Object.class)); - assertString("e", t.get("example", Object.class)); - assertTrue((Boolean)t.get("exclusiveMaximum", Object.class)); - assertTrue((Boolean)t.get("exclusiveMinimum", Object.class)); - assertEquals("g", t.get("format", Object.class)); - assertJson(t.get("items", Object.class), "{type:'h'}"); - assertEquals(123f, t.get("maximum", Object.class)); - assertEquals(123, t.get("maxItems", Object.class)); - assertEquals(123, t.get("maxLength", Object.class)); - assertEquals(123f, t.get("minimum", Object.class)); - assertEquals(123, t.get("minItems", Object.class)); - assertEquals(123, t.get("minLength", Object.class)); - assertEquals(123f, t.get("multipleOf", Object.class)); - assertEquals("i", t.get("pattern", Object.class)); - assertEquals("j", t.get("type", Object.class)); - assertTrue((Boolean)t.get("uniqueItems", Object.class)); - assertEquals("ref", t.get("$ref", Object.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, Object.class), + "default,collectionFormat,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,type,uniqueItems,$ref", + "a,c,d,[b],e,true,true,g,{\"type\":\"h\"},123.0,123,123,123.0,123,123,123.0,i,j,true,ref"); t.set("null", null).set(null, "null"); assertNull(t.get("null", Object.class)); @@ -212,13 +193,15 @@ class HeaderInfo_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{description:'d',type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref',example:'e'}"); + assertBean(t, + "description,type,format,items{type},collectionFormat,default,maximum,exclusiveMaximum,minimum,exclusiveMinimum,maxLength,minLength,pattern,maxItems,minItems,uniqueItems,enum,multipleOf,ref,example", + "d,j,g,{h},c,a,123.0,true,123.0,true,123,123,i,123,123,true,[b],123.0,ref,e"); } @Test void b03_keySet() { var t = new HeaderInfo(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("default", "a") @@ -242,7 +225,7 @@ class HeaderInfo_Test extends SimpleTestBase { .set("uniqueItems", true) .set("$ref", "ref"); - assertJson(t.keySet(), "['collectionFormat','default','description','enum','example','exclusiveMaximum','exclusiveMinimum','format','items','maximum','maxItems','maxLength','minimum','minItems','minLength','multipleOf','pattern','$ref','type','uniqueItems']"); + assertSet(t.keySet(), "collectionFormat,default,description,enum,example,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,$ref,type,uniqueItems"); } @Test void c01_strict() { diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java index 08fcf69fa..cf2dd32d7 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Info_Test.java @@ -31,15 +31,18 @@ class Info_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Info(); - assertEquals("foo", t.setTitle("foo").getTitle()); + + // General + assertBean( + t.setTitle("a").setDescription("b").setTermsOfService("c").setContact(contact("d")).setLicense(license("e")).setVersion("f"), + "title,description,termsOfService,contact{name},license{name},version", + "a,b,c,{d},{e},f" + ); + + // Edge cases for nulls. assertNull(t.setTitle(null).getTitle()); - assertEquals("foo", t.setDescription("foo").getDescription()); assertNull(t.setDescription(null).getDescription()); - assertEquals("foo", t.setTermsOfService("foo").getTermsOfService()); assertNull(t.setTermsOfService(null).getTermsOfService()); - assertJson(t.setContact(contact("foo")).getContact(), "{name:'foo'}"); - assertJson(t.setLicense(license("foo")).getLicense(), "{name:'foo'}"); - assertEquals("foo", t.setVersion("foo").getVersion()); assertNull(t.setVersion(null).getVersion()); } @@ -58,7 +61,10 @@ class Info_Test extends SimpleTestBase { .set("version", "f") .set("$ref", "ref"); - assertJson(t, "{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "title,description,version,contact{name},license{name},termsOfService,$ref", + "e,b,f,{a},{c},d,ref"); t .set("contact", "{name:'a'}") @@ -69,7 +75,9 @@ class Info_Test extends SimpleTestBase { .set("version", "f") .set("$ref", "ref"); - assertJson(t, "{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}"); + assertBean(t, + "title,description,version,contact{name},license{name},termsOfService,$ref", + "e,b,f,{a},{c},d,ref"); t .set("contact", new StringBuilder("{name:'a'}")) @@ -80,15 +88,13 @@ class Info_Test extends SimpleTestBase { .set("version", new StringBuilder("f")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}"); + assertBean(t, + "title,description,version,contact{name},license{name},termsOfService,$ref", + "e,b,f,{a},{c},d,ref"); - assertEquals("{name:'a'}", t.get("contact", String.class)); - assertEquals("b", t.get("description", String.class)); - assertEquals("{name:'c'}", t.get("license", String.class)); - assertEquals("d", t.get("termsOfService", String.class)); - assertEquals("e", t.get("title", String.class)); - assertEquals("f", t.get("version", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "contact,description,license,termsOfService,title,version,$ref", + "{name:'a'},b,{name:'c'},d,e,f,ref"); assertType(Contact.class, t.get("contact", Object.class)); assertType(String.class, t.get("description", Object.class)); @@ -124,13 +130,15 @@ class Info_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{title:'e',description:'b',version:'f',contact:{name:'a'},license:{name:'c'},termsOfService:'d','$ref':'ref'}"); + assertBean(t, + "title,description,version,contact{name},license{name},termsOfService,$ref", + "e,b,f,{a},{c},d,ref"); } @Test void b03_keySet() { var t = new Info(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("contact", contact("a")) @@ -141,6 +149,6 @@ class Info_Test extends SimpleTestBase { .set("version", "f") .set("$ref", "ref"); - assertJson(t.keySet(), "['contact','description','license','termsOfService','title','version','$ref']"); + assertSet(t.keySet(), "contact,description,license,termsOfService,title,version,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java index 4d07511f8..7a774e1b6 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Items_Test.java @@ -33,14 +33,14 @@ class Items_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Items(); - assertEquals("foo", t.setType("foo").getType()); + assertBean(t.setType("foo"), "type", "foo"); assertNull(t.setType(null).getType()); - assertEquals("foo", t.setFormat("foo").getFormat()); + assertBean(t.setFormat("foo"), "format", "foo"); assertNull(t.setFormat(null).getFormat()); assertJson(t.setItems(items("foo")).getItems(), "{type:'foo'}"); - assertEquals("foo", t.setCollectionFormat("foo").getCollectionFormat()); + assertBean(t.setCollectionFormat("foo"), "collectionFormat", "foo"); assertNull(t.setCollectionFormat(null).getCollectionFormat()); - assertEquals("foo", t.setDefault("foo").getDefault()); + assertBean(t.setDefault("foo"), "default", "foo"); assertString("foo", t.setDefault(new StringBuilder("foo")).getDefault()); assertNull(t.setDefault(null).getDefault()); assertEquals(123, t.setMaximum(123).getMaximum()); @@ -51,7 +51,7 @@ class Items_Test extends SimpleTestBase { assertTrue(t.setExclusiveMinimum(true).getExclusiveMinimum()); assertEquals(123, t.setMaxLength(123).getMaxLength()); assertEquals(123, t.setMinLength(123).getMinLength()); - assertEquals("foo", t.setPattern("foo").getPattern()); + assertBean(t.setPattern("foo"), "pattern", "foo"); assertNull(t.setPattern(null).getPattern()); assertEquals(123, t.setMaxItems(123).getMaxItems()); assertEquals(123, t.setMinItems(123).getMinItems()); @@ -138,24 +138,9 @@ class Items_Test extends SimpleTestBase { assertJson(t, "{type:'j',format:'g',items:{type:'h'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}"); - assertEquals("a", t.get("default", String.class)); - assertEquals("['b']", t.get("enum", String.class)); - assertEquals("c", t.get("collectionFormat", String.class)); - assertEquals("true", t.get("exclusiveMaximum", String.class)); - assertEquals("true", t.get("exclusiveMinimum", String.class)); - assertEquals("g", t.get("format", String.class)); - assertEquals("{type:'h'}", t.get("items", String.class)); - assertEquals("123.0", t.get("maximum", String.class)); - assertEquals("123", t.get("maxItems", String.class)); - assertEquals("123", t.get("maxLength", String.class)); - assertEquals("123.0", t.get("minimum", String.class)); - assertEquals("123", t.get("minItems", String.class)); - assertEquals("123", t.get("minLength", String.class)); - assertEquals("123.0", t.get("multipleOf", String.class)); - assertEquals("i", t.get("pattern", String.class)); - assertEquals("j", t.get("type", String.class)); - assertEquals("true", t.get("uniqueItems", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "default,enum,collectionFormat,exclusiveMaximum,exclusiveMinimum,format,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,pattern,type,uniqueItems,$ref", + "a,['b'],c,true,true,g,{type:'h'},123.0,123,123,123.0,123,123,123.0,i,j,true,ref"); assertType(StringBuilder.class, t.get("default", Object.class)); assertType(Set.class, t.get("enum", Object.class)); diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java index 7c4d2220d..2e2dfd7de 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/License_Test.java @@ -32,9 +32,16 @@ class License_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new License(); - assertEquals("foo", t.setName("foo").getName()); + + // General + assertBean( + t.setName("a").setUrl(URI.create("http://b")), + "name,url", + "a,http://b" + ); + + // Edge cases for nulls. assertNull(t.setName(null).getName()); - assertString("foo", t.setUrl(URI.create("foo")).getUrl()); } /** @@ -48,25 +55,32 @@ class License_Test extends SimpleTestBase { .set("url", URI.create("b")) .set("$ref", "ref"); - assertJson(t, "{name:'a',url:'b','$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "name,url,$ref", + "a,b,ref"); t .set("name", "a") .set("url", "b") .set("$ref", "ref"); - assertJson(t, "{name:'a',url:'b','$ref':'ref'}"); + assertBean(t, + "name,url,$ref", + "a,b,ref"); t .set("name", new StringBuilder("a")) .set("url", new StringBuilder("b")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{name:'a',url:'b','$ref':'ref'}"); + assertBean(t, + "name,url,$ref", + "a,b,ref"); - assertEquals("a", t.get("name", String.class)); - assertEquals("b", t.get("url", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "name,url,$ref", + "a,b,ref"); assertType(String.class, t.get("name", Object.class)); assertType(URI.class, t.get("url", Object.class)); @@ -94,19 +108,21 @@ class License_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{name:'a',url:'b','$ref':'ref'}"); + assertBean(t, + "name,url,$ref", + "a,b,ref"); } @Test void b03_keySet() { var t = new License(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("name", "a") .set("url", URI.create("b")) .set("$ref", "ref"); - assertJson(t.keySet(), "['name','url','$ref']"); + assertSet(t.keySet(), "name,url,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java index 7e46f379b..21b2a97ef 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Operation_Test.java @@ -33,33 +33,32 @@ class Operation_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Operation(); - assertJson(t.setTags(set("foo","bar")).getTags(), "['foo','bar']"); - assertJson(t.setTags("bar","baz").getTags(), "['bar','baz']"); - assertJson(t.setTags(set()).getTags(), "[]"); + + // General + assertBean( + t.setSummary("a").setDescription("b").setExternalDocs(externalDocumentation("c")).setOperationId("d") + .setOperationId("e").setDeprecated(true).setTags(set("f1","f2")).setConsumes(set(MediaType.of("text/foo"))) + .setProduces(set(MediaType.of("text/foo"))).setParameters(set(parameterInfo("g1","g2"))).setResponses(map("1",responseInfo("h"))) + .setSchemes(set("foo")).setSecurity(alist(map("foo",alist("bar")))), + "summary,description,externalDocs{url},operationId,deprecated,tags,consumes,produces,parameters{0{in,name}},responses{1{description}},schemes,security", + "a,b,{c},e,true,[f1,f2],[text/foo],[text/foo],{{g1,g2}},{{h}},[foo],[{foo=[bar]}]" + ); + + // Edge cases for collections. + assertSet(t.setTags(set()).getTags()); assertNull(t.setTags((Collection<String>)null).getTags()); - assertEquals("foo", t.setSummary("foo").getSummary()); - assertEquals("foo", t.setDescription("foo").getDescription()); - assertJson(t.setExternalDocs(externalDocumentation("foo")).getExternalDocs(), "{url:'foo'}"); - assertEquals("foo", t.setOperationId("foo").getOperationId()); - assertJson(t.setConsumes(set(MediaType.of("text/foo"))).getConsumes(), "['text/foo']"); - assertJson(t.setConsumes(set()).getConsumes(), "[]"); + assertSet(t.setConsumes(set()).getConsumes()); assertNull(t.setConsumes((Collection<MediaType>)null).getConsumes()); - assertJson(t.setProduces(set(MediaType.of("text/foo"))).getProduces(), "['text/foo']"); - assertJson(t.setProduces(set()).getProduces(), "[]"); + assertSet(t.setProduces(set()).getProduces()); assertNull(t.setProduces((Collection<MediaType>)null).getProduces()); - assertJson(t.setParameters(set(parameterInfo("foo","bar"))).getParameters(), "[{'in':'foo',name:'bar'}]"); - assertJson(t.setParameters(set()).getParameters(), "[]"); + assertList(t.setParameters(set()).getParameters()); assertNull(t.setParameters((Collection<ParameterInfo>)null).getParameters()); - assertJson(t.setResponses(map("123",responseInfo("bar"))).getResponses(), "{'123':{description:'bar'}}"); - assertJson(t.setResponses(map()).getResponses(), "{}"); + assertMap(t.setResponses(map()).getResponses()); assertNull(t.setResponses((Map<String,ResponseInfo>)null).getResponses()); - assertJson(t.setSchemes(set("foo")).getSchemes(), "['foo']"); - assertJson(t.setSchemes(set()).getSchemes(), "[]"); + assertSet(t.setSchemes(set()).getSchemes()); assertNull(t.setSchemes((Set<String>)null).getSchemes()); - assertJson(t.setSecurity(alist(map("foo",alist("bar")))).getSecurity(), "[{foo:['bar']}]"); - assertJson(t.setSecurity(alist()).getSecurity(), "[]"); + assertList(t.setSecurity(alist()).getSecurity()); assertNull(t.setSecurity((List<Map<String,List<String>>>)null).getSecurity()); - assertTrue(t.setDeprecated(true).getDeprecated()); } /** @@ -81,9 +80,13 @@ class Operation_Test extends SimpleTestBase { .set("security", set(map("i1",alist("i2")))) .set("summary", "j") .set("tags", set("k")) - .set("$ref", "ref"); + .set("$ref", "l"); // Not a bean property but accessed through get(String) and set(String,Object). - assertJson(t, "{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}"); + assertBean( + t, + "consumes,deprecated,description,externalDocs{url},operationId,parameters{0{in,name}},produces,responses{1{description}},schemes,security,summary,tags,$ref", + "[text/a],true,b,{c},d,{{e1,e2}},[text/f],{{g}},[h],[{i1=[i2]}],j,[k],l" + ); t .set("consumes", "['text/a']") @@ -98,9 +101,13 @@ class Operation_Test extends SimpleTestBase { .set("security", "[{i1:['i2']}]") .set("summary", "j") .set("tags", "['k']") - .set("$ref", "ref"); + .set("$ref", "l"); - assertJson(t, "{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}"); + assertBean( + t, + "consumes,deprecated,description,externalDocs{url},operationId,parameters{0{in,name}},produces,responses{1{description}},schemes,security,summary,tags,$ref", + "[text/a],true,b,{c},d,{{e1,e2}},[text/f],{{g}},[h],[{i1=[i2]}],j,[k],l" + ); t .set("consumes", new StringBuilder("['text/a']")) @@ -115,23 +122,19 @@ class Operation_Test extends SimpleTestBase { .set("security", new StringBuilder("[{i1:['i2']}]")) .set("summary", new StringBuilder("j")) .set("tags", new StringBuilder("['k']")) - .set("$ref", new StringBuilder("ref")); - - assertJson(t, "{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}"); - - assertEquals("['text/a']", t.get("consumes", String.class)); - assertEquals("true", t.get("deprecated", String.class)); - assertEquals("b", t.get("description", String.class)); - assertEquals("{url:'c'}", t.get("externalDocs", String.class)); - assertEquals("d", t.get("operationId", String.class)); - assertEquals("[{'in':'e1',name:'e2'}]", t.get("parameters", String.class)); - assertEquals("['text/f']", t.get("produces", String.class)); - assertEquals("{'1':{description:'g'}}", t.get("responses", String.class)); - assertEquals("['h']", t.get("schemes", String.class)); - assertEquals("[{i1:['i2']}]", t.get("security", String.class)); - assertEquals("j", t.get("summary", String.class)); - assertEquals("['k']", t.get("tags", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + .set("$ref", new StringBuilder("l")); + + assertBean( + t, + "consumes,deprecated,description,externalDocs{url},operationId,parameters{0{in,name}},produces,responses{1{description}},schemes,security,summary,tags,$ref", + "[text/a],true,b,{c},d,{{e1,e2}},[text/f],{{g}},[h],[{i1=[i2]}],j,[k],l" + ); + + assertMapped(t, + (obj,prop) -> obj.get(prop, String.class), + "consumes,deprecated,description,externalDocs,operationId,parameters,produces,responses,schemes,security,summary,tags,$ref", + "['text/a'],true,b,{url:'c'},d,[{'in':'e1',name:'e2'}],['text/f'],{'1':{description:'g'}},['h'],[{i1:['i2']}],j,['k'],l" + ); assertType(Set.class, t.get("consumes", Object.class)); assertType(MediaType.class, t.get("consumes", List.class).get(0)); @@ -181,16 +184,20 @@ class Operation_Test extends SimpleTestBase { .set("security", set(map("i1",alist("i2")))) .set("summary", "j") .set("tags", set("k")) - .set("$ref", "ref") + .set("$ref", "l") .copy(); - assertJson(t, "{operationId:'d',summary:'j',description:'b',tags:['k'],externalDocs:{url:'c'},consumes:['text/a'],produces:['text/f'],parameters:[{'in':'e1',name:'e2'}],responses:{'1':{description:'g'}},schemes:['h'],deprecated:true,security:[{i1:['i2']}],'$ref':'ref'}"); + assertBean( + t, + "consumes,deprecated,description,externalDocs{url},operationId,parameters{0{in,name}},produces,responses{1{description}},schemes,security,summary,tags,$ref", + "[text/a],true,b,{c},d,{{e1,e2}},[text/f],{{g}},[h],[{i1=[i2]}],j,[k],l" + ); } @Test void b03_keySet() { var t = new Operation(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("consumes", set(MediaType.of("text/a"))) @@ -207,8 +214,9 @@ class Operation_Test extends SimpleTestBase { .set("tags", set("k")) .set("$ref", "ref"); - assertJson(t.keySet(), - "['consumes','deprecated','description','externalDocs','operationId','parameters','produces','responses','schemes','security','summary','tags','$ref']" + assertSet( + t.keySet(), + "consumes","deprecated","description","externalDocs","operationId","parameters","produces","responses","schemes","security","summary","tags","$ref" ); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java index 91e966415..54fd3cba4 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ParameterInfo_Test.java @@ -33,23 +33,23 @@ class ParameterInfo_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new ParameterInfo(); - assertEquals("foo", t.setName("foo").getName()); + assertBean(t.setName("foo"), "name", "foo"); assertNull(t.setName(null).getName()); - assertEquals("foo", t.setIn("foo").getIn()); + assertBean(t.setIn("foo"), "in", "foo"); assertNull(t.setIn(null).getIn()); - assertEquals("foo", t.setDescription("foo").getDescription()); + assertBean(t.setDescription("foo"), "description", "foo"); assertNull(t.setDescription(null).getDescription()); assertTrue(t.setRequired(true).getRequired()); assertJson(t.setSchema(schemaInfo().setTitle("foo")).getSchema(), "{title:'foo'}"); - assertEquals("foo", t.setType("foo").getType()); + assertBean(t.setType("foo"), "type", "foo"); assertNull(t.setType(null).getType()); - assertEquals("foo", t.setFormat("foo").getFormat()); + assertBean(t.setFormat("foo"), "format", "foo"); assertNull(t.setFormat(null).getFormat()); assertTrue(t.setAllowEmptyValue(true).getAllowEmptyValue()); assertJson(t.setItems(items("foo")).getItems(), "{type:'foo'}"); - assertEquals("foo", t.setCollectionFormat("foo").getCollectionFormat()); + assertBean(t.setCollectionFormat("foo"), "collectionFormat", "foo"); assertNull(t.setCollectionFormat(null).getCollectionFormat()); - assertEquals("foo", t.setDefault("foo").getDefault()); + assertBean(t.setDefault("foo"), "default", "foo"); assertString("foo", t.setDefault(new StringBuilder("foo")).getDefault()); assertNull(t.setDefault(null).getDefault()); assertEquals(123, t.setMaximum(123).getMaximum()); @@ -60,7 +60,7 @@ class ParameterInfo_Test extends SimpleTestBase { assertTrue(t.setExclusiveMinimum(true).getExclusiveMinimum()); assertEquals(123, t.setMaxLength(123).getMaxLength()); assertEquals(123, t.setMinLength(123).getMinLength()); - assertEquals("foo", t.setPattern("foo").getPattern()); + assertBean(t.setPattern("foo"), "pattern", "foo"); assertNull(t.setPattern(null).getPattern()); assertEquals(123, t.setMaxItems(123).getMaxItems()); assertEquals(123, t.setMinItems(123).getMinItems()); @@ -164,30 +164,9 @@ class ParameterInfo_Test extends SimpleTestBase { assertJson(t, "{'in':'f',name:'h',type:'k',description:'d',required:true,schema:{title:'j'},format:'e',allowEmptyValue:true,items:{type:'g'},collectionFormat:'c','default':'a',maximum:123.0,exclusiveMaximum:true,minimum:123.0,exclusiveMinimum:true,maxLength:123,minLength:123,pattern:'i',maxItems:123,minItems:123,uniqueItems:true,'enum':['b'],multipleOf:123.0,'$ref':'ref'}"); - assertEquals("a", t.get("default", String.class)); - assertEquals("['b']", t.get("enum", String.class)); - assertEquals("true", t.get("allowEmptyValue", String.class)); - assertEquals("c", t.get("collectionFormat", String.class)); - assertEquals("d", t.get("description", String.class)); - assertEquals("true", t.get("exclusiveMaximum", String.class)); - assertEquals("true", t.get("exclusiveMinimum", String.class)); - assertEquals("e", t.get("format", String.class)); - assertEquals("f", t.get("in", String.class)); - assertEquals("{type:'g'}", t.get("items", String.class)); - assertEquals("123.0", t.get("maximum", String.class)); - assertEquals("123", t.get("maxItems", String.class)); - assertEquals("123", t.get("maxLength", String.class)); - assertEquals("123.0", t.get("minimum", String.class)); - assertEquals("123", t.get("minItems", String.class)); - assertEquals("123", t.get("minLength", String.class)); - assertEquals("123.0", t.get("multipleOf", String.class)); - assertEquals("h", t.get("name", String.class)); - assertEquals("i", t.get("pattern", String.class)); - assertEquals("true", t.get("required", String.class)); - assertEquals("{title:'j'}", t.get("schema", String.class)); - assertEquals("k", t.get("type", String.class)); - assertEquals("true", t.get("uniqueItems", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "default,enum,allowEmptyValue,collectionFormat,description,exclusiveMaximum,exclusiveMinimum,format,in,items,maximum,maxItems,maxLength,minimum,minItems,minLength,multipleOf,name,pattern,required,schema,type,uniqueItems,$ref", + "a,['b'],true,c,d,true,true,e,f,{type:'g'},123.0,123,123,123.0,123,123,123.0,h,i,true,{title:'j'},k,true,ref"); assertType(StringBuilder.class, t.get("default", Object.class)); assertType(Set.class, t.get("enum", Object.class)); diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java index c7ea93b4f..96351c115 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/ResponseInfo_Test.java @@ -33,18 +33,23 @@ class ResponseInfo_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new ResponseInfo(); - assertEquals("foo", t.setDescription("foo").getDescription()); + + // General + assertBean( + t.setDescription("a").setSchema(schemaInfo().setTitle("b")).setHeaders(map("c",headerInfo("d"))).setExamples(map("e","f","g",alist("h"))), + "description,schema{title},headers{c{type}},examples", + "a,{b},{{d}},{e=f,g=[h]}" + ); + + // Edge cases for collections and nulls. assertNull(t.setDescription(null).getDescription()); - assertJson(t.setSchema(schemaInfo().setTitle("foo")).getSchema(), "{title:'foo'}"); - assertJson(t.setHeaders(map("foo",headerInfo("bar"))).getHeaders(), "{foo:{type:'bar'}}"); - assertType(HeaderInfo.class, t.setHeaders(map("foo",headerInfo("bar"))).getHeaders().get("foo")); - assertJson(t.setHeaders(map()).getHeaders(), "{}"); + assertMap(t.setHeaders(map()).getHeaders()); assertNull(t.setHeaders((Map<String,HeaderInfo>)null).getHeaders()); - assertJson(t.setExamples(map("foo","bar","baz",alist("qux"))).getExamples(), "{foo:'bar',baz:['qux']}"); - assertJson(t.setExamples(map()).getExamples(), "{}"); + assertMap(t.setExamples(map()).getExamples()); assertNull(t.setExamples((Map<String,Object>)null).getExamples()); - assertJson(t.setExamples(map("foo","bar","baz",alist("qux"))).getExamples(), "{foo:'bar',baz:['qux']}"); - assertJson(t.setExamples(map()).addExample("text/a", "a").addExample("text/b", null).addExample(null, "c").getExamples(), "{'text/a':'a','text/b':null,null:'c'}"); + + // Examples addExample method. + assertMap(t.setExamples(map()).addExample("text/a", "a").addExample("text/b", null).addExample(null, "c").getExamples(), "text/a=a", "text/b=null", "null=c"); } /** @@ -60,7 +65,10 @@ class ResponseInfo_Test extends SimpleTestBase { .set("schema", schemaInfo().setType("d")) .set("$ref", "ref"); - assertJson(t, "{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "description,schema{type},headers{a{type}},examples,$ref", + "a,{d},{{a1}},{foo=bar,baz=[qux]},ref"); t .set("description", "a") @@ -69,7 +77,9 @@ class ResponseInfo_Test extends SimpleTestBase { .set("schema", "{type:'d'}") .set("$ref", "ref"); - assertJson(t, "{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}"); + assertBean(t, + "description,schema{type},headers{a{type}},examples,$ref", + "a,{d},{{a1}},{foo=bar,baz=[qux]},ref"); t .set("description", new StringBuilder("a")) @@ -78,13 +88,13 @@ class ResponseInfo_Test extends SimpleTestBase { .set("schema", new StringBuilder("{type:'d'}")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}"); + assertBean(t, + "description,schema{type},headers{a{type}},examples,$ref", + "a,{d},{{a1}},{foo=bar,baz=[qux]},ref"); - assertEquals("a", t.get("description", String.class)); - assertEquals("{foo:'bar',baz:['qux']}", t.get("examples", String.class)); - assertEquals("{a:{type:'a1'}}", t.get("headers", String.class)); - assertEquals("{type:'d'}", t.get("schema", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "description,examples,headers,schema,$ref", + "a,{foo:'bar',baz:['qux']},{a:{type:'a1'}},{type:'d'},ref"); assertType(String.class, t.get("description", Object.class)); assertType(Map.class, t.get("examples", Object.class)); @@ -117,13 +127,15 @@ class ResponseInfo_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{description:'a',schema:{type:'d'},headers:{a:{type:'a1'}},examples:{foo:'bar',baz:['qux']},'$ref':'ref'}"); + assertBean(t, + "description,schema{type},headers{a{type}},examples,$ref", + "a,{d},{{a1}},{foo=bar,baz=[qux]},ref"); } @Test void b03_keySet() { var t = new ResponseInfo(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("description", "a") @@ -132,6 +144,6 @@ class ResponseInfo_Test extends SimpleTestBase { .set("schema", schemaInfo().setType("d")) .set("$ref", "ref"); - assertJson(t.keySet(), "['description','examples','headers','schema','$ref']"); + assertSet(t.keySet(), "description,examples,headers,schema,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java index f83fdf594..eb99d8162 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/SecurityScheme_Test.java @@ -32,22 +32,24 @@ class SecurityScheme_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new SecurityScheme(); - assertEquals("foo", t.setType("foo").getType()); + + // General + assertBean( + t.setType("a").setDescription("b").setName("c").setIn("d").setFlow("e") + .setAuthorizationUrl("f").setTokenUrl("g").setScopes(map("h1","h2")), + "type,description,name,in,flow,authorizationUrl,tokenUrl,scopes", + "a,b,c,d,e,f,g,{h1=h2}" + ); + + // Edge cases for nulls and collections. assertNull(t.setType(null).getType()); - assertEquals("foo", t.setDescription("foo").getDescription()); assertNull(t.setDescription(null).getDescription()); - assertEquals("foo", t.setName("foo").getName()); assertNull(t.setName(null).getName()); - assertEquals("foo", t.setIn("foo").getIn()); assertNull(t.setIn(null).getIn()); - assertEquals("foo", t.setFlow("foo").getFlow()); assertNull(t.setFlow(null).getFlow()); - assertEquals("foo", t.setAuthorizationUrl("foo").getAuthorizationUrl()); assertNull(t.setAuthorizationUrl(null).getAuthorizationUrl()); - assertEquals("foo", t.setTokenUrl("foo").getTokenUrl()); assertNull(t.setTokenUrl(null).getTokenUrl()); - assertJson(t.setScopes(map("foo","bar")).getScopes(), "{foo:'bar'}"); - assertJson(t.setScopes(map()).getScopes(), "{}"); + assertMap(t.setScopes(map()).getScopes()); assertNull(t.setScopes((Map<String,String>)null).getScopes()); } @@ -68,7 +70,10 @@ class SecurityScheme_Test extends SimpleTestBase { .set("type", "g") .set("$ref", "ref"); - assertJson(t, "{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "type,description,name,in,flow,authorizationUrl,tokenUrl,scopes,$ref", + "g,b,e,d,c,a,f,{foo=bar},ref"); t .set("authorizationUrl", "a") @@ -81,7 +86,9 @@ class SecurityScheme_Test extends SimpleTestBase { .set("type", "g") .set("$ref", "ref"); - assertJson(t, "{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}"); + assertBean(t, + "type,description,name,in,flow,authorizationUrl,tokenUrl,scopes,$ref", + "g,b,e,d,c,a,f,{foo=bar},ref"); t .set("authorizationUrl", new StringBuilder("a")) @@ -94,17 +101,13 @@ class SecurityScheme_Test extends SimpleTestBase { .set("type", new StringBuilder("g")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}"); + assertBean(t, + "type,description,name,in,flow,authorizationUrl,tokenUrl,scopes,$ref", + "g,b,e,d,c,a,f,{foo=bar},ref"); - assertEquals("a", t.get("authorizationUrl", String.class)); - assertEquals("b", t.get("description", String.class)); - assertEquals("c", t.get("flow", String.class)); - assertEquals("d", t.get("in", String.class)); - assertEquals("e", t.get("name", String.class)); - assertEquals("{foo:'bar'}", t.get("scopes", String.class)); - assertEquals("f", t.get("tokenUrl", String.class)); - assertEquals("g", t.get("type", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "authorizationUrl,description,flow,in,name,scopes,tokenUrl,type,$ref", + "a,b,c,d,e,{foo:'bar'},f,g,ref"); assertType(String.class, t.get("authorizationUrl", Object.class)); assertType(String.class, t.get("description", Object.class)); @@ -144,13 +147,15 @@ class SecurityScheme_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{type:'g',description:'b',name:'e','in':'d',flow:'c',authorizationUrl:'a',tokenUrl:'f',scopes:{foo:'bar'},'$ref':'ref'}"); + assertBean(t, + "type,description,name,in,flow,authorizationUrl,tokenUrl,scopes,$ref", + "g,b,e,d,c,a,f,{foo=bar},ref"); } @Test void b03_keySet() { var t = new SecurityScheme(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("authorizationUrl", "a") @@ -163,6 +168,6 @@ class SecurityScheme_Test extends SimpleTestBase { .set("type", "g") .set("$ref", "ref"); - assertJson(t.keySet(), "['authorizationUrl','description','flow','in','name','scopes','tokenUrl','type','$ref']"); + assertSet(t.keySet(), "authorizationUrl,description,flow,in,name,scopes,tokenUrl,type,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java index 0fe078a40..5df98afa1 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Tag_Test.java @@ -32,11 +32,17 @@ class Tag_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Tag(); - assertEquals("foo", t.setName("foo").getName()); + + // General + assertBean( + t.setName("a").setDescription("b").setExternalDocs(externalDocumentation("c")), + "name,description,externalDocs{url}", + "a,b,{c}" + ); + + // Edge cases for nulls. assertNull(t.setName(null).getName()); - assertEquals("foo", t.setDescription("foo").getDescription()); assertNull(t.setDescription(null).getDescription()); - assertJson(t.setExternalDocs(externalDocumentation("foo")).getExternalDocs(), "{url:'foo'}"); } /** @@ -51,7 +57,10 @@ class Tag_Test extends SimpleTestBase { .set("name", "c") .set("$ref", "ref"); - assertJson(t, "{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "name,description,externalDocs{url},$ref", + "c,a,{b},ref"); t .set("description", "a") @@ -59,7 +68,9 @@ class Tag_Test extends SimpleTestBase { .set("name", "c") .set("$ref", "ref"); - assertJson(t, "{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}"); + assertBean(t, + "name,description,externalDocs{url},$ref", + "c,a,{b},ref"); t .set("description", new StringBuilder("a")) @@ -67,12 +78,13 @@ class Tag_Test extends SimpleTestBase { .set("name", new StringBuilder("c")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}"); + assertBean(t, + "name,description,externalDocs{url},$ref", + "c,a,{b},ref"); - assertEquals("a", t.get("description", String.class)); - assertEquals("{url:'b'}", t.get("externalDocs", String.class)); - assertEquals("c", t.get("name", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "description,externalDocs,name,$ref", + "a,{url:'b'},c,ref"); assertType(String.class, t.get("description", Object.class)); assertType(ExternalDocumentation.class, t.get("externalDocs", Object.class)); @@ -102,13 +114,15 @@ class Tag_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{name:'c',description:'a',externalDocs:{url:'b'},'$ref':'ref'}"); + assertBean(t, + "name,description,externalDocs{url},$ref", + "c,a,{b},ref"); } @Test void b03_keySet() { var t = new Tag(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("description", "a") @@ -116,6 +130,6 @@ class Tag_Test extends SimpleTestBase { .set("name", "c") .set("$ref", "ref"); - assertJson(t.keySet(), "['description','externalDocs','name','$ref']"); + assertSet(t.keySet(), "description,externalDocs,name,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java index a583aa996..e9b1c9b73 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/dto/swagger/Xml_Test.java @@ -30,14 +30,18 @@ class Xml_Test extends SimpleTestBase { */ @Test void a01_gettersAndSetters() { var t = new Xml(); - assertEquals("foo", t.setName("foo").getName()); + + // General + assertBean( + t.setName("a").setNamespace("b").setPrefix("c").setAttribute(true).setWrapped(true), + "name,namespace,prefix,attribute,wrapped", + "a,b,c,true,true" + ); + + // Edge cases for nulls. assertNull(t.setName(null).getName()); - assertEquals("foo", t.setNamespace("foo").getNamespace()); assertNull(t.setNamespace(null).getNamespace()); - assertEquals("foo", t.setPrefix("foo").getPrefix()); assertNull(t.setPrefix(null).getPrefix()); - assertTrue(t.setAttribute(true).getAttribute()); - assertTrue(t.setWrapped(true).getWrapped()); } /** @@ -54,7 +58,10 @@ class Xml_Test extends SimpleTestBase { .set("wrapped", true) .set("$ref", "ref"); - assertJson(t, "{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}"); + // Comprehensive object state validation + assertBean(t, + "name,namespace,prefix,attribute,wrapped,$ref", + "a,b,c,true,true,ref"); t .set("attribute", "true") @@ -64,7 +71,9 @@ class Xml_Test extends SimpleTestBase { .set("wrapped", "true") .set("$ref", "ref"); - assertJson(t, "{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}"); + assertBean(t, + "name,namespace,prefix,attribute,wrapped,$ref", + "a,b,c,true,true,ref"); t .set("attribute", new StringBuilder("true")) @@ -74,14 +83,13 @@ class Xml_Test extends SimpleTestBase { .set("wrapped", new StringBuilder("true")) .set("$ref", new StringBuilder("ref")); - assertJson(t, "{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}"); + assertBean(t, + "name,namespace,prefix,attribute,wrapped,$ref", + "a,b,c,true,true,ref"); - assertEquals("true", t.get("attribute", String.class)); - assertEquals("a", t.get("name", String.class)); - assertEquals("b", t.get("namespace", String.class)); - assertEquals("c", t.get("prefix", String.class)); - assertEquals("true", t.get("wrapped", String.class)); - assertEquals("ref", t.get("$ref", String.class)); + assertMapped(t, (obj,prop) -> obj.get(prop, String.class), + "attribute,name,namespace,prefix,wrapped,$ref", + "true,a,b,c,true,ref"); assertType(Boolean.class, t.get("attribute", Object.class)); assertType(String.class, t.get("name", Object.class)); @@ -115,13 +123,15 @@ class Xml_Test extends SimpleTestBase { .set("$ref", "ref") .copy(); - assertJson(t, "{name:'a',namespace:'b',prefix:'c',attribute:true,wrapped:true,'$ref':'ref'}"); + assertBean(t, + "name,namespace,prefix,attribute,wrapped,$ref", + "a,b,c,true,true,ref"); } @Test void b03_keySet() { var t = new Xml(); - assertJson(t.keySet(), "[]"); + assertSet(t.keySet()); t .set("attribute", true) @@ -131,6 +141,6 @@ class Xml_Test extends SimpleTestBase { .set("wrapped", true) .set("$ref", "ref"); - assertJson(t.keySet(), "['attribute','name','namespace','prefix','wrapped','$ref']"); + assertSet(t.keySet(), "attribute,name,namespace,prefix,wrapped,$ref"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java index 9512f7e19..4fc710d53 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/http/remote/RrpcInterface_Test.java @@ -564,89 +564,89 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setInt3dArray(int[][][] v) { - assertJson(v, "[[[1,2],null],null]"); + assertArray(v, "[[1,2],null]", null); } @Override public void setInteger3dArray(Integer[][][] v) { - assertJson(v, "[[[1,null],null],null]"); + assertArray(v, "[[1,null],null]", null); } @Override public void setString3dArray(String[][][] v) { - assertJson(v, "[[['foo',null],null],null]"); + assertArray(v, "[[foo,null],null]", null); } @Override public void setIntegerList(List<Integer> v) { - assertJson(v, "[1,null]"); + assertList(v, "1", null); assertType(Integer.class, v.get(0)); } @Override public void setInteger3dList(List<List<List<Integer>>> v) { - assertJson(v, "[[[1,null],null],null]"); + assertList(v, "[[1,null],null]", null); assertType(Integer.class, v.get(0).get(0).get(0)); } @Override public void setInteger1d3dList(List<Integer[][][]> v) { - assertJson(v, "[[[[1,null],null],null],null]"); + assertList(v, "[[[1,null],null],null]", null); assertType(Integer[][][].class, v.get(0)); assertType(Integer.class, v.get(0)[0][0][0]); } @Override public void setInt1d3dList(List<int[][][]> v) { - assertJson(v, "[[[[1,2],null],null],null]"); + assertList(v, "[[[1,2],null],null]", null); assertType(int[][][].class, v.get(0)); } @Override public void setStringList(List<String> v) { - assertJson(v, "['foo','bar',null]"); + assertList(v, "foo", "bar", null); } // Beans @Override public void setBean(ABean v) { - assertJson(v, "{a:1,b:'foo'}"); + assertBean(v, "a,b", "1,foo"); } @Override public void setBean3dArray(ABean[][][] v) { - assertJson(v, "[[[{a:1,b:'foo'},null],null],null]"); + assertArray(v, "[[{a:1,b:'foo'},null],null]",null); } @Override public void setBeanList(List<ABean> v) { - assertJson(v, "[{a:1,b:'foo'}]"); + assertList(v, ">{a:1,b:'foo'}"); // '>' tells assertList to treat comma literally. } @Override public void setBean1d3dList(List<ABean[][][]> v) { - assertJson(v, "[[[[{a:1,b:'foo'},null],null],null],null]"); + assertList(v, "[[[{a:1,b:'foo'},null],null],null]", null); } @Override public void setBeanMap(Map<String,ABean> v) { - assertJson(v, "{foo:{a:1,b:'foo'}}"); + assertMap(v, ">foo={a:1,b:'foo'}"); } @Override public void setBeanListMap(Map<String,List<ABean>> v) { - assertJson(v, "{foo:[{a:1,b:'foo'}]}"); + assertMap(v, ">foo=[{a:1,b:'foo'}]"); } @Override public void setBean1d3dListMap(Map<String,List<ABean[][][]>> v) { - assertJson(v, "{foo:[[[[{a:1,b:'foo'},null],null],null],null]}"); + assertMap(v, ">foo=[[[[{a:1,b:'foo'},null],null],null],null]"); } @Override public void setBeanListMapIntegerKeys(Map<Integer,List<ABean>> v) { - assertJson(v, "{'1':[{a:1,b:'foo'}]}"); // Note: JsonSerializer serializes key as string. + assertMap(v, ">1=[{a:1,b:'foo'}]"); assertType(Integer.class, v.keySet().iterator().next()); } @@ -654,49 +654,49 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setTypedBean(TypedBean v) { - assertJson(v, "{a:1,b:'foo'}"); + assertBean(v, "a,b", "1,foo"); assertType(TypedBeanImpl.class, v); } @Override public void setTypedBean3dArray(TypedBean[][][] v) { - assertJson(v, "[[[{a:1,b:'foo'},null],null],null]"); + assertArray(v, "[[a:1;b:foo,null],null]" ,null); // Testing serialization here. assertType(TypedBeanImpl.class, v[0][0][0]); } @Override public void setTypedBeanList(List<TypedBean> v) { - assertJson(v, "[{a:1,b:'foo'}]"); + assertList(v, "a:1;b:foo"); assertType(TypedBeanImpl.class, v.get(0)); } @Override public void setTypedBean1d3dList(List<TypedBean[][][]> v) { - assertJson(v, "[[[[{a:1,b:'foo'},null],null],null],null]"); + assertList(v, "[[[a:1;b:foo,null],null],null]", null); assertType(TypedBeanImpl.class, v.get(0)[0][0][0]); } @Override public void setTypedBeanMap(Map<String,TypedBean> v) { - assertJson(v, "{foo:{a:1,b:'foo'}}"); + assertMap(v, "foo=a:1;b:foo"); assertType(TypedBeanImpl.class, v.get("foo")); } @Override public void setTypedBeanListMap(Map<String,List<TypedBean>> v) { - assertJson(v, "{foo:[{a:1,b:'foo'}]}"); + assertMap(v, "foo=[a:1;b:foo]"); assertType(TypedBeanImpl.class, v.get("foo").get(0)); } @Override public void setTypedBean1d3dListMap(Map<String,List<TypedBean[][][]>> v) { - assertJson(v, "{foo:[[[[{a:1,b:'foo'},null],null],null],null]}"); + assertMap(v, ">foo=[[[[a:1;b:foo,null],null],null],null]"); assertType(TypedBeanImpl.class, v.get("foo").get(0)[0][0][0]); } @Override public void setTypedBeanListMapIntegerKeys(Map<Integer,List<TypedBean>> v) { - assertJson(v, "{'1':[{a:1,b:'foo'}]}"); // Note: JsonSerializer serializes key as string. + assertMap(v, "1=[a:1;b:foo]"); assertType(TypedBeanImpl.class, v.get(1).get(0)); } @@ -709,13 +709,13 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setSwappedObject3dArray(SwappedObject[][][] v) { - assertJson(v, "[[['"+SWAP+"',null],null],null]"); + assertArray(v, "[[wasUnswapped:true,null],null]" ,null); assertTrue(v[0][0][0].wasUnswapped); } @Override public void setSwappedObjectMap(Map<SwappedObject,SwappedObject> v) { - assertJson(v, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(v, "wasUnswapped:true=wasUnswapped:true"); var e = v.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue().wasUnswapped); @@ -723,7 +723,7 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setSwappedObject3dMap(Map<SwappedObject,SwappedObject[][][]> v) { - assertJson(v, "{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}"); + assertMap(v, ">wasUnswapped:true=[[[wasUnswapped:true,null],null],null]"); var e = v.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue()[0][0][0].wasUnswapped); @@ -738,13 +738,13 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setImplicitSwappedObject3dArray(ImplicitSwappedObject[][][] v) { - assertJson(v, "[[['"+SWAP+"',null],null],null]"); + assertArray(v, "[["+SWAP+",null],null]", null); assertTrue(v[0][0][0].wasUnswapped); } @Override public void setImplicitSwappedObjectMap(Map<ImplicitSwappedObject,ImplicitSwappedObject> v) { - assertJson(v, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(v, ">"+SWAP+"="+SWAP); var e = v.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue().wasUnswapped); @@ -752,7 +752,7 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setImplicitSwappedObject3dMap(Map<ImplicitSwappedObject,ImplicitSwappedObject[][][]> v) { - assertJson(v, "{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}"); + assertMap(v, ">"+SWAP+"=[[["+SWAP+",null],null],null]"); var e = v.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue()[0][0][0].wasUnswapped); @@ -767,30 +767,30 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setEnum3d(TestEnum[][][] v) { - assertJson(v, "[[['TWO',null],null],null]"); + assertArray(v, "[[TWO,null],null]", null); } @Override public void setEnumList(List<TestEnum> v) { - assertJson(v, "['TWO',null]"); + assertList(v, "TWO", null); assertType(TestEnum.class, v.get(0)); } @Override public void setEnum3dList(List<List<List<TestEnum>>> v) { - assertJson(v, "[[['TWO',null],null],null]"); + assertList(v, "[[TWO,null],null]", null); assertType(TestEnum.class, v.get(0).get(0).get(0)); } @Override public void setEnum1d3dList(List<TestEnum[][][]> v) { - assertJson(v, "[[[['TWO',null],null],null],null]"); + assertList(v, "[[[TWO,null],null],null]", null); assertType(TestEnum[][][].class, v.get(0)); } @Override public void setEnumMap(Map<TestEnum,TestEnum> v) { - assertJson(v, "{ONE:'TWO'}"); + assertMap(v, "ONE=TWO"); var e = v.entrySet().iterator().next(); assertType(TestEnum.class, e.getKey()); assertType(TestEnum.class, e.getValue()); @@ -798,7 +798,7 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setEnum3dArrayMap(Map<TestEnum,TestEnum[][][]> v) { - assertJson(v, "{ONE:[[['TWO',null],null],null]}"); + assertMap(v, ">ONE=[[[TWO,null],null],null]"); var e = v.entrySet().iterator().next(); assertType(TestEnum.class, e.getKey()); assertType(TestEnum[][][].class, e.getValue()); @@ -806,7 +806,7 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setEnum1d3dListMap(Map<TestEnum,List<TestEnum[][][]>> v) { - assertJson(v, "{ONE:[[[['TWO',null],null],null],null]}"); + assertMap(v, ">ONE=[[[[TWO,null],null],null],null]"); Map.Entry<TestEnum,List<TestEnum[][][]>> e = v.entrySet().iterator().next(); assertType(TestEnum.class, e.getKey()); assertType(TestEnum[][][].class, e.getValue().get(0)); @@ -818,107 +818,107 @@ class RrpcInterface_Test extends SimpleTestBase { @Override public void setMultiParamsInts(int x1,int[][][] x2,int[][][] x2n,List<int[][][]> x3,List<int[][][]> x3n) { - assertJson(x1, "1"); - assertJson(x2, "[[[1,2],null],null]"); + assertEquals(1, x1); + assertArray(x2, "[[1,2],null]" ,null); assertNull(x2n); - assertJson(x3, "[[[[1,2],null],null],null]"); + assertList(x3, "[[[1,2],null],null]", null); assertType(int[][][].class, x3.get(0)); assertNull(x3n); } @Override public void setMultiParamsInteger(Integer x1,Integer x1n,Integer[][][] x2,Integer[][][] x2n,List<Integer[][][]> x3,List<Integer[][][]> x3n) { - assertJson(x1, "1"); - assertJson(x2, "[[[1,null],null],null]"); + assertEquals((Integer)1, x1); + assertArray(x2, "[[1,null],null]", null); assertNull(x2n); - assertJson(x3, "[[[[1,null],null],null],null]"); + assertList(x3, "[[[1,null],null],null]", null); assertType(Integer[][][].class, x3.get(0)); assertNull(x3n); } @Override public void setMultiParamsFloat(float x1,float[][][] x2,float[][][] x2n,List<float[][][]> x3,List<float[][][]> x3n) { - assertJson(x1, "1.0"); - assertJson(x2, "[[[1.0,2.0],null],null]"); + assertEquals(1.0f, x1, 0.1f); + assertArray(x2, "[[1.0,2.0],null]", null); assertNull(x2n); - assertJson(x3, "[[[[1.0,2.0],null],null],null]"); + assertList(x3, "[[[1.0,2.0],null],null]", null); assertType(float[][][].class, x3.get(0)); assertNull(x3n); } @Override public void setMultiParamsFloatObject(Float x1,Float x1n,Float[][][] x2,Float[][][] x2n,List<Float[][][]> x3,List<Float[][][]> x3n) { - assertJson(x1, "1.0"); - assertJson(x2, "[[[1.0,null],null],null]"); + assertEquals(1.0f, x1, 0.1f); + assertArray(x2, "[[1.0,null],null]", null); assertNull(x2n); - assertJson(x3, "[[[[1.0,null],null],null],null]"); + assertList(x3, "[[[1.0,null],null],null]", null); assertType(Float[][][].class, x3.get(0)); assertNull(x3n); } @Override public void setMultiParamsString(String x1,String[][][] x2,String[][][] x2n,List<String[][][]> x3,List<String[][][]> x3n) { - assertJson(x1, "'foo'"); - assertJson(x2, "[[['foo',null],null],null]"); + assertEquals("foo", x1); + assertArray(x2, "[[foo,null],null]", null); assertNull(x2n); - assertJson(x3, "[[[['foo',null],null],null],null]"); + assertList(x3, "[[[foo,null],null],null]", null); assertType(String[][][].class, x3.get(0)); assertNull(x3n); } @Override public void setMultiParamsBean(ABean x1,ABean[][][] x2,ABean[][][] x2n,List<ABean[][][]> x3,List<ABean[][][]> x3n,Map<String,ABean> x4,Map<String,ABean> x4n,Map<String,List<ABean[][][]>> x5,Map<String,List<ABean[][][]>> x5n) { - assertJson(x1, "{a:1,b:'foo'}"); - assertJson(x2, "[[[{a:1,b:'foo'},null],null],null]"); + assertBean(x1, "a,b", "1,foo"); + assertArray(x2, "[[{a:1,b:'foo'},null],null]", null); // ABean toString converts it to JSON. assertNull(x2n); - assertJson(x3, "[[[[{a:1,b:'foo'},null],null],null],null]"); + assertList(x3, "[[[{a:1,b:'foo'},null],null],null]", null); assertType(ABean[][][].class, x3.get(0)); assertNull(x3n); - assertJson(x4, "{foo:{a:1,b:'foo'}}"); + assertMap(x4, ">foo={a:1,b:'foo'}"); assertNull(x4n); - assertJson(x5, "{foo:[[[[{a:1,b:'foo'},null],null],null],null]}"); + assertMap(x5, ">foo=[[[[{a:1,b:'foo'},null],null],null],null]"); assertNull(x5n); } @Override public void setMultiParamsSwappedObject(SwappedObject x1,SwappedObject[][][] x2,SwappedObject[][][] x2n,List<SwappedObject[][][]> x3,List<SwappedObject[][][]> x3n,Map<SwappedObject,SwappedObject> x4,Map<SwappedObject,SwappedObject> x4n,Map<SwappedObject,List<SwappedObject[][][]>> x5,Map<SwappedObject,List<SwappedObject[][][]>> x5n) { - assertJson(x1, "'"+SWAP+"'"); - assertJson(x2, "[[['"+SWAP+"',null],null],null]"); + assertTrue(x1.wasUnswapped); + assertArray(x2, "[[wasUnswapped:true,null],null]", null); assertNull(x2n); - assertJson(x3, "[[[['"+SWAP+"',null],null],null],null]"); + assertList(x3, "[[[wasUnswapped:true,null],null],null]", null); assertType(SwappedObject[][][].class, x3.get(0)); assertNull(x3n); - assertJson(x4, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(x4, "wasUnswapped:true=wasUnswapped:true"); assertNull(x4n); - assertJson(x5, "{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}"); + assertMap(x5, ">wasUnswapped:true=[[[[wasUnswapped:true,null],null],null],null]"); assertNull(x5n); } @Override public void setMultiParamsImplicitSwappedObject(ImplicitSwappedObject x1,ImplicitSwappedObject[][][] x2,ImplicitSwappedObject[][][] x2n,List<ImplicitSwappedObject[][][]> x3,List<ImplicitSwappedObject[][][]> x3n,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4,Map<ImplicitSwappedObject,ImplicitSwappedObject> x4n,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5,Map<ImplicitSwappedObject,List<ImplicitSwappedObject[][][]>> x5n) { - assertJson(x1, "'"+SWAP+"'"); - assertJson(x2, "[[['"+SWAP+"',null],null],null]"); + assertTrue(x1.wasUnswapped); + assertArray(x2, "[["+SWAP+",null],null]", null); assertNull(x2n); - assertJson(x3, "[[[['"+SWAP+"',null],null],null],null]"); + assertList(x3, "[[["+SWAP+",null],null],null]", null); assertType(ImplicitSwappedObject[][][].class, x3.get(0)); assertNull(x3n); - assertJson(x4, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(x4, ">"+SWAP+"="+SWAP); assertNull(x4n); - assertJson(x5, "{'"+SWAP+"':[[[['"+SWAP+"',null],null],null],null]}"); + assertMap(x5, ">"+SWAP+"=[[[["+SWAP+",null],null],null],null]"); assertNull(x5n); } @Override public void setMultiParamsEnum(TestEnum x1,TestEnum[][][] x2,TestEnum[][][] x2n,List<TestEnum[][][]> x3,List<TestEnum[][][]> x3n,Map<TestEnum,TestEnum> x4,Map<TestEnum,TestEnum> x4n,Map<TestEnum,List<TestEnum[][][]>> x5,Map<TestEnum,List<TestEnum[][][]>> x5n) { - assertJson(x1, "'TWO'"); - assertJson(x2, "[[['TWO',null],null],null]"); + assertEquals(TestEnum.TWO, x1); + assertArray(x2, "[[TWO,null],null]", null); assertNull(x2n); - assertJson(x3, "[[[['TWO',null],null],null],null]"); + assertList(x3, "[[[TWO,null],null],null]", null); assertType(TestEnum[][][].class, x3.get(0)); assertNull(x3n); - assertJson(x4, "{ONE:'TWO'}"); + assertMap(x4, "ONE=TWO"); assertNull(x4n); - assertJson(x5, "{ONE:[[[['TWO',null],null],null],null]}"); + assertMap(x5, ">ONE=[[[[TWO,null],null],null],null]"); assertNull(x5n); } }; @@ -981,26 +981,26 @@ class RrpcInterface_Test extends SimpleTestBase { @ParameterizedTest @MethodSource("input") void a09_returnInt3dArray(Input input) { - assertJson(input.proxy.returnInt3dArray(), "[[[1,2],null],null]"); + assertArray(input.proxy.returnInt3dArray(), "[[1,2],null]", null); } @ParameterizedTest @MethodSource("input") void a10_returnInteger3dArray(Input input) { - assertJson(input.proxy.returnInteger3dArray(), "[[[1,null],null],null]"); + assertArray(input.proxy.returnInteger3dArray(), "[[1,null],null]", null); } @ParameterizedTest @MethodSource("input") void a11_returnString3dArray(Input input) { - assertJson(input.proxy.returnString3dArray(), "[[['foo','bar',null],null],null]"); + assertArray(input.proxy.returnString3dArray(), "[[foo,bar,null],null]", null); } @ParameterizedTest @MethodSource("input") void a12_returnIntegerList(Input input) { var x = input.proxy.returnIntegerList(); - assertJson(x, "[1,null]"); + assertList(x, "1", null); assertType(Integer.class, x.get(0)); } @@ -1008,7 +1008,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void a13_returnInteger3dList(Input input) { var x = input.proxy.returnInteger3dList(); - assertJson(x, "[[[1,null],null],null]"); + assertList(x, "[[1,null],null]", null); assertType(Integer.class, x.get(0).get(0).get(0)); } @@ -1016,7 +1016,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void a14_returnInteger1d3dList(Input input) { var x = input.proxy.returnInteger1d3dList(); - assertJson(x, "[[[[1,null],null],null],null]"); + assertList(x, "[[[1,null],null],null]", null); assertType(Integer.class, x.get(0)[0][0][0]); } @@ -1024,14 +1024,14 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void a15_returnInt1d3dList(Input input) { var x = input.proxy.returnInt1d3dList(); - assertJson(x, "[[[[1,2],null],null],null]"); + assertList(x, "[[[1,2],null],null]", null); assertType(int[][][].class, x.get(0)); } @ParameterizedTest @MethodSource("input") void a16_returnStringList(Input input) { - assertJson(input.proxy.returnStringList(), "['foo','bar',null]"); + assertList(input.proxy.returnStringList(), "foo", "bar", null); } // Beans @@ -1040,7 +1040,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b01_returnBean(Input input) { var x = input.proxy.returnBean(); - assertJson(x, "{a:1,b:'foo'}"); + assertBean(x, "a,b", "1,foo"); assertType(ABean.class, x); } @@ -1048,7 +1048,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b02_returnBean3dArray(Input input) { var x = input.proxy.returnBean3dArray(); - assertJson(x, "[[[{a:1,b:'foo'},null],null],null]"); + assertArray(x, "[[{a:1,b:'foo'},null],null]", null); assertType(ABean.class, x[0][0][0]); } @@ -1056,7 +1056,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b03_returnBeanList(Input input) { var x = input.proxy.returnBeanList(); - assertJson(x, "[{a:1,b:'foo'}]"); + assertList(x, ">{a:1,b:'foo'}"); assertType(ABean.class, x.get(0)); } @@ -1064,7 +1064,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b04_returnBean1d3dList(Input input) { var x = input.proxy.returnBean1d3dList(); - assertJson(x, "[[[[{a:1,b:'foo'},null],null],null],null]"); + assertList(x, "[[[{a:1,b:'foo'},null],null],null]", null); assertType(ABean.class, x.get(0)[0][0][0]); } @@ -1072,7 +1072,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b05_returnBeanMap(Input input) { var x = input.proxy.returnBeanMap(); - assertJson(x, "{foo:{a:1,b:'foo'}}"); + assertMap(x, ">foo={a:1,b:'foo'}"); assertType(ABean.class, x.get("foo")); } @@ -1080,7 +1080,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b06_returnBeanListMap(Input input) { var x = input.proxy.returnBeanListMap(); - assertJson(x, "{foo:[{a:1,b:'foo'}]}"); + assertMap(x, ">foo=[{a:1,b:'foo'}]"); assertType(ABean.class, x.get("foo").get(0)); } @@ -1088,7 +1088,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void b07_returnBean1d3dListMap(Input input) { var x = input.proxy.returnBean1d3dListMap(); - assertJson(x, "{foo:[[[[{a:1,b:'foo'},null],null],null],null]}"); + assertMap(x, ">foo=[[[[{a:1,b:'foo'},null],null],null],null]"); assertType(ABean.class, x.get("foo").get(0)[0][0][0]); } @@ -1097,7 +1097,7 @@ class RrpcInterface_Test extends SimpleTestBase { void b08_returnBeanListMapIntegerKeys(Input input) { // Note: JsonSerializer serializes key as string. var x = input.proxy.returnBeanListMapIntegerKeys(); - assertJson(x, "{'1':[{a:1,b:'foo'}]}"); + assertMap(x, ">1=[{a:1,b:'foo'}]"); assertType(Integer.class, x.keySet().iterator().next()); } @@ -1107,7 +1107,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c01_returnTypedBean(Input input) { var x = input.proxy.returnTypedBean(); - assertJson(x, "{a:1,b:'foo'}"); + assertBean(x, "a,b", "1,foo"); assertType(TypedBeanImpl.class, x); } @@ -1115,7 +1115,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c02_returnTypedBean3dArray(Input input) { var x = input.proxy.returnTypedBean3dArray(); - assertJson(x, "[[[{a:1,b:'foo'},null],null],null]"); + assertArray(x, "[[a:1;b:foo,null],null]", null); assertType(TypedBeanImpl.class, x[0][0][0]); } @@ -1123,7 +1123,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c03_returnTypedBeanList(Input input) { var x = input.proxy.returnTypedBeanList(); - assertJson(x, "[{a:1,b:'foo'}]"); + assertList(x, "a:1;b:foo"); assertType(TypedBeanImpl.class, x.get(0)); } @@ -1131,7 +1131,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c04_returnTypedBean1d3dList(Input input) { var x = input.proxy.returnTypedBean1d3dList(); - assertJson(x, "[[[[{a:1,b:'foo'},null],null],null],null]"); + assertList(x, "[[[a:1;b:foo,null],null],null]", null); assertType(TypedBeanImpl.class, x.get(0)[0][0][0]); } @@ -1139,7 +1139,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c05_returnTypedBeanMap(Input input) { var x = input.proxy.returnTypedBeanMap(); - assertJson(x, "{foo:{a:1,b:'foo'}}"); + assertMap(x, "foo=a:1;b:foo"); assertType(TypedBeanImpl.class, x.get("foo")); } @@ -1147,7 +1147,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c06_returnTypedBeanListMap(Input input) { var x = input.proxy.returnTypedBeanListMap(); - assertJson(x, "{foo:[{a:1,b:'foo'}]}"); + assertMap(x, "foo=[a:1;b:foo]"); assertType(TypedBeanImpl.class, x.get("foo").get(0)); } @@ -1155,7 +1155,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void c07_returnTypedBean1d3dListMap(Input input) { var x = input.proxy.returnTypedBean1d3dListMap(); - assertJson(x, "{foo:[[[[{a:1,b:'foo'},null],null],null],null]}"); + assertMap(x, ">foo=[[[[a:1;b:foo,null],null],null],null]"); assertType(TypedBeanImpl.class, x.get("foo").get(0)[0][0][0]); } @@ -1164,7 +1164,7 @@ class RrpcInterface_Test extends SimpleTestBase { void c08_returnTypedBeanListMapIntegerKeys(Input input) { // Note: JsonSerializer serializes key as string. var x = input.proxy.returnTypedBeanListMapIntegerKeys(); - assertJson(x, "{'1':[{a:1,b:'foo'}]}"); + assertMap(x, "1=[a:1;b:foo]"); assertType(TypedBeanImpl.class, x.get(1).get(0)); } @@ -1174,7 +1174,6 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void d01_returnSwappedObject(Input input) { var x = input.proxy.returnSwappedObject(); - assertJson(x, "'"+SWAP+"'"); assertTrue(x.wasUnswapped); } @@ -1182,7 +1181,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void d02_returnSwappedObject3dArray(Input input) { var x = input.proxy.returnSwappedObject3dArray(); - assertJson(x, "[[['"+SWAP+"',null],null],null]"); + assertArray(x, "[[wasUnswapped:true,null],null]", null); assertTrue(x[0][0][0].wasUnswapped); } @@ -1190,7 +1189,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void d03_returnSwappedObjectMap(Input input) { var x = input.proxy.returnSwappedObjectMap(); - assertJson(x, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(x, "wasUnswapped:true=wasUnswapped:true"); var e = x.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue().wasUnswapped); @@ -1200,7 +1199,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void d04_returnSwappedObject3dMap(Input input) { var x = input.proxy.returnSwappedObject3dMap(); - assertJson(x, "{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}"); + assertMap(x, ">wasUnswapped:true=[[[wasUnswapped:true,null],null],null]"); var e = x.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue()[0][0][0].wasUnswapped); @@ -1212,7 +1211,6 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void e01_returnImplicitSwappedObject(Input input) { var x = input.proxy.returnImplicitSwappedObject(); - assertJson(x, "'"+SWAP+"'"); assertTrue(x.wasUnswapped); } @@ -1220,7 +1218,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void e02_returnImplicitSwappedObject3dArray(Input input) { var x = input.proxy.returnImplicitSwappedObject3dArray(); - assertJson(x, "[[['"+SWAP+"',null],null],null]"); + assertArray(x, "[["+SWAP+",null],null]", null); assertTrue(x[0][0][0].wasUnswapped); } @@ -1228,7 +1226,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void e03_returnImplicitSwappedObjectMap(Input input) { var x = input.proxy.returnImplicitSwappedObjectMap(); - assertJson(x, "{'"+SWAP+"':'"+SWAP+"'}"); + assertMap(x, ">"+SWAP+"="+SWAP); var e = x.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue().wasUnswapped); @@ -1238,7 +1236,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void e04_returnImplicitSwappedObject3dMap(Input input) { var x = input.proxy.returnImplicitSwappedObject3dMap(); - assertJson(x, "{'"+SWAP+"':[[['"+SWAP+"',null],null],null]}"); + assertMap(x, ">"+SWAP+"=[[["+SWAP+",null],null],null]"); var e = x.entrySet().iterator().next(); assertTrue(e.getKey().wasUnswapped); assertTrue(e.getValue()[0][0][0].wasUnswapped); @@ -1250,14 +1248,14 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f01_returnEnum(Input input) { var x = input.proxy.returnEnum(); - assertJson(x, "'TWO'"); + assertEquals(TestEnum.TWO, x); } @ParameterizedTest @MethodSource("input") void f02_returnEnum3d(Input input) { var x = input.proxy.returnEnum3d(); - assertJson(x, "[[['TWO',null],null],null]"); + assertArray(x, "[[TWO,null],null]", null); assertType(TestEnum.class, x[0][0][0]); } @@ -1265,7 +1263,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f03_returnEnumList(Input input) { var x = input.proxy.returnEnumList(); - assertJson(x, "['TWO',null]"); + assertList(x, "TWO", null); assertType(TestEnum.class, x.get(0)); } @@ -1273,7 +1271,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f04_returnEnum3dList(Input input) { var x = input.proxy.returnEnum3dList(); - assertJson(x, "[[['TWO',null],null],null]"); + assertList(x, "[[TWO,null],null]", null); assertType(TestEnum.class, x.get(0).get(0).get(0)); } @@ -1281,7 +1279,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f05_returnEnum1d3dList(Input input) { var x = input.proxy.returnEnum1d3dList(); - assertJson(x, "[[[['TWO',null],null],null],null]"); + assertList(x, "[[[TWO,null],null],null]", null); assertType(TestEnum[][][].class, x.get(0)); } @@ -1289,7 +1287,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f06_returnEnumMap(Input input) { var x = input.proxy.returnEnumMap(); - assertJson(x, "{ONE:'TWO'}"); + assertMap(x, "ONE=TWO"); var e = x.entrySet().iterator().next(); assertType(TestEnum.class, e.getKey()); assertType(TestEnum.class, e.getValue()); @@ -1299,7 +1297,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f07_returnEnum3dArrayMap(Input input) { var x = input.proxy.returnEnum3dArrayMap(); - assertJson(x, "{ONE:[[['TWO',null],null],null]}"); + assertMap(x, ">ONE=[[[TWO,null],null],null]"); var e = x.entrySet().iterator().next(); assertType(TestEnum.class, e.getKey()); assertType(TestEnum[][][].class, e.getValue()); @@ -1309,7 +1307,7 @@ class RrpcInterface_Test extends SimpleTestBase { @MethodSource("input") void f08_returnEnum1d3dListMap(Input input) { var x = input.proxy.returnEnum1d3dListMap(); - assertJson(x, "{ONE:[[[['TWO',null],null],null],null]}"); + assertMap(x, ">ONE=[[[[TWO,null],null],null],null]"); assertType(TestEnum[][][].class, x.get(TestEnum.ONE).get(0)); } @@ -1771,4 +1769,4 @@ class RrpcInterface_Test extends SimpleTestBase { Map<TestEnum,List<TestEnum[][][]>> x5n = null; TestUtils.assertNotThrown(()->input.proxy.setMultiParamsEnum(x1,x2,x2n,x3,x3n,x4,x4n,x5,x5n)); } -} +} \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java index 666837d57..a42d0be43 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/Swagger_Test.java @@ -602,11 +602,11 @@ class Swagger_Test extends SimpleTestBase { @Test void d04a_externalDocs_Swagger_externalDocs() throws Exception { var x = getSwagger(new D4()).getExternalDocs(); - assertJson(x, "{description:'b-description',url:'b-url'}"); + assertBean(x, "description,url", "b-description,b-url"); } @Test void d04b_externalDocs_Swagger_externalDocs_withFile() throws Exception { var x = getSwaggerWithFile(new D4()).getExternalDocs(); - assertJson(x, "{description:'b-description',url:'b-url'}"); + assertBean(x, "description,url", "b-description,b-url"); } @Rest( @@ -839,8 +839,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void f04_operation_tags_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new F4()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1", "c-tag-2"); - assertSet(getSwaggerWithFile(new F4()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1", "c-tag-2"); + assertSet(getSwagger(new F4()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1,c-tag-2"); + assertSet(getSwaggerWithFile(new F4()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1,c-tag-2"); } @Rest(swagger=@Swagger("paths:{'/path/{foo}':{get:{tags:['a-tag']}}}")) @@ -852,8 +852,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void f05_operation_tags_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new F5()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1", "c-tag-2"); - assertSet(getSwaggerWithFile(new F5()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1", "c-tag-2"); + assertSet(getSwagger(new F5()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1,c-tag-2"); + assertSet(getSwaggerWithFile(new F5()).getPaths().get("/path/{foo}").get("get").getTags(), "c-tag-1,c-tag-2"); } @Rest(messages="BasicRestInfoProviderTest", swagger=@Swagger("paths:{'/path/{foo}':{get:{tags:'a-tags'}}}")) @@ -1005,8 +1005,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void h04_operation_consumes_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new H4()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1", "c-consumes-2"); - assertSet(getSwaggerWithFile(new H4()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1", "c-consumes-2"); + assertSet(getSwagger(new H4()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1,c-consumes-2"); + assertSet(getSwaggerWithFile(new H4()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1,c-consumes-2"); } @Rest(swagger=@Swagger("paths:{'/path/{foo}':{get:{consumes:['a-consumes']}}}")) @@ -1018,8 +1018,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void h05_operation_consumes_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new H5()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1", "c-consumes-2"); - assertSet(getSwaggerWithFile(new H5()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1", "c-consumes-2"); + assertSet(getSwagger(new H5()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1,c-consumes-2"); + assertSet(getSwaggerWithFile(new H5()).getPaths().get("/path/{foo}").get("get").getConsumes(), "c-consumes-1,c-consumes-2"); } @Rest(messages="BasicRestInfoProviderTest", swagger=@Swagger("paths:{'/path/{foo}':{get:{consumes:['a-consumes']}}}")) @@ -1061,8 +1061,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void h08_operation_consumes_parsersOnClassAndMethod() throws Exception { - assertSet(getSwagger(new H8()).getPaths().get("/path2/{foo}").get("put").getConsumes(), "text/xml", "application/xml"); - assertSet(getSwaggerWithFile(new H8()).getPaths().get("/path2/{foo}").get("put").getConsumes(), "text/xml", "application/xml"); + assertSet(getSwagger(new H8()).getPaths().get("/path2/{foo}").get("put").getConsumes(), "text/xml,application/xml"); + assertSet(getSwaggerWithFile(new H8()).getPaths().get("/path2/{foo}").get("put").getConsumes(), "text/xml,application/xml"); } @Rest(parsers={JsonParser.class},swagger=@Swagger("paths:{'/path2/{foo}':{put:{consumes:['a-consumes']}}}")) @@ -1131,8 +1131,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void i04_operation_produces_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new I4()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1", "c-produces-2"); - assertSet(getSwaggerWithFile(new I4()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1", "c-produces-2"); + assertSet(getSwagger(new I4()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1,c-produces-2"); + assertSet(getSwaggerWithFile(new I4()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1,c-produces-2"); } @Rest(swagger=@Swagger("paths:{'/path/{foo}':{get:{produces:['a-produces']}}}")) @@ -1144,8 +1144,8 @@ class Swagger_Test extends SimpleTestBase { } @Test void i05_operation_produces_swaggerOnAnnotation() throws Exception { - assertSet(getSwagger(new I5()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1", "c-produces-2"); - assertSet(getSwaggerWithFile(new I5()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1", "c-produces-2"); + assertSet(getSwagger(new I5()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1,c-produces-2"); + assertSet(getSwaggerWithFile(new I5()).getPaths().get("/path/{foo}").get("get").getProduces(), "c-produces-1,c-produces-2"); } @Rest(messages="BasicRestInfoProviderTest", swagger=@Swagger("paths:{'/path/{foo}':{get:{produces:['a-produces']}}}")) @@ -1860,6 +1860,6 @@ class Swagger_Test extends SimpleTestBase { var o = s.getOperation("/", "get"); var ri = o.getResponse("200"); - assertEquals("{\n\tf1: 1,\n\tf2: 2\n}", ri.getExamples().get("application/json5")); + assertMap(ri.getExamples(), "application/json5", "{\n\tf1: 1,\n\tf2: 2\n}"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_FormData_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_FormData_Test.java index 8f0b43435..217bdd870 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_FormData_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_FormData_Test.java @@ -115,16 +115,16 @@ class Swagger_FormData_Test extends SimpleTestBase { var s = getSwagger(B.class); var x = s.getParameterInfo("/a","get","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'string'}"); + assertBean(x, "in,name,type", "formData,F,string"); x = s.getParameterInfo("/b","put","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'object',schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,schema{properties{f1{type}}}", "formData,F,object,{{{string}}}"); x = s.getParameterInfo("/c","post","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'array',items:{type:'string'}}"); + assertBean(x, "in,name,type,items{type}", "formData,F,array,{string}"); x = s.getParameterInfo("/d","delete","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'string'}"); + assertBean(x, "in,name,type", "formData,F,string"); } @Rest @@ -206,21 +206,21 @@ class Swagger_FormData_Test extends SimpleTestBase { var s = getSwagger(E.class); var x = s.getParameterInfo("/a","get","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'string'}"); + assertBean(x, "in,name,type", "formData,F,string"); x = s.getParameterInfo("/b","put","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'object',schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,schema{properties{f1{type}}}", "formData,F,object,{{{string}}}"); x = s.getParameterInfo("/c","post","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'array',items:{type:'string'}}"); + assertBean(x, "in,name,type,items{type}", "formData,F,array,{string}"); x = s.getParameterInfo("/d","delete","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'string'}"); + assertBean(x, "in,name,type", "formData,F,string"); x = s.getParameterInfo("/e","get","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'integer',format:'int32'}"); + assertBean(x, "in,name,type,format", "formData,F,integer,int32"); x = s.getParameterInfo("/f","get","formData","F"); - assertJson(x, "{'in':'formData',name:'F',type:'boolean'}"); + assertBean(x, "in,name,type", "formData,F,boolean"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Header_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Header_Test.java index 2f1cc65b8..f3fde451b 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Header_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Header_Test.java @@ -108,16 +108,16 @@ class Swagger_Header_Test extends SimpleTestBase { var s = getSwagger(B.class); var x = s.getParameterInfo("/a","get","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'string'}"); + assertBean(x, "in,name,type", "header,H,string"); x = s.getParameterInfo("/b","put","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'object',schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,schema{properties{f1{type}}}", "header,H,object,{{{string}}}"); x = s.getParameterInfo("/c","post","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'array',items:{type:'string'}}"); + assertBean(x, "in,name,type,items{type}", "header,H,array,{string}"); x = s.getParameterInfo("/d","delete","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'string'}"); + assertBean(x, "in,name,type", "header,H,string"); } @Rest @@ -200,21 +200,21 @@ class Swagger_Header_Test extends SimpleTestBase { var s = getSwagger(E.class); var x = s.getParameterInfo("/a","get","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'string'}"); + assertBean(x, "in,name,type", "header,H,string"); x = s.getParameterInfo("/b","put","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'object',schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,schema{properties{f1{type}}}", "header,H,object,{{{string}}}"); x = s.getParameterInfo("/c","post","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'array',items:{type:'string'}}"); + assertBean(x, "in,name,type,items{type}", "header,H,array,{string}"); x = s.getParameterInfo("/d","delete","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'string'}"); + assertBean(x, "in,name,type", "header,H,string"); x = s.getParameterInfo("/e","get","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'integer',format:'int32'}"); + assertBean(x, "in,name,type,format", "header,H,integer,int32"); x = s.getParameterInfo("/f","get","header","H"); - assertJson(x, "{'in':'header',name:'H',type:'boolean'}"); + assertBean(x, "in,name,type", "header,H,boolean"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Path_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Path_Test.java index 42b752cc2..ab74da61d 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Path_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Path_Test.java @@ -13,7 +13,6 @@ package org.apache.juneau.rest.annotation; import static org.apache.juneau.TestUtils.*; -import static org.junit.jupiter.api.Assertions.*; import java.util.*; @@ -107,27 +106,19 @@ class Swagger_Path_Test extends SimpleTestBase { var s = getSwagger(A.class); var x = s.getParameterInfo("/a/{P}","get","path","P"); - assertBean(x, "name,description,type", "P,a\nb,string"); - assertJson(x.getEnum(), "['a','b']"); - assertJson(x, "{'in':'path',name:'P',type:'string',description:'a\\nb',required:true,'enum':['a','b']}"); + assertBean(x, "in,name,type,description,required,enum", "path,P,string,a\nb,true,[a,b]"); x = s.getParameterInfo("/b/{P}","put","path","P"); - assertBean(x, "name,description,type", "P,a\nb,string"); - assertJson(x.getEnum(), "['a','b']"); - assertJson(x, "{'in':'path',name:'P',type:'string',description:'a\\nb',required:true,'enum':['a','b']}"); + assertBean(x, "in,name,type,description,required,enum", "path,P,string,a\nb,true,[a,b]"); x = s.getParameterInfo("/c/{P}","post","path","P"); - assertBean(x, "name,description,type", "P,b\nc,string"); - assertJson(x.getEnum(), "['b','c']"); - assertJson(x, "{'in':'path',name:'P',type:'string',description:'b\\nc',required:true,'enum':['b','c']}"); + assertBean(x, "in,name,type,description,required,enum", "path,P,string,b\nc,true,[b,c]"); x = s.getParameterInfo("/d/{P}","delete","path","P"); - assertEquals("P", x.getName()); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true}"); + assertBean(x, "in,name,type,required", "path,P,string,true"); x = s.getParameterInfo("/e/{P}","get","path","P"); - assertJson(x.getEnum(), "['a','b']"); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true,'enum':['a','b']}"); + assertBean(x, "in,name,type,required,enum", "path,P,string,true,[a,b]"); } @Rest @@ -162,16 +153,16 @@ class Swagger_Path_Test extends SimpleTestBase { var s = getSwagger(B.class); var x = s.getParameterInfo("/a/{P}","get","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true}"); + assertBean(x, "in,name,type,required", "path,P,string,true"); x = s.getParameterInfo("/b/{P}","put","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'object',required:true,schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,required,schema{properties{f1{type}}}", "path,P,object,true,{{{string}}}"); x = s.getParameterInfo("/c/{P}","post","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'array',required:true,items:{type:'string'}}"); + assertBean(x, "in,name,type,required,items{type}", "path,P,array,true,{string}"); x = s.getParameterInfo("/d/{P}","delete","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true}"); + assertBean(x, "in,name,type,required", "path,P,string,true"); } @Rest @@ -214,22 +205,18 @@ class Swagger_Path_Test extends SimpleTestBase { var s = getSwagger(D.class); var x = s.getParameterInfo("/a/{P}","get","path","P"); - assertEquals("a", x.getDescription()); - assertEquals("string", x.getType()); + assertBean(x, "description,type", "a,string"); x = s.getParameterInfo("/b/{P}","put","path","P"); - assertEquals("a", x.getDescription()); - assertEquals("string", x.getType()); + assertBean(x, "description,type", "a,string"); x = s.getParameterInfo("/c/{P}","post","path","P"); - assertEquals("b", x.getDescription()); - assertEquals("string", x.getType()); + assertBean(x, "description,type", "b,string"); x = s.getParameterInfo("/d/{P}","delete","path","P"); - assertEquals("P", x.getName()); x = s.getParameterInfo("/e/{P}","get","path","P"); - assertJson(x.getEnum(), "['a','b']"); + assertSet(x.getEnum(), "a,b"); } @Rest @@ -265,21 +252,21 @@ class Swagger_Path_Test extends SimpleTestBase { var s = getSwagger(E.class); var x = s.getParameterInfo("/a/{P}","get","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true}"); + assertBean(x, "in,name,type,required", "path,P,string,true"); x = s.getParameterInfo("/b/{P}","put","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'object',required:true,schema:{properties:{f1:{type:'string'}}}}"); + assertBean(x, "in,name,type,required,schema{properties{f1{type}}}", "path,P,object,true,{{{string}}}"); x = s.getParameterInfo("/c/{P}","post","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'array',required:true,items:{type:'string'}}"); + assertBean(x, "in,name,type,required,items{type}", "path,P,array,true,{string}"); x = s.getParameterInfo("/d/{P}","delete","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'string',required:true}"); + assertBean(x, "in,name,type,required", "path,P,string,true"); x = s.getParameterInfo("/e/{P}","get","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'integer',required:true,format:'int32'}"); + assertBean(x, "in,name,type,required,format", "path,P,integer,true,int32"); x = s.getParameterInfo("/f/{P}","get","path","P"); - assertJson(x, "{'in':'path',name:'P',type:'boolean',required:true}"); + assertBean(x, "in,name,type,required", "path,P,boolean,true"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Response_Test.java b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Response_Test.java index f57ad4d4e..46b417ec9 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Response_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/rest/annotation/Swagger_Response_Test.java @@ -95,42 +95,24 @@ class Swagger_Response_Test extends SimpleTestBase { @Test void a01_fromPojo() { var s = getSwagger(A.class); - var x = s.getResponseInfo("/a","get",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + var x = s.getResponseInfo("/a","get",200); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/b","put",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/c","post",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/d","delete",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/e","get",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/f","get",200); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/g","get",100); assertEquals("Continue", x.getDescription()); @@ -145,10 +127,10 @@ class Swagger_Response_Test extends SimpleTestBase { assertEquals("Continue", x.getDescription()); x = s.getResponseInfo("/k","get",200); - assertJson(x.getHeaders(), "{foo:{type:'object'}}"); + assertMap(x.getHeaders(), "foo{type}", "{object}"); x = s.getResponseInfo("/l","get",200); - assertJson(x.getHeaders(), "{foo:{type:'object'}}"); + assertMap(x.getHeaders(), "foo{type}", "{object}"); } @Rest @@ -191,28 +173,28 @@ class Swagger_Response_Test extends SimpleTestBase { var s = getSwagger(B.class); var x = s.getResponseInfo("/a","get",200); - assertJson(x.getSchema(), "{type:'number'}"); + assertBean(x.getSchema(), "type", "number"); x = s.getResponseInfo("/b","put",200); - assertJson(x.getSchema(), "{type:'number'}"); + assertBean(x.getSchema(), "type", "number"); x = s.getResponseInfo("/c","post",200); - assertJson(x.getSchema(), "{type:'object',properties:{f1:{type:'string'}}}"); + assertBean(x.getSchema(), "type,properties{f1{type}}", "object,{{string}}"); x = s.getResponseInfo("/d","delete",200); - assertJson(x.getSchema(), "{type:'object',properties:{f1:{type:'string'}}}"); + assertBean(x.getSchema(), "type,properties{f1{type}}", "object,{{string}}"); x = s.getResponseInfo("/e","get",200); - assertJson(x.getSchema(), "{type:'array',items:{type:'string'}}"); + assertBean(x.getSchema(), "type,items{type}", "array,{string}"); x = s.getResponseInfo("/f","get",200); - assertJson(x.getSchema(), "{type:'array',items:{type:'string'}}"); + assertBean(x.getSchema(), "type,items{type}", "array,{string}"); x = s.getResponseInfo("/g","get",200); - assertJson(x.getSchema(), "{type:'string'}"); + assertBean(x.getSchema(), "type", "string"); x = s.getResponseInfo("/h","get",200); - assertJson(x.getSchema(), "{type:'string'}"); + assertBean(x.getSchema(), "type", "string"); } @Rest @@ -244,10 +226,10 @@ class Swagger_Response_Test extends SimpleTestBase { sc.getResponseInfo("/b","put",200); - assertJson(x.getExamples(), "{foo:'b'}"); + assertMap(x.getExamples(), "foo", "b"); x = sc.getResponseInfo("/d","delete",200); - assertJson(x.getExamples(), "{foo:'b'}"); + assertMap(x.getExamples(), "foo", "b"); } @Rest @@ -299,24 +281,15 @@ class Swagger_Response_Test extends SimpleTestBase { @Test void d01_fromThrowable() { var s = getSwagger(D.class); - var x = s.getResponseInfo("/a","get",500); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + var x = s.getResponseInfo("/a","get",500); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/b","put",500); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/c","post",500); - assertEquals("a\nb", x.getDescription()); - assertJson(x.getSchema(), "{type:'string'}"); - assertJson(x.getHeaders(), "{foo:{type:'string'}}"); - assertJson(x.getExamples(), "{foo:'a'}"); + assertBean(x, "description,schema{type},headers{foo{type}},examples{foo}", "a\nb,{string},{{string}},{a}"); x = s.getResponseInfo("/d","delete",100); assertEquals("Continue", x.getDescription()); @@ -325,7 +298,7 @@ class Swagger_Response_Test extends SimpleTestBase { assertEquals("Continue", x.getDescription()); x = s.getResponseInfo("/f","get",500); - assertJson(x.getHeaders(), "{foo:{type:'number'}}"); + assertBean(x, "headers{foo{type}}", "{{number}}"); } @Rest @@ -342,7 +315,7 @@ class Swagger_Response_Test extends SimpleTestBase { var s = getSwagger(E.class); var x = s.getResponseInfo("/a","get",500); - assertJson(x.getSchema(), "{type:'number'}"); + assertBean(x, "schema{type}", "{number}"); } //----------------------------------------------------------------------------------------------------------------- @@ -359,10 +332,10 @@ class Swagger_Response_Test extends SimpleTestBase { public void b() throws F2 { /* no-op */ } } - @Test void f01_exampeFromThrowable() { + @Test void f01_exampleFromThrowable() { var s = getSwagger(F.class); var x = s.getResponseInfo("/b","put",500); - assertJson(x.getExamples(), "{foo:'b'}"); + assertBean(x, "examples{foo}", "{b}"); } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedObject.java b/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedObject.java index 566226296..29b5dba1f 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedObject.java +++ b/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/SwappedObject.java @@ -17,4 +17,9 @@ import org.apache.juneau.annotation.*; @Swap(SwappedObjectSwap.class) public class SwappedObject { public boolean wasUnswapped; + + @Override + public String toString() { + return "wasUnswapped:" + wasUnswapped; + } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java b/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java index 882e602ef..cc73893ff 100644 --- a/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java +++ b/juneau-utest/src/test/java/org/apache/juneau/testutils/pojos/TypedBeanImpl.java @@ -26,4 +26,9 @@ public class TypedBeanImpl implements TypedBean { public static TypedBeanImpl get() { return new TypedBeanImpl().init(); } + + @Override + public String toString() { + return "a:" + a + ";b:" + b; + } } \ No newline at end of file diff --git a/juneau-utest/src/test/java/org/apache/juneau/uon/UonParser_Test.java b/juneau-utest/src/test/java/org/apache/juneau/uon/UonParser_Test.java index 03eb3f66c..8aeda2a41 100755 --- a/juneau-utest/src/test/java/org/apache/juneau/uon/UonParser_Test.java +++ b/juneau-utest/src/test/java/org/apache/juneau/uon/UonParser_Test.java @@ -482,8 +482,7 @@ class UonParser_Test extends SimpleTestBase { var p2 = UonParser.DEFAULT; var s = "(f1=foo,f2=123)"; var t = p2.parse(s, A.class); - assertEquals("foo", t.f1); - assertEquals(123, t.f2); + assertBean(t, "f1,f2", "foo,123"); } public static class A { diff --git a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java index ed5fdfb99..70f1b627c 100755 --- a/juneau-utest/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java +++ b/juneau-utest/src/test/java/org/apache/juneau/urlencoding/CommonParser_UrlEncodingTest.java @@ -39,20 +39,15 @@ class CommonParser_UrlEncodingTest extends SimpleTestBase { in = "a=1&b='foo+bar'"; m = (Map)p.parse(in, Object.class); - assertEquals(1, m.get("a")); - assertEquals("foo bar", m.get("b")); + assertMap(m, "a,b", "1,foo bar"); in = "a=1&b='foo+bar'&c=false"; m = (Map)p.parse(in, Object.class); - assertEquals(1, m.get("a")); - assertEquals("foo bar", m.get("b")); - assertEquals(false, m.get("c")); + assertMap(m, "a,b,c", "1,foo bar,false"); in = "a=1&b='foo%20bar'&c=false"; m = (Map)p.parse(in, Object.class); - assertEquals(1, m.get("a")); - assertEquals("foo bar", m.get("b")); - assertEquals(false, m.get("c")); + assertMap(m, "a,b,c", "1,foo bar,false"); var jm = (JsonMap)p.parse("x=@((attribute=value),(attribute=~'value~'))", Object.class); assertEquals("value", jm.getList("x").getMap(0).getString("attribute"));