http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java b/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java index 1549dce..e5f316d 100755 --- a/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/html/CommonTest.java @@ -42,13 +42,13 @@ public class CommonTest { s.setProperty(SERIALIZER_trimNullProperties, false); String r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s1</string></td><td><null/></td></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s1</td><td><null/></td></tr><tr><td>s2</td><td>s2</td></tr></table>", r); t2 = p.parse(r, A.class); assertEqualObjects(t1, t2); s.setProperty(SERIALIZER_trimNullProperties, true); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table>", r); t2 = p.parse(r, A.class); assertEqualObjects(t1, t2); } @@ -75,13 +75,13 @@ public class CommonTest { s.setProperty(SERIALIZER_trimEmptyMaps, false); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr></table></td></tr><tr><td><string>f2</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2a</string></td><td><null/></td></tr><tr><td><string>f2b</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table></td></tr></table></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><table><tr><th>key</th><th>value</th></tr></table></td></tr><tr><td>f2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>f2a</td><td><null/></td></tr><tr><td>f2b</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table></td></tr></table></td></tr></table>", r); t2 = p.parse(r, B.class); assertEqualObjects(t1, t2); s.setProperty(SERIALIZER_trimEmptyMaps, true); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2a</string></td><td><null/></td></tr><tr><td><string>f2b</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>s2</string></td><td><string>s2</string></td></tr></table></td></tr></table></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>f2a</td><td><null/></td></tr><tr><td>f2b</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>s2</td><td>s2</td></tr></table></td></tr></table></td></tr></table>", r); t2 = p.parse(r, B.class); assertNull(t2.f1); } @@ -109,13 +109,13 @@ public class CommonTest { s.setProperty(SERIALIZER_trimEmptyCollections, false); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><ul></ul></td></tr><tr><td><string>f2</string></td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><ul></ul></td></tr><tr><td>f2</td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td>s2</td></tr></table></td></tr></table>", r); t2 = p.parse(r, C.class); assertEqualObjects(t1, t2); s.setProperty(SERIALIZER_trimEmptyCollections, true); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f2</td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td>s2</td></tr></table></td></tr></table>", r); t2 = p.parse(r, C.class); assertNull(t2.f1); } @@ -143,13 +143,45 @@ public class CommonTest { s.setProperty(SERIALIZER_trimEmptyCollections, false); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><ul></ul></td></tr><tr><td><string>f2</string></td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>", r); + assertEquals( + "<table>" + +"<tr><th>key</th><th>value</th></tr>" + +"<tr>" + +"<td>f1</td>" + +"<td><ul></ul></td>" + +"</tr>" + +"<tr>" + +"<td>f2</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>s2</th></tr>" + +"<tr><null/></tr>" + +"<tr><td>s2</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"</table>", + r); t2 = p.parse(r, D.class); assertEqualObjects(t1, t2); s.setProperty(SERIALIZER_trimEmptyCollections, true); r = s.serialize(t1); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f2</string></td><td><table _type='array'><tr><th>s2</th></tr><tr><null/></tr><tr><td><string>s2</string></td></tr></table></td></tr></table>", r); + assertEquals( + "<table>" + +"<tr><th>key</th><th>value</th></tr>" + +"<tr>" + +"<td>f2</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>s2</th></tr>" + +"<tr><null/></tr>" + +"<tr><td>s2</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"</table>", + r); t2 = p.parse(r, D.class); assertNull(t2.f1); } @@ -175,7 +207,68 @@ public class CommonTest { String r; r = s.serialize(t); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>x1</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><number>1</number></td></tr></table></td></tr><tr><td><string>x2</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><number>1</number></td></tr></table></td></tr><tr><td><string>x3</string></td><td><table _type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x4</string></td><td><table _type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x5</string></td><td><table _type='array'><tr><th>f1</th></tr><tr><td><number>1</number></td></tr></table></td></tr><tr><td><string>x6</string></td><td><table _type='array'><tr><th>f1</th></tr><t r><td><number>1</number></td></tr></table></td></tr></table>", r); + assertEquals( + "<table>" + +"<tr>" + +"<th>key</th>" + +"<th>value</th>" + +"</tr>" + +"<tr>" + +"<td>x1</td>" + +"<td>" + +"<table>" + +"<tr><th>key</th><th>value</th></tr>" + +"<tr><td>f1</td><td>1</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"<tr>" + +"<td>x2</td>" + +"<td>" + +"<table>" + +"<tr><th>key</th><th>value</th></tr>" + +"<tr><td>f1</td><td>3</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"<tr>" + +"<td>x3</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>f1</th></tr>" + +"<tr><td>1</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"<tr>" + +"<td>x4</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>f1</th></tr>" + +"<tr><td>1</td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"<tr>" + +"<td>x5</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>f1</th></tr>" + +"<tr><td><number>5</number></td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"<tr>" + +"<td>x6</td>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>f1</th></tr>" + +"<tr><td><number>7</number></td></tr>" + +"</table>" + +"</td>" + +"</tr>" + +"</table>", + r); r = s.getSchemaSerializer().serialize(new E1()); assertTrue(r.indexOf("f2") == -1); } @@ -183,15 +276,15 @@ public class CommonTest { public static class E1 { @BeanProperty(properties="f1") public E2 x1 = new E2(); @BeanProperty(properties="f1") public Map<String,Integer> x2 = new LinkedHashMap<String,Integer>() {{ - put("f1",1); put("f2",2); + put("f1",3); put("f2",4); }}; @BeanProperty(properties="f1") public E2[] x3 = {new E2()}; @BeanProperty(properties="f1") public List<E2> x4 = new LinkedList<E2>() {{ add(new E2()); }}; - @BeanProperty(properties="f1") public ObjectMap[] x5 = {new ObjectMap().append("f1",1).append("f2",2)}; + @BeanProperty(properties="f1") public ObjectMap[] x5 = {new ObjectMap().append("f1",5).append("f2",6)}; @BeanProperty(properties="f1") public List<ObjectMap> x6 = new LinkedList<ObjectMap>() {{ - add(new ObjectMap().append("f1",1).append("f2",2)); + add(new ObjectMap().append("f1",7).append("f2",8)); }}; } @@ -211,7 +304,19 @@ public class CommonTest { t.x1.add(new F()); l.add(t); String html = s.serialize(l); - assertEquals("<table _type='array'><tr><th>x1</th><th>x2</th></tr><tr><td><table _type='array'><tr><th>x2</th></tr><tr><td><number>2</number></td></tr></table></td><td><number>2</number></td></tr></table>", html); + assertEquals( + "<table _type='array'>" + +"<tr><th>x1</th><th>x2</th></tr>" + +"<tr>" + +"<td>" + +"<table _type='array'>" + +"<tr><th>x2</th></tr>" + +"<tr><td>2</td></tr>" + +"</table>" + +"</td>" + +"<td>2</td>" + +"</tr>" + +"</table>", html); } public static class F { @@ -428,10 +533,10 @@ public class CommonTest { private String strip(String html) { return html - .replace("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr>", "") + .replace("<table><tr><th>key</th><th>value</th></tr>", "") .replace("</table>", "") - .replace("<tr><td><string>", "\n[") - .replace("</string></td><td>", "]=") + .replace("<tr><td>", "\n[") + .replace("</td><td>", "]=") .replace("</td></tr>", ""); } @@ -492,7 +597,7 @@ public class CommonTest { } s.setProperty(SERIALIZER_ignoreRecursions, true); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>foo</string></td></tr><tr><td><string>r2</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>bar</string></td></tr><tr><td><string>r3</string></td><td><table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>name</string></td><td><string>baz</string></td></tr></table></td></tr></table></td></tr></table>", + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>foo</td></tr><tr><td>r2</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>bar</td></tr><tr><td>r3</td><td><table><tr><th>key</th><th>value</th></tr><tr><td>name</td><td>baz</td></tr></table></td></tr></table></td></tr></table>", s.serialize(r1)); // Make sure this doesn't blow up. @@ -523,7 +628,14 @@ public class CommonTest { a.setF1("J"); a.setF2(100); a.setF3(true); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><string>J</string></td></tr><tr><td><string>f2</string></td><td><number>100</number></td></tr><tr><td><string>f3</string></td><td><boolean>true</boolean></td></tr></table>", s.serialize(a)); + assertEquals( + "<table>" + +"<tr><th>key</th><th>value</th></tr>" + +"<tr><td>f1</td><td>J</td></tr>" + +"<tr><td>f2</td><td>100</td></tr>" + +"<tr><td>f3</td><td>true</td></tr>" + +"</table>", + s.serialize(a)); } public static class J {
http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java b/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java index d9ee860..435f85f 100755 --- a/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/html/HtmlTest.java @@ -36,7 +36,7 @@ public class HtmlTest { t = new Object[] {new A1(), new A1()}; html = s.serialize(t); - assertEquals("<table _type='array'><tr><th>f1</th></tr><tr><td><string>f1</string></td></tr><tr><td><string>f1</string></td></tr></table>", html); + assertEquals("<table _type='array'><tr><th>f1</th></tr><tr><td>f1</td></tr><tr><td>f1</td></tr></table>", html); } @@ -189,11 +189,11 @@ public class HtmlTest { +"\n[f7]=<a href='http://www.apache.org/f7/x7'>http://www.apache.org/f7/x7</a>" +"\n[f8]=<a href='/cr/f8/x8'>f8/x8</a>" +"\n[f9]=<a href='/cr/f9/x9'>f9/x9</a>" - +"\n[fa]=<string>http://www.apache.org/fa/xa#MY_LABEL</string>" - +"\n[fb]=<string>http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar</string>" - +"\n[fc]=<string>http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL</string>" - +"\n[fd]=<string>http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar</string>" - +"\n[fe]=<string>http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL</string>"; + +"\n[fa]=http://www.apache.org/fa/xa#MY_LABEL" + +"\n[fb]=http://www.apache.org/fb/xb?label=MY_LABEL&foo=bar" + +"\n[fc]=http://www.apache.org/fc/xc?foo=bar&label=MY_LABEL" + +"\n[fd]=http://www.apache.org/fd/xd?label2=MY_LABEL&foo=bar" + +"\n[fe]=http://www.apache.org/fe/xe?foo=bar&label2=MY_LABEL"; assertEquals(expected, r); s.setProperty(HTML_detectLinksInStrings, true); @@ -220,10 +220,10 @@ public class HtmlTest { private String strip(String html) { return html - .replace("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr>", "") + .replace("<table><tr><th>key</th><th>value</th></tr>", "") .replace("</table>", "") - .replace("<tr><td><string>", "\n[") - .replace("</string></td><td>", "]=") + .replace("<tr><td>", "\n[") + .replace("</td><td>", "]=") .replace("</td></tr>", ""); } @@ -242,7 +242,7 @@ public class HtmlTest { o = new B2(); r = s.serialize(o); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><f1></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><f1></td></tr></table>", r); } @Html(asPlainText=true) @@ -274,7 +274,7 @@ public class HtmlTest { o = new C2(); r = s.serialize(o); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>f1</string></td><td><string><f1></string></td></tr></table>", r); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>f1</td><td><f1></td></tr></table>", r); } @Html(asXml=true) @@ -300,7 +300,7 @@ public class HtmlTest { m.put("foo", "bar"); o = new ObjectList().append(m); r = s.serialize(o); - assertEquals("<ul><li><table _type='object'><tr><td><string>foo</string></td><td><string>bar</string></td></tr></table></li></ul>", r); + assertEquals("<ul><li><table><tr><td>foo</td><td>bar</td></tr></table></li></ul>", r); } @Html(noTables=true, noTableHeaders=true) http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java b/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java index 19eee59..49b359c 100755 --- a/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/json/JsonParserTest.java @@ -108,12 +108,6 @@ public class JsonParserTest { } @Test - public void testCognosJson() throws Exception { - String json = TestUtils.readFile(getClass().getResource("/json/BrokenCognosOutput.json").getPath()); - p.parse(json, ObjectMap.class); - } - - @Test public void testStrictMode() throws Exception { JsonParser p = sp; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java b/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java index 893bf3f..0f44984 100755 --- a/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/transforms/BeanMapTest.java @@ -81,14 +81,14 @@ public class BeanMapTest { public String f2; } - public static class B1Swap extends PojoSwap<B1,ObjectMap> { + public static class B1Swap extends MapSwap<B1> { @Override /* PojoSwap */ public ObjectMap swap(BeanSession session, B1 b1) { return new ObjectMap().append("type", "b1").append("f1", b1.f1); } } - public static class B2Swap extends PojoSwap<B2,ObjectMap> { + public static class B2Swap extends MapSwap<B2> { @Override /* PojoSwap */ public ObjectMap swap(BeanSession session, B2 b2) { return new ObjectMap().append("type", "b2").append("f1", b2.f1); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java index 72889ef..16a79c8 100755 --- a/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/transforms/CalendarSwapTest.java @@ -164,7 +164,7 @@ public class CalendarSwapTest { @Test public void testDefaultStringXml() throws Exception { Class<?> f = CalendarSwap.ToString.class; - WriterSerializer s = new XmlSerializer.SimpleSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, true, "<string>Sun Mar 03 10:11:12 PST 1901</string>"); } @@ -231,7 +231,7 @@ public class CalendarSwapTest { @Test public void testISO8601DTXml() throws Exception { Class<?> f = CalendarSwap.ISO8601DT.class; - WriterSerializer s = new XmlSerializer.SimpleSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, true, "<string>1901-03-03T10:11:12-08:00</string>"); } @@ -297,7 +297,7 @@ public class CalendarSwapTest { @Test public void testRFC2822DTXml() throws Exception { Class<?> f = CalendarSwap.RFC2822DTZ.class; - WriterSerializer s = new XmlSerializer.SimpleSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, true, "<string>Sun, 03 Mar 1901 18:11:12 GMT</string>"); } @@ -363,7 +363,7 @@ public class CalendarSwapTest { @Test public void testDefaultLongXml() throws Exception { Class<?> f = CalendarLongSwap.class; - WriterSerializer s = new XmlSerializer.SimpleSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, true, "<number>-2172116928000</number>"); } @@ -429,7 +429,7 @@ public class CalendarSwapTest { @Test public void testDefaultMapXml() throws Exception { Class<?> f = CalendarMapSwap.class; - WriterSerializer s = new XmlSerializer.SimpleXmlJsonSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, true, "<object><time _type='number'>-2172116928000</time><timeZone>PST</timeZone></object>"); } @@ -442,7 +442,7 @@ public class CalendarSwapTest { Class<?> f = CalendarMapSwap.class; WriterSerializer s = new HtmlSerializer.Sq().addPojoSwaps(f).setProperty(HTML_addKeyValueTableHeaders, true); ReaderParser p = new HtmlParser().addPojoSwaps(f); - doTest(s, p, true, "<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>time</string></td><td><number>-2172116928000</number></td></tr><tr><td><string>timeZone</string></td><td><string>PST</string></td></tr></table>"); + doTest(s, p, true, "<table><tr><th>key</th><th>value</th></tr><tr><td>time</td><td><number>-2172116928000</number></td></tr><tr><td>timeZone</td><td>PST</td></tr></table>"); } //==================================================================================================== @@ -495,7 +495,7 @@ public class CalendarSwapTest { @Test public void testDefaultMediumXml() throws Exception { Class<?> f = CalendarSwap.DateMedium.class; - WriterSerializer s = new XmlSerializer.SimpleSq().addPojoSwaps(f); + WriterSerializer s = new XmlSerializer.Sq().addPojoSwaps(f); ReaderParser p = new XmlParser().addPojoSwaps(f); doTest(s, p, false, "<string>Mar 3, 1901</string>"); } @@ -567,7 +567,7 @@ public class CalendarSwapTest { //==================================================================================================== @Test public void testBeanProperyFilterXml() throws Exception { - WriterSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + WriterSerializer s = XmlSerializer.DEFAULT_SQ; ReaderParser p = XmlParser.DEFAULT; Calendar c = testDate; @@ -591,7 +591,7 @@ public class CalendarSwapTest { Calendar c = testDate; A t = new A(c); String html = s.serialize(t); - assertEquals("<table _type='object'><tr><th><string>key</string></th><th><string>value</string></th></tr><tr><td><string>d1</string></td><td><string>1901-03-03T18:11:12Z</string></td></tr><tr><td><string>d2</string></td><td><string>Sun, 03 Mar 1901 18:11:12 GMT</string></td></tr><tr><td><string>d3</string></td><td><number>-2172116928000</number></td></tr></table>", html); + assertEquals("<table><tr><th>key</th><th>value</th></tr><tr><td>d1</td><td>1901-03-03T18:11:12Z</td></tr><tr><td>d2</td><td>Sun, 03 Mar 1901 18:11:12 GMT</td></tr><tr><td>d3</td><td>-2172116928000</td></tr></table>", html); t = p.parse(html, A.class); assertEquals(t.d1.getTime().getTime(), c.getTime().getTime()); assertEquals(t.getD2().getTime().getTime(), c.getTime().getTime()); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java b/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java index 48949da..ec75da3 100755 --- a/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/utils/FilteredMapTest.java @@ -30,16 +30,21 @@ public class FilteredMapTest { // testBasic //==================================================================================================== @Test + @SuppressWarnings("unchecked") public void testBasic() throws Exception { ObjectMap m = new ObjectMap("{a:'1',b:'2'}"); - FilteredMap<String,Object> m2 = new FilteredMap<String,Object>(m, new String[]{"a"}); + + ClassMeta<Map<String,Object>> cm = BeanContext.DEFAULT.getMapClassMeta(Map.class, String.class, Object.class); + ClassMeta<Map<String,String>> cm2 = BeanContext.DEFAULT.getMapClassMeta(Map.class, String.class, String.class); + + FilteredMap<String,Object> m2 = new FilteredMap<String,Object>(cm, m, new String[]{"a"}); assertObjectEquals("{a:'1'}", m2); m2.entrySet().iterator().next().setValue("3"); assertObjectEquals("{a:'3'}", m2); - try { m3 = new FilteredMap<String,String>(null, new String[0]); fail(); } catch (IllegalArgumentException e) {} - try { m3 = new FilteredMap<String,Object>(m, null); fail(); } catch (IllegalArgumentException e) {} + try { m3 = new FilteredMap<String,String>(cm2, null, new String[0]); fail(); } catch (IllegalArgumentException e) {} + try { m3 = new FilteredMap<String,Object>(cm, m, null); fail(); } catch (IllegalArgumentException e) {} } } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java new file mode 100644 index 0000000..182ffdd --- /dev/null +++ b/juneau-core/src/test/java/org/apache/juneau/xml/BasicXmlTest.java @@ -0,0 +1,1505 @@ +// *************************************************************************************************************************** +// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * +// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * +// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * +// * with the License. You may obtain a copy of the License at * +// * * +// * http://www.apache.org/licenses/LICENSE-2.0 * +// * * +// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * +// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * +// * specific language governing permissions and limitations under the License. * +// *************************************************************************************************************************** +package org.apache.juneau.xml; + +import static org.junit.Assert.*; + +import java.util.*; + +import org.apache.juneau.*; +import org.apache.juneau.annotation.*; +import org.apache.juneau.xml.annotation.*; +import org.junit.*; +import org.junit.runner.*; +import org.junit.runners.*; + +@RunWith(Parameterized.class) +@SuppressWarnings({"javadoc","serial"}) +public class BasicXmlTest { + + private static final XmlSerializer + s1 = XmlSerializer.DEFAULT_SQ, + s2 = XmlSerializer.DEFAULT_SQ_READABLE, + s3 = XmlSerializer.DEFAULT_NS_SQ; + private static final XmlParser parser = XmlParser.DEFAULT; + + @Parameterized.Parameters + public static Collection<Object[]> getParameters() { + return Arrays.asList(new Object[][] { + + { + "SimpleTypes-1", + "foo", + "<string>foo</string>", + "<string>foo</string>\n", + "<string>foo</string>", + }, + { + "SimpleTypes-2", + true, + "<boolean>true</boolean>", + "<boolean>true</boolean>\n", + "<boolean>true</boolean>", + }, + { + "SimpleTypes-3", + 123, + "<number>123</number>", + "<number>123</number>\n", + "<number>123</number>", + }, + { + "SimpleTypes-4", + 1.23f, + "<number>1.23</number>", + "<number>1.23</number>\n", + "<number>1.23</number>", + }, + { + "SimpleTypes-5", + null, + "<null/>", + "<null/>\n", + "<null/>", + }, + { + "Arrays-1", + new String[]{"foo"}, + "<array><string>foo</string></array>", + "<array>\n\t<string>foo</string>\n</array>\n", + "<array><string>foo</string></array>", + }, + { + "Arrays-2", + new String[]{null}, + "<array><null/></array>", + "<array>\n\t<null/>\n</array>\n", + "<array><null/></array>", + }, + { + "Arrays-3", + new Object[]{"foo"}, + "<array><string>foo</string></array>", + "<array>\n\t<string>foo</string>\n</array>\n", + "<array><string>foo</string></array>", + }, + { + "Arrays-4", + new int[]{123}, + "<array><number>123</number></array>", + "<array>\n\t<number>123</number>\n</array>\n", + "<array><number>123</number></array>", + }, + { + "Arrays-5", + new boolean[]{true}, + "<array><boolean>true</boolean></array>", + "<array>\n\t<boolean>true</boolean>\n</array>\n", + "<array><boolean>true</boolean></array>", + }, + { + "Arrays-6", + new String[][]{{"foo"}}, + "<array><array><string>foo</string></array></array>", + "<array>\n\t<array>\n\t\t<string>foo</string>\n\t</array>\n</array>\n", + "<array><array><string>foo</string></array></array>", + }, + { + "MapWithStrings", + new MapWithStrings().append("k1", "v1").append("k2", null), + "<object><k1>v1</k1><k2 _type='null'/></object>", + "<object>\n\t<k1>v1</k1>\n\t<k2 _type='null'/>\n</object>\n", + "<object><k1>v1</k1><k2 _type='null'/></object>", + }, + { + "MapsWithNumbers", + new MapWithNumbers().append("k1", 123).append("k2", 1.23).append("k3", null), + "<object><k1>123</k1><k2>1.23</k2><k3 _type='null'/></object>", + "<object>\n\t<k1>123</k1>\n\t<k2>1.23</k2>\n\t<k3 _type='null'/>\n</object>\n", + "<object><k1>123</k1><k2>1.23</k2><k3 _type='null'/></object>", + }, + { + "MapWithObjects", + new MapWithObjects().append("k1", "v1").append("k2", 123).append("k3", 1.23).append("k4", true).append("k5", null), + "<object><k1>v1</k1><k2 _type='number'>123</k2><k3 _type='number'>1.23</k3><k4 _type='boolean'>true</k4><k5 _type='null'/></object>", + "<object>\n\t<k1>v1</k1>\n\t<k2 _type='number'>123</k2>\n\t<k3 _type='number'>1.23</k3>\n\t<k4 _type='boolean'>true</k4>\n\t<k5 _type='null'/>\n</object>\n", + "<object><k1>v1</k1><k2 _type='number'>123</k2><k3 _type='number'>1.23</k3><k4 _type='boolean'>true</k4><k5 _type='null'/></object>", + }, + { + "ListWithStrings", + new ListWithStrings().append("foo").append(null), + "<array><string>foo</string><null/></array>", + "<array>\n\t<string>foo</string>\n\t<null/>\n</array>\n", + "<array><string>foo</string><null/></array>", + }, + { + "ListWithNumbers", + new ListWithNumbers().append(123).append(1.23).append(null), + "<array><number>123</number><number>1.23</number><null/></array>", + "<array>\n\t<number>123</number>\n\t<number>1.23</number>\n\t<null/>\n</array>\n", + "<array><number>123</number><number>1.23</number><null/></array>", + }, + { + "ListWithObjects", + new ListWithObjects().append("foo").append(123).append(1.23).append(true).append(null), + "<array><string>foo</string><number>123</number><number>1.23</number><boolean>true</boolean><null/></array>", + "<array>\n\t<string>foo</string>\n\t<number>123</number>\n\t<number>1.23</number>\n\t<boolean>true</boolean>\n\t<null/>\n</array>\n", + "<array><string>foo</string><number>123</number><number>1.23</number><boolean>true</boolean><null/></array>", + }, + { + "BeanWithNormalProperties", + new BeanWithNormalProperties().init(), + "<object>" + +"<a>foo</a>" + +"<b>123</b>" + +"<c>bar</c>" + +"<d _type='number'>456</d>" + +"<e>" + +"<h>qux</h>" + +"</e>" + +"<f>" + +"<string>baz</string>" + +"</f>" + +"<g>" + +"<number>789</number>" + +"</g>" + +"</object>", + "<object>" + +"\n\t<a>foo</a>" + +"\n\t<b>123</b>" + +"\n\t<c>bar</c>" + +"\n\t<d _type='number'>456</d>" + +"\n\t<e>" + +"\n\t\t<h>qux</h>" + +"\n\t</e>" + +"\n\t<f>" + +"\n\t\t<string>baz</string>" + +"\n\t</f>" + +"\n\t<g>" + +"\n\t\t<number>789</number>" + +"\n\t</g>" + +"\n</object>\n", + "<object>" + +"<a>foo</a>" + +"<b>123</b>" + +"<c>bar</c>" + +"<d _type='number'>456</d>" + +"<e>" + +"<h>qux</h>" + +"</e>" + +"<f>" + +"<string>baz</string>" + +"</f>" + +"<g>" + +"<number>789</number>" + +"</g>" + +"</object>", + }, + { + "BeanWithMapProperties", + new BeanWithMapProperties().init(), + "<object>" + +"<a>" + +"<k1>foo</k1>" + +"</a>" + +"<b>" + +"<k2>123</k2>" + +"</b>" + +"<c>" + +"<k3>bar</k3>" + +"<k4 _type='number'>456</k4>" + +"<k5 _type='boolean'>true</k5>" + +"<k6 _type='null'/>" + +"</c>" + +"</object>", + "<object>" + +"\n\t<a>" + +"\n\t\t<k1>foo</k1>" + +"\n\t</a>" + +"\n\t<b>" + +"\n\t\t<k2>123</k2>" + +"\n\t</b>" + +"\n\t<c>" + +"\n\t\t<k3>bar</k3>" + +"\n\t\t<k4 _type='number'>456</k4>" + +"\n\t\t<k5 _type='boolean'>true</k5>" + +"\n\t\t<k6 _type='null'/>" + +"\n\t</c>" + +"\n</object>\n", + "<object>" + +"<a>" + +"<k1>foo</k1>" + +"</a>" + +"<b>" + +"<k2>123</k2>" + +"</b>" + +"<c>" + +"<k3>bar</k3>" + +"<k4 _type='number'>456</k4>" + +"<k5 _type='boolean'>true</k5>" + +"<k6 _type='null'/>" + +"</c>" + +"</object>", + }, + { + "BeanWithTypeName", + new BeanWithTypeName().init(), + "<X><a>123</a><b>foo</b></X>", + "<X>\n\t<a>123</a>\n\t<b>foo</b>\n</X>\n", + "<X><a>123</a><b>foo</b></X>", + }, + { + "BeanWithPropertiesWithTypeNames", + new BeanWithPropertiesWithTypeNames().init(), + "<object><b1><b>foo</b></b1><b2 _type='B'><b>foo</b></b2></object>", + "<object>\n\t<b1>\n\t\t<b>foo</b>\n\t</b1>\n\t<b2 _type='B'>\n\t\t<b>foo</b>\n\t</b2>\n</object>\n", + "<object><b1><b>foo</b></b1><b2 _type='B'><b>foo</b></b2></object>" + }, + { + "BeanWithPropertiesWithArrayTypeNames", + new BeanWithPropertiesWithArrayTypeNames().init(), + "<object>" + +"<b1>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b1>" + +"<b2 _type='B^'>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b2>" + +"<b3>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b3>" + +"</object>", + "<object>\n" + +"\t<b1>\n" + +"\t\t<B>\n" + +"\t\t\t<b>foo</b>\n" + +"\t\t</B>\n" + +"\t</b1>\n" + +"\t<b2 _type='B^'>\n" + +"\t\t<B>\n" + +"\t\t\t<b>foo</b>\n" + +"\t\t</B>\n" + +"\t</b2>\n" + +"\t<b3>\n" + +"\t\t<B>\n" + +"\t\t\t<b>foo</b>\n" + +"\t\t</B>\n" + +"\t</b3>\n" + +"</object>\n", + "<object>" + +"<b1>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b1>" + +"<b2 _type='B^'>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b2>" + +"<b3>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</b3>" + +"</object>", + }, + { + "BeanWithPropertiesWithArray2dTypeNames", + new BeanWithPropertiesWith2dArrayTypeNames().init(), + "<object>" + +"<b1>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b1>" + +"<b2 _type='B^^'>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b2>" + +"<b3>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b3>" + +"</object>", + "<object>\n" + +"\t<b1>\n" + +"\t\t<array>\n" + +"\t\t\t<B>\n" + +"\t\t\t\t<b>foo</b>\n" + +"\t\t\t</B>\n" + +"\t\t</array>\n" + +"\t</b1>\n" + +"\t<b2 _type='B^^'>\n" + +"\t\t<array>\n" + +"\t\t\t<B>\n" + +"\t\t\t\t<b>foo</b>\n" + +"\t\t\t</B>\n" + +"\t\t</array>\n" + +"\t</b2>\n" + +"\t<b3>\n" + +"\t\t<array>\n" + +"\t\t\t<B>\n" + +"\t\t\t\t<b>foo</b>\n" + +"\t\t\t</B>\n" + +"\t\t</array>\n" + +"\t</b3>\n" + +"</object>\n", + "<object>" + +"<b1>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b1>" + +"<b2 _type='B^^'>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b2>" + +"<b3>" + +"<array>" + +"<B>" + +"<b>foo</b>" + +"</B>" + +"</array>" + +"</b3>" + +"</object>", + }, + { + "BeanWithPropertiesWithMapTypeNames", + new BeanWithPropertiesWithMapTypeNames().init(), + "<object>" + +"<b1>" + +"<k1>" + +"<b>foo</b>" + +"</k1>" + +"</b1>" + +"<b2>" + +"<k2 _type='B'>" + +"<b>foo</b>" + +"</k2>" + +"</b2>" + +"</object>", + "<object>\n" + +"\t<b1>\n" + +"\t\t<k1>\n" + +"\t\t\t<b>foo</b>\n" + +"\t\t</k1>\n" + +"\t</b1>\n" + +"\t<b2>\n" + +"\t\t<k2 _type='B'>\n" + +"\t\t\t<b>foo</b>\n" + +"\t\t</k2>\n" + +"\t</b2>\n" + +"</object>\n", + "<object>" + +"<b1>" + +"<k1>" + +"<b>foo</b>" + +"</k1>" + +"</b1>" + +"<b2>" + +"<k2 _type='B'>" + +"<b>foo</b>" + +"</k2>" + +"</b2>" + +"</object>", + }, + { + "BeanWithChildTypeNames", + new BeanWithChildTypeNames().init(), + "<object>" + +"<a>" + +"<fx>fx1</fx>" + +"</a>" + +"<b _type='X'>" + +"<fx>fx1</fx>" + +"</b>" + +"<c>" + +"<X>" + +"<fx>fx1</fx>" + +"</X>" + +"</c>" + +"<d>" + +"<X>" + +"<fx>fx1</fx>" + +"</X>" + +"</d>" + +"</object>", + "<object>" + +"\n\t<a>" + +"\n\t\t<fx>fx1</fx>" + +"\n\t</a>" + +"\n\t<b _type='X'>" + +"\n\t\t<fx>fx1</fx>" + +"\n\t</b>" + +"\n\t<c>" + +"\n\t\t<X>" + +"\n\t\t\t<fx>fx1</fx>" + +"\n\t\t</X>" + +"\n\t</c>" + +"\n\t<d>" + +"\n\t\t<X>" + +"\n\t\t\t<fx>fx1</fx>" + +"\n\t\t</X>" + +"\n\t</d>" + +"\n</object>\n", + "<object>" + +"<a>" + +"<fx>fx1</fx>" + +"</a>" + +"<b _type='X'>" + +"<fx>fx1</fx>" + +"</b>" + +"<c>" + +"<X>" + +"<fx>fx1</fx>" + +"</X>" + +"</c>" + +"<d>" + +"<X>" + +"<fx>fx1</fx>" + +"</X>" + +"</d>" + +"</object>", + }, + { + "BeanWithChildName", + new BeanWithChildName().init(), + "<object><a><X>foo</X><X>bar</X></a><b><Y>123</Y><Y>456</Y></b></object>", + "<object>\n\t<a>\n\t\t<X>foo</X>\n\t\t<X>bar</X>\n\t</a>\n\t<b>\n\t\t<Y>123</Y>\n\t\t<Y>456</Y>\n\t</b>\n</object>\n", + "<object><a><X>foo</X><X>bar</X></a><b><Y>123</Y><Y>456</Y></b></object>", + }, + { + "BeanWithXmlFormatAttrProperty", + new BeanWithXmlFormatAttrProperty().init(), + "<object a='foo' b='123'/>", + "<object a='foo' b='123'/>\n", + "<object a='foo' b='123'/>", + }, + { + "BeanWithXmlFormatAttrs", + new BeanWithXmlFormatAttrs().init(), + "<object a='foo' b='123'/>", + "<object a='foo' b='123'/>\n", + "<object a='foo' b='123'/>", + }, + { + "BeanWithXmlFormatElementProperty", + new BeanWithXmlFormatElementProperty().init(), + "<object a='foo'><b>123</b></object>", + "<object a='foo'>\n\t<b>123</b>\n</object>\n", + "<object a='foo'><b>123</b></object>", + }, + { + "BeanWithXmlFormatAttrsProperty", + new BeanWithXmlFormatAttrsProperty().init(), + "<object k1='foo' k2='123' b='456'/>", + "<object k1='foo' k2='123' b='456'/>\n", + "<object k1='foo' k2='123' b='456'/>", + }, + { + "BeanWithXmlFormatCollapsedProperty", + new BeanWithXmlFormatCollapsedProperty().init(), + "<object><A>foo</A><A>bar</A><B>123</B><B>456</B></object>", + "<object>\n\t<A>foo</A>\n\t<A>bar</A>\n\t<B>123</B>\n\t<B>456</B>\n</object>\n", + "<object><A>foo</A><A>bar</A><B>123</B><B>456</B></object>", + }, + { + "BeanWithXmlFormatTextProperty", + new BeanWithXmlFormatTextProperty().init(), + "<object a='foo'>bar</object>", + "<object a='foo'>bar</object>\n", + "<object a='foo'>bar</object>", + }, + { + "BeanWithXmlFormatXmlTextProperty", + new BeanWithXmlFormatXmlTextProperty().init(), + "<object a='foo'>bar<b>baz</b>qux</object>", + "<object a='foo'>bar<b>baz</b>qux</object>\n", + "<object a='foo'>bar<b>baz</b>qux</object>", + }, + { + "BeanWithXmlFormatElementsPropertyCollection", + new BeanWithXmlFormatElementsPropertyCollection().init(), + "<object a='foo'><string>bar</string><string>baz</string><number>123</number><boolean>true</boolean><null/></object>", + "<object a='foo'>\n\t<string>bar</string>\n\t<string>baz</string>\n\t<number>123</number>\n\t<boolean>true</boolean>\n\t<null/>\n</object>\n", + "<object a='foo'><string>bar</string><string>baz</string><number>123</number><boolean>true</boolean><null/></object>", + }, + { + "BeanWithMixedContent", + new BeanWithMixedContent().init(), + "<object>foo<X fx='fx1'/>bar<Y fy='fy1'/>baz</object>", + "<object>foo<X fx='fx1'/>bar<Y fy='fy1'/>baz</object>\n", // Mixed content doesn't use whitespace! + "<object>foo<X fx='fx1'/>bar<Y fy='fy1'/>baz</object>", + }, + { + "BeanWithSpecialCharacters", + new BeanWithSpecialCharacters().init(), + "<object><a>_x000A__x0008__x000C__x0009_</a></object>", + "<object>\n\t<a>_x000A__x0008__x000C__x0009_</a>\n</object>\n", + "<object><a>_x000A__x0008__x000C__x0009_</a></object>" + }, + { + "BeanWithSpecialCharacters2", + new BeanWithSpecialCharacters2().init(), + "<_x0024__x0023__x0021_><_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_></_x0024__x0023__x0021_>", + "<_x0024__x0023__x0021_>\n\t<_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_>\n</_x0024__x0023__x0021_>\n", + "<_x0024__x0023__x0021_><_x002A__x0028__x0029_>_x000A__x0008__x000C__x0009_</_x002A__x0028__x0029_></_x0024__x0023__x0021_>" + }, + { + "BeanWithNullProperties", + new BeanWithNullProperties(), + "<object/>", + "<object/>\n", + "<object/>" + }, + { + "BeanWithAbstractFields", + new BeanWithAbstractFields().init(), + "<object>" + +"<a>" + +"<a>foo</a>" + +"</a>" + +"<ia _type='A'>" + +"<a>foo</a>" + +"</ia>" + +"<aa _type='A'>" + +"<a>foo</a>" + +"</aa>" + +"<o _type='A'>" + +"<a>foo</a>" + +"</o>" + +"</object>", + "<object>\n" + +"\t<a>\n" + +"\t\t<a>foo</a>\n" + +"\t</a>\n" + +"\t<ia _type='A'>\n" + +"\t\t<a>foo</a>\n" + +"\t</ia>\n" + +"\t<aa _type='A'>\n" + +"\t\t<a>foo</a>\n" + +"\t</aa>\n" + +"\t<o _type='A'>\n" + +"\t\t<a>foo</a>\n" + +"\t</o>\n" + +"</object>\n", + "<object>" + +"<a>" + +"<a>foo</a>" + +"</a>" + +"<ia _type='A'>" + +"<a>foo</a>" + +"</ia>" + +"<aa _type='A'>" + +"<a>foo</a>" + +"</aa>" + +"<o _type='A'>" + +"<a>foo</a>" + +"</o>" + +"</object>", + }, + { + "BeanWithAbstractArrayFields", + new BeanWithAbstractArrayFields().init(), + "<object>" + +"<a>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</a>" + +"<ia1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia1>" + +"<ia2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia2>" + +"<aa1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa1>" + +"<aa2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa2>" + +"<o1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o1>" + +"<o2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o2>" + +"</object>", + "<object>\n" + +"\t<a>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</a>\n" + +"\t<ia1 _type='A^'>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</ia1>\n" + +"\t<ia2>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</ia2>\n" + +"\t<aa1 _type='A^'>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</aa1>\n" + +"\t<aa2>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</aa2>\n" + +"\t<o1 _type='A^'>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</o1>\n" + +"\t<o2>\n" + +"\t\t<A>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</A>\n" + +"\t</o2>\n" + +"</object>\n", + "<object>" + +"<a>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</a>" + +"<ia1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia1>" + +"<ia2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia2>" + +"<aa1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa1>" + +"<aa2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa2>" + +"<o1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o1>" + +"<o2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o2>" + +"</object>", + }, + { + "BeanWithAbstractMapFields", + new BeanWithAbstractMapFields().init(), + "<object>" + +"<a>" + +"<k1>" + +"<a>foo</a>" + +"</k1>" + +"</a>" + +"<b>" + +"<k2 _type='A'>" + +"<a>foo</a>" + +"</k2>" + +"</b>" + +"<c>" + +"<k3 _type='A'>" + +"<a>foo</a>" + +"</k3>" + +"</c>" + +"</object>", + "<object>\n" + +"\t<a>\n" + +"\t\t<k1>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</k1>\n" + +"\t</a>\n" + +"\t<b>\n" + +"\t\t<k2 _type='A'>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</k2>\n" + +"\t</b>\n" + +"\t<c>\n" + +"\t\t<k3 _type='A'>\n" + +"\t\t\t<a>foo</a>\n" + +"\t\t</k3>\n" + +"\t</c>\n" + +"</object>\n", + "<object>" + +"<a>" + +"<k1>" + +"<a>foo</a>" + +"</k1>" + +"</a>" + +"<b>" + +"<k2 _type='A'>" + +"<a>foo</a>" + +"</k2>" + +"</b>" + +"<c>" + +"<k3 _type='A'>" + +"<a>foo</a>" + +"</k3>" + +"</c>" + +"</object>", + }, + { + "BeanWithAbstractMapArrayFields", + new BeanWithAbstractMapArrayFields().init(), + "<object>" + +"<a>" + +"<a1>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</a1>" + +"</a>" + +"<ia>" + +"<ia1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia1>" + +"<ia2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia2>" + +"</ia>" + +"<aa>" + +"<aa1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa1>" + +"<aa2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa2>" + +"</aa>" + +"<o>" + +"<o1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o1>" + +"<o2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o2>" + +"</o>" + +"</object>", + "<object>\n" + +"\t<a>\n" + +"\t\t<a1>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</a1>\n" + +"\t</a>\n" + +"\t<ia>\n" + +"\t\t<ia1 _type='A^'>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</ia1>\n" + +"\t\t<ia2>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</ia2>\n" + +"\t</ia>\n" + +"\t<aa>\n" + +"\t\t<aa1 _type='A^'>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</aa1>\n" + +"\t\t<aa2>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</aa2>\n" + +"\t</aa>\n" + +"\t<o>\n" + +"\t\t<o1 _type='A^'>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</o1>\n" + +"\t\t<o2>\n" + +"\t\t\t<A>\n" + +"\t\t\t\t<a>foo</a>\n" + +"\t\t\t</A>\n" + +"\t\t</o2>\n" + +"\t</o>\n" + +"</object>\n", + "<object>" + +"<a>" + +"<a1>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</a1>" + +"</a>" + +"<ia>" + +"<ia1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia1>" + +"<ia2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</ia2>" + +"</ia>" + +"<aa>" + +"<aa1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa1>" + +"<aa2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</aa2>" + +"</aa>" + +"<o>" + +"<o1 _type='A^'>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o1>" + +"<o2>" + +"<A>" + +"<a>foo</a>" + +"</A>" + +"</o2>" + +"</o>" + +"</object>", + } + }); + } + + private String label, e1, e2, e3; + private Object in; + + public BasicXmlTest(String label, Object in, String e1, String e2, String e3) throws Exception { + this.label = label; + this.in = in; + this.e1 = e1; + this.e2 = e2; + this.e3 = e3; + } + + @Test + public void serializeNormal() { + try { + String r = s1.serialize(in); + assertEquals(label + " serialize-normal failed", e1, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + @Test + public void parseNormal() { + try { + String r = s1.serialize(in); + Object o = parser.parse(r, in == null ? Object.class : in.getClass()); + r = s1.serialize(o); + assertEquals(label + " parse-normal failed", e1, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + @Test + public void serializeReadable() { + try { + String r = s2.serialize(in); + assertEquals(label + " serialize-readable failed", e2, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + @Test + public void parseReadable() { + try { + String r = s2.serialize(in); + Object o = parser.parse(r, in == null ? Object.class : in.getClass()); + r = s2.serialize(o); + assertEquals(label + " parse-readable failed", e2, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + @Test + public void serializeNsEnabled() { + try { + String r = s3.serialize(in); + assertEquals(label + " serialize-ns-enabled failed", e3, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + @Test + public void parseNsEnabled() { + try { + String r = s3.serialize(in); + Object o = parser.parse(r, in == null ? Object.class : in.getClass()); + r = s3.serialize(o); + assertEquals(label + " parse-ns-enabled failed", e3, r); + } catch (AssertionError e) { + throw e; + } catch (Throwable e) { + throw new RuntimeException(label + " test failed", e); + } + } + + + //-------------------------------------------------------------------------------- + // Test beans + //-------------------------------------------------------------------------------- + + public static class MapWithStrings extends LinkedHashMap<String,String> { + public MapWithStrings append(String key, String value) { + put(key, value); + return this; + } + } + + public static class MapWithNumbers extends LinkedHashMap<String,Number> { + public MapWithNumbers append(String key, Number value) { + put(key, value); + return this; + } + } + + public static class MapWithObjects extends LinkedHashMap<String,Object> { + public MapWithObjects append(String key, Object value) { + put(key, value); + return this; + } + } + + public static class ListWithStrings extends ArrayList<String> { + public ListWithStrings append(String value) { + this.add(value); + return this; + } + } + + public static class ListWithNumbers extends ArrayList<Number> { + public ListWithNumbers append(Number value) { + this.add(value); + return this; + } + } + + public static class ListWithObjects extends ArrayList<Object> { + public ListWithObjects append(Object value) { + this.add(value); + return this; + } + } + + public static class BeanWithNormalProperties { + public String a; + public int b; + public Object c; + public Object d; + public Bean1a e; + public String[] f; + public int[] g; + + BeanWithNormalProperties init() { + a = "foo"; + b = 123; + c = "bar"; + d = 456; + e = new Bean1a().init(); + f = new String[]{ "baz" }; + g = new int[]{ 789 }; + return this; + } + } + + public static class Bean1a { + public String h; + + Bean1a init() { + h = "qux"; + return this; + } + } + + public static class BeanWithMapProperties { + @BeanProperty(type=MapWithStrings.class) + public Map<String,String> a; + @BeanProperty(type=MapWithNumbers.class) + public Map<String,Number> b; + @BeanProperty(type=MapWithObjects.class) + public Map<String,Object> c; + + BeanWithMapProperties init() { + a = new MapWithStrings().append("k1","foo"); + b = new MapWithNumbers().append("k2",123); + c = new MapWithObjects().append("k3","bar").append("k4",456).append("k5",true).append("k6",null); + return this; + } + } + + @Bean(typeName="X") + public static class BeanWithTypeName { + public int a; + public String b; + + BeanWithTypeName init() { + a = 123; + b = "foo"; + return this; + } + } + + @Bean(beanDictionary={B.class}) + public static class BeanWithPropertiesWithTypeNames { + public B b1; + public Object b2; + + BeanWithPropertiesWithTypeNames init() { + b1 = new B().init(); + b2 = new B().init(); + return this; + } + } + + @Bean(beanDictionary={B.class}) + public static class BeanWithPropertiesWithArrayTypeNames { + public B[] b1; + public Object[] b2; + public Object[] b3; + + BeanWithPropertiesWithArrayTypeNames init() { + b1 = new B[]{new B().init()}; + b2 = new B[]{new B().init()}; + b3 = new Object[]{new B().init()}; + return this; + } + } + + @Bean(beanDictionary={B.class}) + public static class BeanWithPropertiesWith2dArrayTypeNames { + public B[][] b1; + public Object[][] b2; + public Object[][] b3; + + BeanWithPropertiesWith2dArrayTypeNames init() { + b1 = new B[][]{{new B().init()}}; + b2 = new B[][]{{new B().init()}}; + b3 = new Object[][]{{new B().init()}}; + return this; + } + } + + @Bean(beanDictionary={B.class}) + public static class BeanWithPropertiesWithMapTypeNames { + public Map<String,B> b1; + public Map<String,Object> b2; + + BeanWithPropertiesWithMapTypeNames init() { + b1 = new HashMap<String,B>(); + b1.put("k1", new B().init()); + b2 = new HashMap<String,Object>(); + b2.put("k2", new B().init()); + return this; + } + } + + @Bean(typeName="B") + public static class B { + public String b; + + B init() { + b = "foo"; + return this; + } + } + + public static class BeanWithChildTypeNames { + public BeanX a; + @BeanProperty(beanDictionary=BeanX.class) + public Object b; + public BeanX[] c; + @BeanProperty(beanDictionary=BeanX.class) + public Object[] d; + BeanWithChildTypeNames init() { + a = new BeanX().init(); + b = new BeanX().init(); + c = new BeanX[]{new BeanX().init()}; + d = new Object[]{new BeanX().init()}; + return this; + } + } + + public static class BeanWithChildName { + @Xml(childName = "X") + public String[] a; + @Xml(childName = "Y") + public int[] b; + BeanWithChildName init() { + a = new String[] { "foo", "bar" }; + b = new int[] { 123, 456 }; + return this; + } + } + + public static class BeanWithXmlFormatAttrProperty { + @Xml(format=XmlFormat.ATTR) + public String a; + @Xml(format=XmlFormat.ATTR) + public int b; + BeanWithXmlFormatAttrProperty init() { + a = "foo"; + b = 123; + return this; + } + } + + @Xml(format=XmlFormat.ATTRS) + public static class BeanWithXmlFormatAttrs { + public String a; + public int b; + BeanWithXmlFormatAttrs init() { + a = "foo"; + b = 123; + return this; + } + } + + @Xml(format=XmlFormat.ATTRS) + public static class BeanWithXmlFormatElementProperty { + public String a; + @Xml(format=XmlFormat.ELEMENT) + public int b; + BeanWithXmlFormatElementProperty init() { + a = "foo"; + b = 123; + return this; + } + } + + public static class BeanWithXmlFormatAttrsProperty { + @Xml(format=XmlFormat.ATTRS) + public Map<String,Object> a; + @Xml(format=XmlFormat.ATTR) + public int b; + BeanWithXmlFormatAttrsProperty init() { + a = new ObjectMap().append("k1", "foo").append("k2", 123); + b = 456; + return this; + } + } + + public static class BeanWithXmlFormatCollapsedProperty { + @Xml(childName="A",format=XmlFormat.COLLAPSED) + public String[] a; + @Xml(childName="B",format=XmlFormat.COLLAPSED) + public int[] b; + BeanWithXmlFormatCollapsedProperty init() { + a = new String[]{"foo","bar"}; + b = new int[]{123,456}; + return this; + } + } + + public static class BeanWithXmlFormatTextProperty { + @Xml(format=XmlFormat.ATTR) + public String a; + @Xml(format=XmlFormat.TEXT) + public String b; + BeanWithXmlFormatTextProperty init() { + a = "foo"; + b = "bar"; + return this; + } + } + + public static class BeanWithXmlFormatXmlTextProperty { + @Xml(format=XmlFormat.ATTR) + public String a; + @Xml(format=XmlFormat.XMLTEXT) + public String b; + BeanWithXmlFormatXmlTextProperty init() { + a = "foo"; + b = "bar<b>baz</b>qux"; + return this; + } + } + + public static class BeanWithXmlFormatElementsPropertyCollection { + @Xml(format=XmlFormat.ATTR) + public String a; + @Xml(format=XmlFormat.ELEMENTS) + public Object[] b; + BeanWithXmlFormatElementsPropertyCollection init() { + a = "foo"; + b = new Object[]{"bar","baz",123,true,null}; + return this; + } + } + + public static class BeanWithMixedContent { + @Xml(format=XmlFormat.MIXED) + @BeanProperty(beanDictionary={BeanXSimple.class, BeanYSimple.class}) + public Object[] a; + BeanWithMixedContent init() { + a = new Object[]{ + "foo", + new BeanXSimple().init(), + "bar", + new BeanYSimple().init(), + "baz" + }; + return this; + } + } + + @Bean(typeName="X") + public static class BeanX { + public String fx; + BeanX init() { + fx = "fx1"; + return this; + } + } + + @Bean(typeName="X") + public static class BeanXSimple { + @Xml(format=XmlFormat.ATTR) + public String fx; + BeanXSimple init() { + fx = "fx1"; + return this; + } + } + + @Bean(typeName="Y") + public static class BeanY { + public String fy; + BeanY init() { + fy = "fy1"; + return this; + } + } + + @Bean(typeName="Y") + public static class BeanYSimple { + @Xml(format=XmlFormat.ATTR) + public String fy; + BeanYSimple init() { + fy = "fy1"; + return this; + } + } + + public static class BeanWithSpecialCharacters { + public String a; + + BeanWithSpecialCharacters init() { + a = "\n\b\f\t"; + return this; + } + } + + @Bean(typeName="$#!") + public static class BeanWithSpecialCharacters2 { + + @BeanProperty(name="*()") + public String a; + + BeanWithSpecialCharacters2 init() { + a = "\n\b\f\t"; + return this; + } + } + + public static class BeanWithNullProperties { + public String a; + public String[] b; + } + + @Bean(beanDictionary={A.class}) + public static class BeanWithAbstractFields { + public A a; + public IA ia; + public AA aa; + public Object o; + + BeanWithAbstractFields init() { + ia = new A().init(); + aa = new A().init(); + a = new A().init(); + o = new A().init(); + return this; + } + } + + @Bean(beanDictionary={A.class}) + public static class BeanWithAbstractArrayFields { + public A[] a; + public IA[] ia1, ia2; + public AA[] aa1, aa2; + public Object[] o1, o2; + + BeanWithAbstractArrayFields init() { + a = new A[]{new A().init()}; + ia1 = new A[]{new A().init()}; + aa1 = new A[]{new A().init()}; + o1 = new A[]{new A().init()}; + ia2 = new IA[]{new A().init()}; + aa2 = new AA[]{new A().init()}; + o2 = new Object[]{new A().init()}; + return this; + } + } + + @Bean(beanDictionary={A.class}) + public static class BeanWithAbstractMapFields { + public Map<String,A> a; + public Map<String,AA> b; + public Map<String,Object> c; + + BeanWithAbstractMapFields init() { + a = new HashMap<String,A>(); + b = new HashMap<String,AA>(); + c = new HashMap<String,Object>(); + a.put("k1", new A().init()); + b.put("k2", new A().init()); + c.put("k3", new A().init()); + return this; + } + } + + @Bean(beanDictionary={A.class}) + public static class BeanWithAbstractMapArrayFields { + public Map<String,A[]> a; + public Map<String,IA[]> ia; + public Map<String,AA[]> aa; + public Map<String,Object[]> o; + + BeanWithAbstractMapArrayFields init() { + a = new LinkedHashMap<String,A[]>(); + ia = new LinkedHashMap<String,IA[]>(); + aa = new LinkedHashMap<String,AA[]>(); + o = new LinkedHashMap<String,Object[]>(); + a.put("a1", new A[]{new A().init()}); + ia.put("ia1", new A[]{new A().init()}); + ia.put("ia2", new IA[]{new A().init()}); + aa.put("aa1", new A[]{new A().init()}); + aa.put("aa2", new AA[]{new A().init()}); + o.put("o1", new A[]{new A().init()}); + o.put("o2", new Object[]{new A().init()}); + return this; + } + } + + public static interface IA { + public String getA(); + public void setA(String a); + } + + public static abstract class AA implements IA {} + + @Bean(typeName="A") + public static class A extends AA { + private String a; + + @Override + public String getA() { + return a; + } + + @Override + public void setA(String a) { + this.a = a; + } + + A init() { + this.a = "foo"; + return this; + } + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java index 7081e83..481cfb7 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonParserTest.java @@ -74,11 +74,11 @@ public class CommonParserTest { t2.add(new A3("name0","value0")); t2.add(new A3("name1","value1")); t1.list = t2; - String r = XmlSerializer.DEFAULT.serialize(t1); + String r = XmlSerializer.DEFAULT_NS.serialize(t1); t1 = p.parse(r, A1.class); assertEquals("value1", t1.list.get(1).value); - r = XmlSerializer.DEFAULT.serialize(t1); + r = XmlSerializer.DEFAULT_NS.serialize(t1); t1 = p.parse(r, A1.class); assertEquals("value1", t1.list.get(1).value); } http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java index f6cb225..7ef01fd 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonTest.java @@ -38,13 +38,13 @@ public class CommonTest { //==================================================================================================== @Test public void testTrimNullsFromBeans() throws Exception { - XmlSerializer s = new XmlSerializer.SimpleSq(); + XmlSerializer s = new XmlSerializer.Sq(); XmlParser p = new XmlParser(); A t1 = A.create(), t2; s.setProperty(SERIALIZER_trimNullProperties, false); String r = s.serialize(t1); - assertEquals("<object><s1 nil='true'/><s2>s2</s2></object>", r); + assertEquals("<object><s1 _type='null'/><s2>s2</s2></object>", r); t2 = p.parse(r, A.class); assertEqualObjects(t1, t2); @@ -70,20 +70,20 @@ public class CommonTest { //==================================================================================================== @Test public void testTrimEmptyMaps() throws Exception { - XmlSerializer s = new XmlSerializer.SimpleSq(); + XmlSerializer s = new XmlSerializer.Sq(); XmlParser p = XmlParser.DEFAULT; B t1 = B.create(), t2; String r; s.setProperty(SERIALIZER_trimEmptyMaps, false); r = s.serialize(t1); - assertEquals("<object><f1/><f2><f2a nil='true'/><f2b><s2>s2</s2></f2b></f2></object>", r); + assertEquals("<object><f1/><f2><f2a _type='null'/><f2b><s2>s2</s2></f2b></f2></object>", r); t2 = p.parse(r, B.class); assertEqualObjects(t1, t2); s.setProperty(SERIALIZER_trimEmptyMaps, true); r = s.serialize(t1); - assertEquals("<object><f2><f2a nil='true'/><f2b><s2>s2</s2></f2b></f2></object>", r); + assertEquals("<object><f2><f2a _type='null'/><f2b><s2>s2</s2></f2b></f2></object>", r); t2 = p.parse(r, B.class); assertNull(t2.f1); } @@ -104,7 +104,7 @@ public class CommonTest { //==================================================================================================== @Test public void testTrimEmptyLists() throws Exception { - XmlSerializer s = new XmlSerializer.SimpleSq(); + XmlSerializer s = new XmlSerializer.Sq(); XmlParser p = XmlParser.DEFAULT; C t1 = C.create(), t2; String r; @@ -138,7 +138,7 @@ public class CommonTest { //==================================================================================================== @Test public void testTrimEmptyArrays() throws Exception { - XmlSerializer s = new XmlSerializer.SimpleSq(); + XmlSerializer s = new XmlSerializer.Sq(); XmlParser p = XmlParser.DEFAULT; D t1 = D.create(), t2; String r; @@ -172,10 +172,19 @@ public class CommonTest { //==================================================================================================== @Test public void testBeanPropertyProperties() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; E1 t = new E1(); String r = s.serialize(t); - assertEquals("<object><x1 f2='2'><f1>1</f1></x1><x2><f1>1</f1></x2><x3><object f2='2'><f1>1</f1></object></x3><x4><object f2='2'><f1>1</f1></object></x4><x5><object><f1>1</f1></object></x5><x6><object><f1>1</f1></object></x6></object>", r); + assertEquals( + "<object>" + +"<x1 f2='2'><f1>1</f1></x1>" + +"<x2><f1>1</f1></x2>" + +"<x3><object f2='2'><f1>1</f1></object></x3>" + +"<x4><object f2='2'><f1>1</f1></object></x4>" + +"<x5><object><f1 _type='number'>1</f1></object></x5>" + +"<x6><object><f1 _type='number'>1</f1></object></x6>" + +"</object>", + r); TestUtils.validateXml(t); } @@ -206,7 +215,7 @@ public class CommonTest { //==================================================================================================== @Test public void testBeanPropertyPropertiesOnListOfBeans() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; List<Test7b> l = new LinkedList<Test7b>(); Test7b t = new Test7b(); t.x1.add(new Test7b()); @@ -225,7 +234,7 @@ public class CommonTest { //==================================================================================================== @Test public void testURIAttr() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; G t = new G(); @@ -251,7 +260,7 @@ public class CommonTest { //==================================================================================================== @Test public void testUris() throws Exception { - WriterSerializer s = new XmlSerializer.SimpleSq(); + WriterSerializer s = new XmlSerializer.Sq(); TestURI t = new TestURI(); String r; String expected; http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java index 848d76a..e2fd383 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/CommonXmlTest.java @@ -31,7 +31,7 @@ public class CommonXmlTest { @Test public void testBeanUriAnnotation() throws Exception { XmlParser p = XmlParser.DEFAULT; - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; A t = new A("http://foo", 123, "bar"); String xml = s.serialize(t); http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java new file mode 100644 index 0000000..1bfec26 --- /dev/null +++ b/juneau-core/src/test/java/org/apache/juneau/xml/InvalidXmlBeansTest.java @@ -0,0 +1,230 @@ +// *************************************************************************************************************************** +// * Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file * +// * distributed with this work for additional information regarding copyright ownership. The ASF licenses this file * +// * to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance * +// * with the License. You may obtain a copy of the License at * +// * * +// * http://www.apache.org/licenses/LICENSE-2.0 * +// * * +// * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an * +// * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the * +// * specific language governing permissions and limitations under the License. * +// *************************************************************************************************************************** +package org.apache.juneau.xml; + +import static org.junit.Assert.*; + +import java.util.*; + +import org.apache.juneau.*; +import org.apache.juneau.xml.annotation.*; +import org.junit.*; +import org.junit.runner.*; +import org.junit.runners.*; + +/** + * Verifies that the correct error messages are displayed when you do something wrong with the @Xml annotation. + */ +@RunWith(Parameterized.class) +@SuppressWarnings({"javadoc"}) +public class InvalidXmlBeansTest { + + private static final XmlSerializer + s1 = XmlSerializer.DEFAULT_SQ; + + @Parameterized.Parameters + public static Collection<Object[]> getParameters() { + return Arrays.asList(new Object[][] { + + { + "BeanWithAttrFormat", + new BeanWithAttrFormat(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithAttrFormat: Invalid format specified in @Xml annotation on bean: ATTR. Must be one of the following: DEFAULT,ATTRS,ELEMENTS", + }, + { + "BeanWithElementFormat", + new BeanWithElementFormat(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementFormat: Invalid format specified in @Xml annotation on bean: ELEMENT. Must be one of the following: DEFAULT,ATTRS,ELEMENTS", + }, + { + "BeanWithCollapsedFormat", + new BeanWithCollapsedFormat(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithCollapsedFormat: Invalid format specified in @Xml annotation on bean: COLLAPSED. Must be one of the following: DEFAULT,ATTRS,ELEMENTS", + }, + { + "BeanWithMixedFormat", + new BeanWithMixedFormat(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMixedFormat: Invalid format specified in @Xml annotation on bean: MIXED. Must be one of the following: DEFAULT,ATTRS,ELEMENTS", + }, + { + "BeanWithMultipleAttrs", + new BeanWithMultipleAttrs(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMultipleAttrs: Multiple instances of ATTRS properties defined on class. Only one property can be designated as such.", + }, + { + "BeanWithWrongAttrsType", + new BeanWithWrongAttrsType(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongAttrsType: Invalid type for ATTRS property. Only properties of type Map and bean can be used.", + }, + { + "BeanWithMulipleElements", + new BeanWithMulipleElements(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleElements: Multiple instances of ELEMENTS properties defined on class. Only one property can be designated as such.", + }, + { + "BeanWithWrongElementsType", + new BeanWithWrongElementsType(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithWrongElementsType: Invalid type for ELEMENTS property. Only properties of type Collection and array can be used.", + }, + { + "BeanWithMulipleMixed", + new BeanWithMulipleMixed(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithMulipleMixed: Multiple instances of MIXED properties defined on class. Only one property can be designated as such.", + }, + { + "BeanWithConflictingChildNames", + new BeanWithConflictingChildNames(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithConflictingChildNames: Multiple properties found with the child name 'X'.", + }, + { + "BeanWithElementsAndMixed", + new BeanWithElementsAndMixed(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndMixed: ELEMENTS and MIXED properties found on the same bean. Only one property can be designated as such.", + }, + { + "BeanWithElementsAndElement", + new BeanWithElementsAndElement(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndElement: ELEMENTS and ELEMENT properties found on the same bean. These cannot be mixed.", + }, + { + "BeanWithElementsAndDefault", + new BeanWithElementsAndDefault(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndDefault: ELEMENTS and ELEMENT properties found on the same bean. These cannot be mixed.", + }, + { + "BeanWithElementsAndCollapsed", + new BeanWithElementsAndCollapsed(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithElementsAndCollapsed: ELEMENTS and COLLAPSED properties found on the same bean. These cannot be mixed.", + }, + { + "BeanWithChildAndPropNameConflict", + new BeanWithChildAndPropNameConflict(), + "org.apache.juneau.xml.InvalidXmlBeansTest$BeanWithChildAndPropNameConflict: Child element name conflicts found with another property.", + }, + }); + } + + private String label, expected; + private Object in; + + public InvalidXmlBeansTest(String label, Object in, String expected) throws Exception { + this.label = label; + this.in = in; + this.expected = expected; + } + + @Test + public void test() { + try { + s1.serialize(in); + fail(label + ": Expected exception didn't occur."); + } catch (Exception e) { + assertEquals(label + ": Wrong error message.", expected, e.getLocalizedMessage()); + } + } + + //-------------------------------------------------------------------------------- + // Test beans + //-------------------------------------------------------------------------------- + + @Xml(format=XmlFormat.ATTR) + public static class BeanWithAttrFormat { + public int f1; + } + + @Xml(format=XmlFormat.ELEMENT) + public static class BeanWithElementFormat { + public int f1; + } + + @Xml(format=XmlFormat.COLLAPSED) + public static class BeanWithCollapsedFormat { + public int f1; + } + + @Xml(format=XmlFormat.MIXED) + public static class BeanWithMixedFormat { + public int f1; + } + + public static class BeanWithMultipleAttrs { + @Xml(format=XmlFormat.ATTRS) + public ObjectMap f1; + @Xml(format=XmlFormat.ATTRS) + public ObjectMap f2; + } + + public static class BeanWithWrongAttrsType { + @Xml(format=XmlFormat.ATTRS) + public ObjectList f1; + } + + public static class BeanWithMulipleElements { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f1; + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f2; + } + + public static class BeanWithWrongElementsType { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectMap f1; + } + + public static class BeanWithMulipleMixed { + @Xml(format=XmlFormat.MIXED) + public ObjectList f1; + @Xml(format=XmlFormat.MIXED) + public ObjectList f2; + } + + public static class BeanWithConflictingChildNames { + @Xml(format=XmlFormat.COLLAPSED, childName="X") + public ObjectList f1; + @Xml(format=XmlFormat.COLLAPSED, childName="X") + public ObjectList f2; + } + + public static class BeanWithElementsAndMixed { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f1; + @Xml(format=XmlFormat.MIXED) + public ObjectList f2; + } + + public static class BeanWithElementsAndElement { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f1; + @Xml(format=XmlFormat.ELEMENT) + public ObjectList f2; + } + + public static class BeanWithElementsAndDefault { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f1; + public ObjectList f2; + } + + public static class BeanWithElementsAndCollapsed { + @Xml(format=XmlFormat.ELEMENTS) + public ObjectList f1; + @Xml(format=XmlFormat.COLLAPSED) + public ObjectList f2; + } + + public static class BeanWithChildAndPropNameConflict { + @Xml(format=XmlFormat.COLLAPSED, childName="f2") + public ObjectList f1; + public ObjectList f2; + } +} http://git-wip-us.apache.org/repos/asf/incubator-juneau/blob/4fb01038/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java ---------------------------------------------------------------------- diff --git a/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java b/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java index c7d1417..1baf835 100755 --- a/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java +++ b/juneau-core/src/test/java/org/apache/juneau/xml/XmlCollapsedTest.java @@ -19,7 +19,6 @@ import static org.junit.Assert.*; import java.util.*; import org.apache.juneau.annotation.*; -import org.apache.juneau.serializer.*; import org.apache.juneau.xml.annotation.*; import org.junit.*; @@ -31,7 +30,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testBasic() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; A t = new A(); @@ -71,7 +70,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testUninitializedFields() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; B t = new B(); @@ -111,7 +110,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testInitializedFields() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; C t = new C(); @@ -158,7 +157,7 @@ public class XmlCollapsedTest { @Test @SuppressWarnings("synthetic-access") public void testGetters() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; D t = new D(); @@ -219,7 +218,7 @@ public class XmlCollapsedTest { @Test @SuppressWarnings("synthetic-access") public void testNullConstructibleCollectionFields() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; E t = new E(); @@ -265,7 +264,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testElementNameOnElementClass() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; Object t1 = FA.newInstance(), t2; String r; @@ -282,14 +281,6 @@ public class XmlCollapsedTest { t2 = p.parse(r, FB.class); assertEqualObjects(t1, t2); validateXml(t1, s); - - t1 = FC.newInstance(); - try { - r = s.serialize(t1); - fail("Exception expected."); - } catch (SerializeException e) { - assertEquals("org.apache.juneau.xml.XmlCollapsedTest$FC: Multiple properties found with the name 'xf1'.", e.getLocalizedMessage()); - } } public static class FA { @@ -320,25 +311,10 @@ public class XmlCollapsedTest { } } - // Should cause name collision. - public static class FC { - - @Xml(format=COLLAPSED) - public List<F1> f1; - - @Xml(format=COLLAPSED) - public F1[] f2; - - public static FC newInstance() { - FC t = new FC(); - return t; - } - } - @Bean(typeName="xf1") public static class F1 { - @Xml(format=CONTENT) + @Xml(format=TEXT) public String text; public static F1 newInstance(String text) { @@ -355,7 +331,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testElementNameOnElementClassOverridden() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; G t = G.newInstance(), t2; @@ -389,7 +365,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testElementNameOnCollectionClass() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; H t = H.newInstance(), t2; @@ -428,7 +404,7 @@ public class XmlCollapsedTest { //==================================================================================================== @Test public void testElementNameOnCollectionClassOverridden() throws Exception { - XmlSerializer s = XmlSerializer.DEFAULT_SIMPLE_SQ; + XmlSerializer s = XmlSerializer.DEFAULT_SQ; XmlParser p = XmlParser.DEFAULT; G t = G.newInstance(), t2;
