From 80e3312acd738f35147fe8fee991baf77e177fff Mon Sep 17 00:00:00 2001 From: Douglas Crockford Date: Wed, 9 Feb 2011 16:48:41 -0800 Subject: [PATCH] The tests are still defective, but at least they work for me now. --- Test.java | 907 +++++------------------------------------------------- 1 file changed, 70 insertions(+), 837 deletions(-) diff --git a/Test.java b/Test.java index 02ad3c1..74ce636 100755 --- a/Test.java +++ b/Test.java @@ -40,8 +40,7 @@ SOFTWARE. * comparisons of .toString to a string literal are likely to fail. * * @author JSON.org - * @author yusuke at mac.com - * @version 2011-01-13 + * @version 2011-02-09 */ public class Test extends TestCase { public Test(String name) { @@ -129,44 +128,8 @@ public class Test extends TestCase { string = " Basic bread Flour Yeast Water Salt Mix all ingredients together. Knead thoroughly. Cover with a cloth, and leave for one hour in warm room. Knead again. Place in a bread baking tin. Cover with a cloth, and leave for one hour in warm room. Bake in the oven at 180(degrees)C for 30 minutes. "; jsonobject = XML.toJSONObject(string); - assertEquals("{\"recipe\": {\n" + - " \"cook_time\": \"3 hours\",\n" + - " \"ingredient\": [\n" + - " {\n" + - " \"amount\": 8,\n" + - " \"content\": \"Flour\",\n" + - " \"unit\": \"dL\"\n" + - " },\n" + - " {\n" + - " \"amount\": 10,\n" + - " \"content\": \"Yeast\",\n" + - " \"unit\": \"grams\"\n" + - " },\n" + - " {\n" + - " \"amount\": 4,\n" + - " \"content\": \"Water\",\n" + - " \"state\": \"warm\",\n" + - " \"unit\": \"dL\"\n" + - " },\n" + - " {\n" + - " \"amount\": 1,\n" + - " \"content\": \"Salt\",\n" + - " \"unit\": \"teaspoon\"\n" + - " }\n" + - " ],\n" + - " \"instructions\": {\"step\": [\n" + - " \"Mix all ingredients together.\",\n" + - " \"Knead thoroughly.\",\n" + - " \"Cover with a cloth, and leave for one hour in warm room.\",\n" + - " \"Knead again.\",\n" + - " \"Place in a bread baking tin.\",\n" + - " \"Cover with a cloth, and leave for one hour in warm room.\",\n" + - " \"Bake in the oven at 180(degrees)C for 30 minutes.\"\n" + - " ]},\n" + - " \"name\": \"bread\",\n" + - " \"prep_time\": \"5 mins\",\n" + - " \"title\": \"Basic bread\"\n" + - "}}", jsonobject.toString(4)); + assertEquals("{\"recipe\": {\n \"title\": \"Basic bread\",\n \"cook_time\": \"3 hours\",\n \"instructions\": {\"step\": [\n \"Mix all ingredients together.\",\n \"Knead thoroughly.\",\n \"Cover with a cloth, and leave for one hour in warm room.\",\n \"Knead again.\",\n \"Place in a bread baking tin.\",\n \"Cover with a cloth, and leave for one hour in warm room.\",\n \"Bake in the oven at 180(degrees)C for 30 minutes.\"\n ]},\n \"name\": \"bread\",\n \"ingredient\": [\n {\n \"content\": \"Flour\",\n \"amount\": 8,\n \"unit\": \"dL\"\n },\n {\n \"content\": \"Yeast\",\n \"amount\": 10,\n \"unit\": \"grams\"\n },\n {\n \"content\": \"Water\",\n \"amount\": 4,\n \"unit\": \"dL\",\n \"state\": \"warm\"\n },\n {\n \"content\": \"Salt\",\n \"amount\": 1,\n \"unit\": \"teaspoon\"\n }\n ],\n \"prep_time\": \"5 mins\"\n}}", + jsonobject.toString(4)); jsonobject = JSONML.toJSONObject(string); assertEquals("{\"cook_time\":\"3 hours\",\"name\":\"bread\",\"tagName\":\"recipe\",\"childNodes\":[{\"tagName\":\"title\",\"childNodes\":[\"Basic bread\"]},{\"amount\":8,\"unit\":\"dL\",\"tagName\":\"ingredient\",\"childNodes\":[\"Flour\"]},{\"amount\":10,\"unit\":\"grams\",\"tagName\":\"ingredient\",\"childNodes\":[\"Yeast\"]},{\"amount\":4,\"unit\":\"dL\",\"tagName\":\"ingredient\",\"state\":\"warm\",\"childNodes\":[\"Water\"]},{\"amount\":1,\"unit\":\"teaspoon\",\"tagName\":\"ingredient\",\"childNodes\":[\"Salt\"]},{\"tagName\":\"instructions\",\"childNodes\":[{\"tagName\":\"step\",\"childNodes\":[\"Mix all ingredients together.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Knead thoroughly.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Cover with a cloth, and leave for one hour in warm room.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Knead again.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Place in a bread baking tin.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Cover with a cloth, and leave for one hour in warm room.\"]},{\"tagName\":\"step\",\"childNodes\":[\"Bake in the oven at 180(degrees)C for 30 minutes.\"]}]}],\"prep_time\":\"5 mins\"}", @@ -175,179 +138,28 @@ public class Test extends TestCase { JSONML.toString(jsonobject)); jsonarray = JSONML.toJSONArray(string); - assertEquals("[\n" + - " \"recipe\",\n" + - " {\n" + - " \"cook_time\": \"3 hours\",\n" + - " \"name\": \"bread\",\n" + - " \"prep_time\": \"5 mins\"\n" + - " },\n" + - " [\n" + - " \"title\",\n" + - " \"Basic bread\"\n" + - " ],\n" + - " [\n" + - " \"ingredient\",\n" + - " {\n" + - " \"amount\": 8,\n" + - " \"unit\": \"dL\"\n" + - " },\n" + - " \"Flour\"\n" + - " ],\n" + - " [\n" + - " \"ingredient\",\n" + - " {\n" + - " \"amount\": 10,\n" + - " \"unit\": \"grams\"\n" + - " },\n" + - " \"Yeast\"\n" + - " ],\n" + - " [\n" + - " \"ingredient\",\n" + - " {\n" + - " \"amount\": 4,\n" + - " \"state\": \"warm\",\n" + - " \"unit\": \"dL\"\n" + - " },\n" + - " \"Water\"\n" + - " ],\n" + - " [\n" + - " \"ingredient\",\n" + - " {\n" + - " \"amount\": 1,\n" + - " \"unit\": \"teaspoon\"\n" + - " },\n" + - " \"Salt\"\n" + - " ],\n" + - " [\n" + - " \"instructions\",\n" + - " [\n" + - " \"step\",\n" + - " \"Mix all ingredients together.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Knead thoroughly.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Cover with a cloth, and leave for one hour in warm room.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Knead again.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Place in a bread baking tin.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Cover with a cloth, and leave for one hour in warm room.\"\n" + - " ],\n" + - " [\n" + - " \"step\",\n" + - " \"Bake in the oven at 180(degrees)C for 30 minutes.\"\n" + - " ]\n" + - " ]\n" + - "]", jsonarray.toString(4)); + assertEquals("[\n \"recipe\",\n {\n \"cook_time\": \"3 hours\",\n \"name\": \"bread\",\n \"prep_time\": \"5 mins\"\n },\n [\n \"title\",\n \"Basic bread\"\n ],\n [\n \"ingredient\",\n {\n \"amount\": 8,\n \"unit\": \"dL\"\n },\n \"Flour\"\n ],\n [\n \"ingredient\",\n {\n \"amount\": 10,\n \"unit\": \"grams\"\n },\n \"Yeast\"\n ],\n [\n \"ingredient\",\n {\n \"amount\": 4,\n \"unit\": \"dL\",\n \"state\": \"warm\"\n },\n \"Water\"\n ],\n [\n \"ingredient\",\n {\n \"amount\": 1,\n \"unit\": \"teaspoon\"\n },\n \"Salt\"\n ],\n [\n \"instructions\",\n [\n \"step\",\n \"Mix all ingredients together.\"\n ],\n [\n \"step\",\n \"Knead thoroughly.\"\n ],\n [\n \"step\",\n \"Cover with a cloth, and leave for one hour in warm room.\"\n ],\n [\n \"step\",\n \"Knead again.\"\n ],\n [\n \"step\",\n \"Place in a bread baking tin.\"\n ],\n [\n \"step\",\n \"Cover with a cloth, and leave for one hour in warm room.\"\n ],\n [\n \"step\",\n \"Bake in the oven at 180(degrees)C for 30 minutes.\"\n ]\n ]\n]", + jsonarray.toString(4)); assertEquals("Basic breadFlourYeastWaterSaltMix all ingredients together.Knead thoroughly.Cover with a cloth, and leave for one hour in warm room.Knead again.Place in a bread baking tin.Cover with a cloth, and leave for one hour in warm room.Bake in the oven at 180(degrees)C for 30 minutes.", JSONML.toString(jsonarray)); string = "

JSONML is a transformation between JSON and XML that preserves ordering of document features.

JSONML can work with JSON arrays or JSON objects.

Three
little
words

"; jsonobject = JSONML.toJSONObject(string); - assertEquals("{\n" + - " \"childNodes\": [\n" + - " {\n" + - " \"childNodes\": [\n" + - " \"JSONML is a transformation between\",\n" + - " {\n" + - " \"childNodes\": [\"JSON\"],\n" + - " \"tagName\": \"b\"\n" + - " },\n" + - " \"and\",\n" + - " {\n" + - " \"childNodes\": [\"XML\"],\n" + - " \"tagName\": \"b\"\n" + - " },\n" + - " \"that preserves ordering of document features.\"\n" + - " ],\n" + - " \"tagName\": \"p\"\n" + - " },\n" + - " {\n" + - " \"childNodes\": [\"JSONML can work with JSON arrays or JSON objects.\"],\n" + - " \"tagName\": \"p\"\n" + - " },\n" + - " {\n" + - " \"childNodes\": [\n" + - " \"Three\",\n" + - " {\"tagName\": \"br\"},\n" + - " \"little\",\n" + - " {\"tagName\": \"br\"},\n" + - " \"words\"\n" + - " ],\n" + - " \"tagName\": \"p\"\n" + - " }\n" + - " ],\n" + - " \"class\": \"JSONML\",\n" + - " \"id\": \"demo\",\n" + - " \"tagName\": \"div\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"id\": \"demo\",\n \"tagName\": \"div\",\n \"class\": \"JSONML\",\n \"childNodes\": [\n {\n \"tagName\": \"p\",\n \"childNodes\": [\n \"JSONML is a transformation between\",\n {\n \"tagName\": \"b\",\n \"childNodes\": [\"JSON\"]\n },\n \"and\",\n {\n \"tagName\": \"b\",\n \"childNodes\": [\"XML\"]\n },\n \"that preserves ordering of document features.\"\n ]\n },\n {\n \"tagName\": \"p\",\n \"childNodes\": [\"JSONML can work with JSON arrays or JSON objects.\"]\n },\n {\n \"tagName\": \"p\",\n \"childNodes\": [\n \"Three\",\n {\"tagName\": \"br\"},\n \"little\",\n {\"tagName\": \"br\"},\n \"words\"\n ]\n }\n ]\n}", + jsonobject.toString(4)); assertEquals("

JSONML is a transformation betweenJSONandXMLthat preserves ordering of document features.

JSONML can work with JSON arrays or JSON objects.

Three
little
words

", JSONML.toString(jsonobject)); jsonarray = JSONML.toJSONArray(string); - assertEquals("[\n" + - " \"div\",\n" + - " {\n" + - " \"class\": \"JSONML\",\n" + - " \"id\": \"demo\"\n" + - " },\n" + - " [\n" + - " \"p\",\n" + - " \"JSONML is a transformation between\",\n" + - " [\n" + - " \"b\",\n" + - " \"JSON\"\n" + - " ],\n" + - " \"and\",\n" + - " [\n" + - " \"b\",\n" + - " \"XML\"\n" + - " ],\n" + - " \"that preserves ordering of document features.\"\n" + - " ],\n" + - " [\n" + - " \"p\",\n" + - " \"JSONML can work with JSON arrays or JSON objects.\"\n" + - " ],\n" + - " [\n" + - " \"p\",\n" + - " \"Three\",\n" + - " [\"br\"],\n" + - " \"little\",\n" + - " [\"br\"],\n" + - " \"words\"\n" + - " ]\n" + - "]", jsonarray.toString(4)); + assertEquals("[\n \"div\",\n {\n \"id\": \"demo\",\n \"class\": \"JSONML\"\n },\n [\n \"p\",\n \"JSONML is a transformation between\",\n [\n \"b\",\n \"JSON\"\n ],\n \"and\",\n [\n \"b\",\n \"XML\"\n ],\n \"that preserves ordering of document features.\"\n ],\n [\n \"p\",\n \"JSONML can work with JSON arrays or JSON objects.\"\n ],\n [\n \"p\",\n \"Three\",\n [\"br\"],\n \"little\",\n [\"br\"],\n \"words\"\n ]\n]", + jsonarray.toString(4)); assertEquals("

JSONML is a transformation betweenJSONandXMLthat preserves ordering of document features.

JSONML can work with JSON arrays or JSON objects.

Three
little
words

", JSONML.toString(jsonarray)); string = "\n Robert\n Smith\n
\n 12345 Sixth Ave\n Anytown\n CA\n 98765-4321\n
\n
"; jsonobject = XML.toJSONObject(string); - assertEquals("{\"person\": {\n" + - " \"address\": {\n" + - " \"city\": \"Anytown\",\n" + - " \"postalCode\": \"98765-4321\",\n" + - " \"state\": \"CA\",\n" + - " \"street\": \"12345 Sixth Ave\",\n" + - " \"type\": \"home\"\n" + - " },\n" + - " \"created\": \"2006-11-11T19:23\",\n" + - " \"firstName\": \"Robert\",\n" + - " \"lastName\": \"Smith\",\n" + - " \"modified\": \"2006-12-31T23:59\"\n" + - "}}", jsonobject.toString(4)); + assertEquals("{\"person\": {\n \"lastName\": \"Smith\",\n \"address\": {\n \"postalCode\": \"98765-4321\",\n \"street\": \"12345 Sixth Ave\",\n \"state\": \"CA\",\n \"type\": \"home\",\n \"city\": \"Anytown\"\n },\n \"created\": \"2006-11-11T19:23\",\n \"firstName\": \"Robert\",\n \"modified\": \"2006-12-31T23:59\"\n}}", + jsonobject.toString(4)); jsonobject = new JSONObject(beanie); assertEquals("{\"string\":\"A beany object\",\"BENT\":\"All uppercase key\",\"boolean\":true,\"number\":42,\"x\":\"x\"}" @@ -355,13 +167,7 @@ public class Test extends TestCase { string = "{ \"entity\": { \"imageURL\": \"\", \"name\": \"IXXXXXXXXXXXXX\", \"id\": 12336, \"ratingCount\": null, \"averageRating\": null } }"; jsonobject = new JSONObject(string); - assertEquals("{\"entity\": {\n" + - " \"averageRating\": null,\n" + - " \"id\": 12336,\n" + - " \"imageURL\": \"\",\n" + - " \"name\": \"IXXXXXXXXXXXXX\",\n" + - " \"ratingCount\": null\n" + - "}}", + assertEquals("{\"entity\": {\n \"id\": 12336,\n \"averageRating\": null,\n \"ratingCount\": null,\n \"name\": \"IXXXXXXXXXXXXX\",\n \"imageURL\": \"\"\n}}", jsonobject.toString(2)); jsonstringer = new JSONStringer(); @@ -435,32 +241,8 @@ public class Test extends TestCase { jsonstringer.endArray(); assertEquals("[1,[null,[{\"empty-array\":[],\"answer\":42,\"null\":null,\"false\":false,\"true\":true,\"big\":1.23456789E96,\"small\":1.23456789E-80,\"empty-object\":{},\"long\":9223372036854775807},\"two\"],true],98.6,-100,{},{\"one\":1},{\"A beany object\":42}]", jsonstringer.toString()); - assertEquals("[\n" + - " 1,\n" + - " [\n" + - " null,\n" + - " [\n" + - " {\n" + - " \"answer\": 42,\n" + - " \"big\": 1.23456789E96,\n" + - " \"empty-array\": [],\n" + - " \"empty-object\": {},\n" + - " \"false\": false,\n" + - " \"long\": 9223372036854775807,\n" + - " \"null\": null,\n" + - " \"small\": 1.23456789E-80,\n" + - " \"true\": true\n" + - " },\n" + - " \"two\"\n" + - " ],\n" + - " true\n" + - " ],\n" + - " 98.6,\n" + - " -100,\n" + - " {},\n" + - " {\"one\": 1},\n" + - " {\"A beany object\": 42}\n" + - "]", new JSONArray(jsonstringer.toString()).toString(4)); + assertEquals("[\n 1,\n [\n null,\n [\n {\n \"empty-array\": [],\n \"empty-object\": {},\n \"answer\": 42,\n \"true\": true,\n \"false\": false,\n \"long\": 9223372036854775807,\n \"big\": 1.23456789E96,\n \"small\": 1.23456789E-80,\n \"null\": null\n },\n \"two\"\n ],\n true\n ],\n 98.6,\n -100,\n {},\n {\"one\": 1},\n {\"A beany object\": 42}\n]", + new JSONArray(jsonstringer.toString()).toString(4)); int ar[] = {1, 2, 3}; JSONArray ja = new JSONArray(ar); @@ -470,28 +252,12 @@ public class Test extends TestCase { String sa[] = {"aString", "aNumber", "aBoolean"}; jsonobject = new JSONObject(beanie, sa); jsonobject.put("Testing JSONString interface", beanie); - assertEquals("{\n" + - " \"Testing JSONString interface\": {\"A beany object\":42},\n" + - " \"aBoolean\": true,\n" + - " \"aNumber\": 42,\n" + - " \"aString\": \"A beany object\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"aBoolean\": true,\n \"aNumber\": 42,\n \"aString\": \"A beany object\",\n \"Testing JSONString interface\": {\"A beany object\":42}\n}", + jsonobject.toString(4)); jsonobject = new JSONObject("{slashes: '///', closetag: '', backslash:'\\\\', ei: {quotes: '\"\\''},eo: {a: '\"quoted\"', b:\"don't\"}, quotes: [\"'\", '\"']}"); - assertEquals("{\n" + - " \"backslash\": \"\\\\\",\n" + - " \"closetag\": \"<\\/script>\",\n" + - " \"ei\": {\"quotes\": \"\\\"'\"},\n" + - " \"eo\": {\n" + - " \"a\": \"\\\"quoted\\\"\",\n" + - " \"b\": \"don't\"\n" + - " },\n" + - " \"quotes\": [\n" + - " \"'\",\n" + - " \"\\\"\"\n" + - " ],\n" + - " \"slashes\": \"///\"\n" + - "}", jsonobject.toString(2)); + assertEquals("{\n \"quotes\": [\n \"'\",\n \"\\\"\"\n ],\n \"slashes\": \"///\",\n \"ei\": {\"quotes\": \"\\\"'\"},\n \"eo\": {\n \"b\": \"don't\",\n \"a\": \"\\\"quoted\\\"\"\n },\n \"closetag\": \"<\\/script>\",\n \"backslash\": \"\\\\\"\n}", + jsonobject.toString(2)); assertEquals("'"///"'don't"quoted"</script>\\", XML.toString(jsonobject)); @@ -522,66 +288,8 @@ public class Test extends TestCase { jsonarray.put(new JSONArray()); jsonarray.put(new JSONObject()); jsonobject.put("keys", JSONObject.getNames(jsonobject)); - assertEquals("{\n" + - " \"JSONArray\": [],\n" + - " \"JSONObject\": {},\n" + - " \"String\": \"98.6\",\n" + - " \"\\\\u2028\": \"\\u2028\",\n" + - " \"\\\\u2029\": \"\\u2029\",\n" + - " \"bool\": \"true\",\n" + - " \"double\": 1.2345678901234568E29,\n" + - " \"false\": false,\n" + - " \"foo\": [\n" + - " true,\n" + - " false,\n" + - " 9876543210,\n" + - " 0,\n" + - " 1.00000001,\n" + - " 1.000000000001,\n" + - " 1,\n" + - " 1.0E-17,\n" + - " 2,\n" + - " 0.1,\n" + - " 2.0E100,\n" + - " -32,\n" + - " [],\n" + - " {},\n" + - " \"string\",\n" + - " 666,\n" + - " 2001.99,\n" + - " \"so \\\"fine\\\".\",\n" + - " \"so .\",\n" + - " true,\n" + - " false,\n" + - " [],\n" + - " {}\n" + - " ],\n" + - " \"int\": 57,\n" + - " \"keys\": [\n" + - " \"to\",\n" + - " \"ten\",\n" + - " \"JSONObject\",\n" + - " \"JSONArray\",\n" + - " \"op\",\n" + - " \"int\",\n" + - " \"true\",\n" + - " \"foo\",\n" + - " \"zero\",\n" + - " \"double\",\n" + - " \"String\",\n" + - " \"false\",\n" + - " \"bool\",\n" + - " \"\\\\u2028\",\n" + - " \"\\\\u2029\",\n" + - " \"null\"\n" + - " ],\n" + - " \"null\": null,\n" + - " \"op\": \"Good\",\n" + - " \"ten\": 10,\n" + - " \"to\": null,\n" + - " \"true\": true,\n" + - " \"zero\": -0\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"to\": null,\n \"ten\": 10,\n \"JSONObject\": {},\n \"JSONArray\": [],\n \"op\": \"Good\",\n \"keys\": [\n \"to\",\n \"ten\",\n \"JSONObject\",\n \"JSONArray\",\n \"op\",\n \"int\",\n \"true\",\n \"foo\",\n \"zero\",\n \"double\",\n \"String\",\n \"false\",\n \"bool\",\n \"\\\\u2028\",\n \"\\\\u2029\",\n \"null\"\n ],\n \"int\": 57,\n \"true\": true,\n \"foo\": [\n true,\n false,\n 9876543210,\n 0,\n 1.00000001,\n 1.000000000001,\n 1,\n 1.0E-17,\n 2,\n 0.1,\n 2.0E100,\n -32,\n [],\n {},\n \"string\",\n 666,\n 2001.99,\n \"so \\\"fine\\\".\",\n \"so .\",\n true,\n false,\n [],\n {}\n ],\n \"zero\": -0,\n \"double\": 1.2345678901234568E29,\n \"String\": \"98.6\",\n \"false\": false,\n \"bool\": \"true\",\n \"\\\\u2028\": \"\\u2028\",\n \"\\\\u2029\": \"\\u2029\",\n \"null\": null\n}", + jsonobject.toString(4)); assertEquals("null10GoodtotenJSONObjectJSONArrayopinttruefoozerodoubleStringfalsebool\\u2028\\u2029null57truetruefalse98765432100.01.000000011.0000000000011.01.0E-172.00.12.0E100-32string6662001.99so "fine".so <fine>.truefalse-0.01.2345678901234568E2998.6falsetrue<\\u2028>\u2028<\\u2029>\u2029null", XML.toString(jsonobject)); assertEquals(98.6d, jsonobject.getDouble("String"), eps); @@ -596,31 +304,8 @@ public class Test extends TestCase { string = "First \u0009<content> This is \"content\". 3 JSON does not preserve the sequencing of elements and contents. III T H R E EContent text is an implied structure in XML. JSON does not have implied structure:7everything is explicit.!]]>"; jsonobject = XML.toJSONObject(string); - assertEquals("{\"xml\": {\n" + - " \"content\": [\n" + - " \"First \\t\",\n" + - " \"This is \\\"content\\\".\",\n" + - " \"JSON does not preserve the sequencing of elements and contents.\",\n" + - " \"Content text is an implied structure in XML.\",\n" + - " \"JSON does not have implied structure:\",\n" + - " \"everything is explicit.\",\n" + - " \"CDATA blocks!\"\n" + - " ],\n" + - " \"five\": [\n" + - " \"\",\n" + - " \"\"\n" + - " ],\n" + - " \"four\": \"\",\n" + - " \"one\": 1,\n" + - " \"seven\": 7,\n" + - " \"six\": {\"content\": 6},\n" + - " \"three\": [\n" + - " 3,\n" + - " \"III\",\n" + - " \"T H R E E\"\n" + - " ],\n" + - " \"two\": \" \\\"2\\\" \"\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"xml\": {\n \"content\": [\n \"First \\t\",\n \"This is \\\"content\\\".\",\n \"JSON does not preserve the sequencing of elements and contents.\",\n \"Content text is an implied structure in XML.\",\n \"JSON does not have implied structure:\",\n \"everything is explicit.\",\n \"CDATA blocks!\"\n ],\n \"two\": \" \\\"2\\\" \",\n \"seven\": 7,\n \"five\": [\n \"\",\n \"\"\n ],\n \"one\": 1,\n \"three\": [\n 3,\n \"III\",\n \"T H R E E\"\n ],\n \"four\": \"\",\n \"six\": {\"content\": 6}\n}}", + jsonobject.toString(2)); assertEquals("First \t<content>\n" + "This is "content".\n" + "JSON does not preserve the sequencing of elements and contents.\n" + @@ -631,282 +316,46 @@ public class Test extends TestCase { XML.toString(jsonobject)); ja = JSONML.toJSONArray(string); - assertEquals("[\n" + - " \"xml\",\n" + - " {\n" + - " \"one\": 1,\n" + - " \"two\": \" \\\"2\\\" \"\n" + - " },\n" + - " [\"five\"],\n" + - " \"First \\t\",\n" + - " [\"five\"],\n" + - " \"This is \\\"content\\\".\",\n" + - " [\n" + - " \"three\",\n" + - " 3\n" + - " ],\n" + - " \"JSON does not preserve the sequencing of elements and contents.\",\n" + - " [\n" + - " \"three\",\n" + - " \"III\"\n" + - " ],\n" + - " [\n" + - " \"three\",\n" + - " \"T H R E E\"\n" + - " ],\n" + - " [\"four\"],\n" + - " \"Content text is an implied structure in XML.\",\n" + - " [\n" + - " \"six\",\n" + - " {\"content\": 6}\n" + - " ],\n" + - " \"JSON does not have implied structure:\",\n" + - " [\n" + - " \"seven\",\n" + - " 7\n" + - " ],\n" + - " \"everything is explicit.\",\n" + - " \"CDATA blocks!\"\n" + - "]", ja.toString(4)); + assertEquals("[\n \"xml\",\n {\n \"two\": \" \\\"2\\\" \",\n \"one\": 1\n },\n [\"five\"],\n \"First \\t\",\n [\"five\"],\n \"This is \\\"content\\\".\",\n [\n \"three\",\n 3\n ],\n \"JSON does not preserve the sequencing of elements and contents.\",\n [\n \"three\",\n \"III\"\n ],\n [\n \"three\",\n \"T H R E E\"\n ],\n [\"four\"],\n \"Content text is an implied structure in XML.\",\n [\n \"six\",\n {\"content\": 6}\n ],\n \"JSON does not have implied structure:\",\n [\n \"seven\",\n 7\n ],\n \"everything is explicit.\",\n \"CDATA blocks!\"\n]", + ja.toString(4)); assertEquals("First \t<content>This is "content".JSON does not preserve the sequencing of elements and contents.IIIT H R E EContent text is an implied structure in XML.JSON does not have implied structure:everything is explicit.CDATA blocks<are><supported>!", JSONML.toString(ja)); string = "unodostrestruequatrocinqoseis"; ja = JSONML.toJSONArray(string); - assertEquals("[\n" + - " \"xml\",\n" + - " {\"do\": \"0\"},\n" + - " \"uno\",\n" + - " [\n" + - " \"a\",\n" + - " {\n" + - " \"mi\": 2,\n" + - " \"re\": 1\n" + - " },\n" + - " \"dos\",\n" + - " [\n" + - " \"b\",\n" + - " {\"fa\": 3}\n" + - " ],\n" + - " \"tres\",\n" + - " [\n" + - " \"c\",\n" + - " true\n" + - " ],\n" + - " \"quatro\"\n" + - " ],\n" + - " \"cinqo\",\n" + - " [\n" + - " \"d\",\n" + - " \"seis\",\n" + - " [\"e\"]\n" + - " ]\n" + - "]", ja.toString(4)); + assertEquals("[\n \"xml\",\n {\"do\": 0},\n \"uno\",\n [\n \"a\",\n {\n \"re\": 1,\n \"mi\": 2\n },\n \"dos\",\n [\n \"b\",\n {\"fa\": 3}\n ],\n \"tres\",\n [\n \"c\",\n true\n ],\n \"quatro\"\n ],\n \"cinqo\",\n [\n \"d\",\n \"seis\",\n [\"e\"]\n ]\n]", + ja.toString(4)); assertEquals("unodostresquatrocinqoseis", JSONML.toString(ja)); string = " "; jsonobject = XML.toJSONObject(string); - assertEquals("{\"mapping\": {\n" + - " \"class\": [\n" + - " {\n" + - " \"field\": [\n" + - " {\n" + - " \"bind-xml\": {\n" + - " \"name\": \"ID\",\n" + - " \"node\": \"attribute\"\n" + - " },\n" + - " \"name\": \"ID\",\n" + - " \"type\": \"string\"\n" + - " },\n" + - " {\n" + - " \"name\": \"FirstName\",\n" + - " \"type\": \"FirstName\"\n" + - " },\n" + - " {\n" + - " \"name\": \"MI\",\n" + - " \"type\": \"MI\"\n" + - " },\n" + - " {\n" + - " \"name\": \"LastName\",\n" + - " \"type\": \"LastName\"\n" + - " }\n" + - " ],\n" + - " \"name\": \"Customer\"\n" + - " },\n" + - " {\n" + - " \"field\": {\n" + - " \"bind-xml\": {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " },\n" + - " \"name\": \"text\"\n" + - " },\n" + - " \"name\": \"FirstName\"\n" + - " },\n" + - " {\n" + - " \"field\": {\n" + - " \"bind-xml\": {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " },\n" + - " \"name\": \"text\"\n" + - " },\n" + - " \"name\": \"MI\"\n" + - " },\n" + - " {\n" + - " \"field\": {\n" + - " \"bind-xml\": {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " },\n" + - " \"name\": \"text\"\n" + - " },\n" + - " \"name\": \"LastName\"\n" + - " }\n" + - " ],\n" + - " \"empty\": \"\"\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"mapping\": {\n \"empty\": \"\",\n \"class\": [\n {\n \"field\": [\n {\n \"bind-xml\": {\n \"node\": \"attribute\",\n \"name\": \"ID\"\n },\n \"name\": \"ID\",\n \"type\": \"string\"\n },\n {\n \"name\": \"FirstName\",\n \"type\": \"FirstName\"\n },\n {\n \"name\": \"MI\",\n \"type\": \"MI\"\n },\n {\n \"name\": \"LastName\",\n \"type\": \"LastName\"\n }\n ],\n \"name\": \"Customer\"\n },\n {\n \"field\": {\n \"bind-xml\": {\n \"node\": \"text\",\n \"name\": \"text\"\n },\n \"name\": \"text\"\n },\n \"name\": \"FirstName\"\n },\n {\n \"field\": {\n \"bind-xml\": {\n \"node\": \"text\",\n \"name\": \"text\"\n },\n \"name\": \"text\"\n },\n \"name\": \"MI\"\n },\n {\n \"field\": {\n \"bind-xml\": {\n \"node\": \"text\",\n \"name\": \"text\"\n },\n \"name\": \"text\"\n },\n \"name\": \"LastName\"\n }\n ]\n}}", + jsonobject.toString(2)); assertEquals("attributeIDIDstringFirstNameFirstNameMIMILastNameLastNameCustomertexttexttextFirstNametexttexttextMItexttexttextLastName", XML.toString(jsonobject)); ja = JSONML.toJSONArray(string); - assertEquals("[\n" + - " \"mapping\",\n" + - " [\"empty\"],\n" + - " [\n" + - " \"class\",\n" + - " {\"name\": \"Customer\"},\n" + - " [\n" + - " \"field\",\n" + - " {\n" + - " \"name\": \"ID\",\n" + - " \"type\": \"string\"\n" + - " },\n" + - " [\n" + - " \"bind-xml\",\n" + - " {\n" + - " \"name\": \"ID\",\n" + - " \"node\": \"attribute\"\n" + - " }\n" + - " ]\n" + - " ],\n" + - " [\n" + - " \"field\",\n" + - " {\n" + - " \"name\": \"FirstName\",\n" + - " \"type\": \"FirstName\"\n" + - " }\n" + - " ],\n" + - " [\n" + - " \"field\",\n" + - " {\n" + - " \"name\": \"MI\",\n" + - " \"type\": \"MI\"\n" + - " }\n" + - " ],\n" + - " [\n" + - " \"field\",\n" + - " {\n" + - " \"name\": \"LastName\",\n" + - " \"type\": \"LastName\"\n" + - " }\n" + - " ]\n" + - " ],\n" + - " [\n" + - " \"class\",\n" + - " {\"name\": \"FirstName\"},\n" + - " [\n" + - " \"field\",\n" + - " {\"name\": \"text\"},\n" + - " [\n" + - " \"bind-xml\",\n" + - " {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " }\n" + - " ]\n" + - " ]\n" + - " ],\n" + - " [\n" + - " \"class\",\n" + - " {\"name\": \"MI\"},\n" + - " [\n" + - " \"field\",\n" + - " {\"name\": \"text\"},\n" + - " [\n" + - " \"bind-xml\",\n" + - " {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " }\n" + - " ]\n" + - " ]\n" + - " ],\n" + - " [\n" + - " \"class\",\n" + - " {\"name\": \"LastName\"},\n" + - " [\n" + - " \"field\",\n" + - " {\"name\": \"text\"},\n" + - " [\n" + - " \"bind-xml\",\n" + - " {\n" + - " \"name\": \"text\",\n" + - " \"node\": \"text\"\n" + - " }\n" + - " ]\n" + - " ]\n" + - " ]\n" + - "]", ja.toString(4)); + assertEquals("[\n \"mapping\",\n [\"empty\"],\n [\n \"class\",\n {\"name\": \"Customer\"},\n [\n \"field\",\n {\n \"name\": \"ID\",\n \"type\": \"string\"\n },\n [\n \"bind-xml\",\n {\n \"node\": \"attribute\",\n \"name\": \"ID\"\n }\n ]\n ],\n [\n \"field\",\n {\n \"name\": \"FirstName\",\n \"type\": \"FirstName\"\n }\n ],\n [\n \"field\",\n {\n \"name\": \"MI\",\n \"type\": \"MI\"\n }\n ],\n [\n \"field\",\n {\n \"name\": \"LastName\",\n \"type\": \"LastName\"\n }\n ]\n ],\n [\n \"class\",\n {\"name\": \"FirstName\"},\n [\n \"field\",\n {\"name\": \"text\"},\n [\n \"bind-xml\",\n {\n \"node\": \"text\",\n \"name\": \"text\"\n }\n ]\n ]\n ],\n [\n \"class\",\n {\"name\": \"MI\"},\n [\n \"field\",\n {\"name\": \"text\"},\n [\n \"bind-xml\",\n {\n \"node\": \"text\",\n \"name\": \"text\"\n }\n ]\n ]\n ],\n [\n \"class\",\n {\"name\": \"LastName\"},\n [\n \"field\",\n {\"name\": \"text\"},\n [\n \"bind-xml\",\n {\n \"node\": \"text\",\n \"name\": \"text\"\n }\n ]\n ]\n ]\n]", + ja.toString(4)); assertEquals("", JSONML.toString(ja)); jsonobject = XML.toJSONObject("Sample BookThis is chapter 1. It is not very long or interesting.This is chapter 2. Although it is longer than chapter 1, it is not any more interesting."); - assertEquals("{\"Book\": {\n" + - " \"Author\": \"Anonymous\",\n" + - " \"Chapter\": [\n" + - " {\n" + - " \"content\": \"This is chapter 1. It is not very long or interesting.\",\n" + - " \"id\": 1\n" + - " },\n" + - " {\n" + - " \"content\": \"This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.\",\n" + - " \"id\": 2\n" + - " }\n" + - " ],\n" + - " \"Title\": \"Sample Book\"\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"Book\": {\n \"Chapter\": [\n {\n \"content\": \"This is chapter 1. It is not very long or interesting.\",\n \"id\": 1\n },\n {\n \"content\": \"This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.\",\n \"id\": 2\n }\n ],\n \"Author\": \"Anonymous\",\n \"Title\": \"Sample Book\"\n}}", + jsonobject.toString(2)); assertEquals("This is chapter 1. It is not very long or interesting.1This is chapter 2. Although it is longer than chapter 1, it is not any more interesting.2AnonymousSample Book", XML.toString(jsonobject)); jsonobject = XML.toJSONObject(""); - assertEquals("{\"bCard\": {\"bCard\": [\n" + - " {\n" + - " \"company\": \"MCI\",\n" + - " \"email\": \"khare@mci.net\",\n" + - " \"firstname\": \"Rohit\",\n" + - " \"homepage\": \"http://pest.w3.org/\",\n" + - " \"lastname\": \"Khare\"\n" + - " },\n" + - " {\n" + - " \"company\": \"Caltech Infospheres Project\",\n" + - " \"email\": \"adam@cs.caltech.edu\",\n" + - " \"firstname\": \"Adam\",\n" + - " \"homepage\": \"http://www.cs.caltech.edu/~adam/\",\n" + - " \"lastname\": \"Rifkin\"\n" + - " }\n" + - "]}}", jsonobject.toString(2)); + assertEquals("{\"bCard\": {\"bCard\": [\n {\n \"email\": \"khare@mci.net\",\n \"company\": \"MCI\",\n \"lastname\": \"Khare\",\n \"firstname\": \"Rohit\",\n \"homepage\": \"http://pest.w3.org/\"\n },\n {\n \"email\": \"adam@cs.caltech.edu\",\n \"company\": \"Caltech Infospheres Project\",\n \"lastname\": \"Rifkin\",\n \"firstname\": \"Adam\",\n \"homepage\": \"http://www.cs.caltech.edu/~adam/\"\n }\n]}}", + jsonobject.toString(2)); assertEquals("khare@mci.netMCIKhareRohithttp://pest.w3.org/adam@cs.caltech.eduCaltech Infospheres ProjectRifkinAdamhttp://www.cs.caltech.edu/~adam/", XML.toString(jsonobject)); jsonobject = XML.toJSONObject(" Fred fbs0001 Scerbo B "); - assertEquals("{\"customer\": {\n" + - " \"ID\": \"fbs0001\",\n" + - " \"MI\": {\"text\": \"B\"},\n" + - " \"firstName\": {\"text\": \"Fred\"},\n" + - " \"lastName\": {\"text\": \"Scerbo\"}\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"customer\": {\n \"lastName\": {\"text\": \"Scerbo\"},\n \"MI\": {\"text\": \"B\"},\n \"ID\": \"fbs0001\",\n \"firstName\": {\"text\": \"Fred\"}\n}}", + jsonobject.toString(2)); assertEquals("ScerboBfbs0001Fred", XML.toString(jsonobject)); @@ -916,37 +365,15 @@ public class Test extends TestCase { assertEquals("Special Collections LibraryABC UniversityMain Library, 40 Circle DriveOurtown, Pennsylvania17654 USARepository Addresssimple", XML.toString(jsonobject)); - jsonobject = XML.toJSONObject("deluxe&"toot"&toot;Aeksbonusbonus2"); - assertEquals("{\"test\": {\n" + - " \"blip\": {\n" + - " \"content\": \"&\\\"toot\\\"&toot;A\",\n" + - " \"sweet\": true\n" + - " },\n" + - " \"content\": \"deluxe\",\n" + - " \"empty\": \"\",\n" + - " \"intertag\": \"\",\n" + - " \"status\": \"ok\",\n" + - " \"w\": [\n" + - " \"bonus\",\n" + - " \"bonus2\"\n" + - " ],\n" + - " \"x\": \"eks\"\n" + - "}}", jsonobject.toString(2)); - assertEquals("bonusbonus2deluxeok&"toot"&toot;&#x41;trueeks", + jsonobject = XML.toJSONObject("deluxe&"toot"&toot;Aeksbonusbonus2"); + assertEquals("{\"test\": {\n \"w\": [\n \"bonus\",\n \"bonus2\"\n ],\n \"content\": \"deluxe\",\n \"intertag\": \"\",\n \"status\": \"ok\",\n \"blip\": {\n \"content\": \"&\\\"toot\\\"&toot;A\",\n \"sweet\": true\n },\n \"empty\": \"\",\n \"zero\": 0,\n \"x\": \"eks\"\n}}", + jsonobject.toString(2)); + assertEquals("bonusbonus2deluxeok&"toot"&toot;&#x41;true0eks", XML.toString(jsonobject)); jsonobject = HTTP.toJSONObject("GET / HTTP/1.0\nAccept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\nAccept-Language: en-us\nUser-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\nHost: www.nokko.com\nConnection: keep-alive\nAccept-encoding: gzip, deflate\n"); - assertEquals("{\n" + - " \"Accept\": \"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\",\n" + - " \"Accept-Language\": \"en-us\",\n" + - " \"Accept-encoding\": \"gzip, deflate\",\n" + - " \"Connection\": \"keep-alive\",\n" + - " \"HTTP-Version\": \"HTTP/1.0\",\n" + - " \"Host\": \"www.nokko.com\",\n" + - " \"Method\": \"GET\",\n" + - " \"Request-URI\": \"/\",\n" + - " \"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\"\n" + - "}", jsonobject.toString(2)); + assertEquals("{\n \"Accept-Language\": \"en-us\",\n \"Request-URI\": \"/\",\n \"Host\": \"www.nokko.com\",\n \"Method\": \"GET\",\n \"Accept-encoding\": \"gzip, deflate\",\n \"User-Agent\": \"Mozilla/4.0 (compatible; MSIE 5.5; Windows 98; Win 9x 4.90; T312461; Q312461)\",\n \"HTTP-Version\": \"HTTP/1.0\",\n \"Connection\": \"keep-alive\",\n \"Accept\": \"image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-powerpoint, application/vnd.ms-excel, application/msword, */*\"\n}", + jsonobject.toString(2)); assertEquals("GET \"/\" HTTP/1.0\r\n" + "Accept-Language: en-us\r\n" + "Host: www.nokko.com\r\n" + @@ -957,17 +384,8 @@ public class Test extends TestCase { HTTP.toString(jsonobject)); jsonobject = HTTP.toJSONObject("HTTP/1.1 200 Oki Doki\nDate: Sun, 26 May 2002 17:38:52 GMT\nServer: Apache/1.3.23 (Unix) mod_perl/1.26\nKeep-Alive: timeout=15, max=100\nConnection: Keep-Alive\nTransfer-Encoding: chunked\nContent-Type: text/html\n"); - assertEquals("{\n" + - " \"Connection\": \"Keep-Alive\",\n" + - " \"Content-Type\": \"text/html\",\n" + - " \"Date\": \"Sun, 26 May 2002 17:38:52 GMT\",\n" + - " \"HTTP-Version\": \"HTTP/1.1\",\n" + - " \"Keep-Alive\": \"timeout=15, max=100\",\n" + - " \"Reason-Phrase\": \"Oki Doki\",\n" + - " \"Server\": \"Apache/1.3.23 (Unix) mod_perl/1.26\",\n" + - " \"Status-Code\": \"200\",\n" + - " \"Transfer-Encoding\": \"chunked\"\n" + - "}", jsonobject.toString(2)); + assertEquals("{\n \"Reason-Phrase\": \"Oki Doki\",\n \"Status-Code\": \"200\",\n \"Transfer-Encoding\": \"chunked\",\n \"Date\": \"Sun, 26 May 2002 17:38:52 GMT\",\n \"Keep-Alive\": \"timeout=15, max=100\",\n \"HTTP-Version\": \"HTTP/1.1\",\n \"Content-Type\": \"text/html\",\n \"Connection\": \"Keep-Alive\",\n \"Server\": \"Apache/1.3.23 (Unix) mod_perl/1.26\"\n}", + jsonobject.toString(2)); assertEquals("HTTP/1.1 200 Oki Doki\r\n" + "Transfer-Encoding: chunked\r\n" + "Date: Sun, 26 May 2002 17:38:52 GMT\r\n" + @@ -978,14 +396,8 @@ public class Test extends TestCase { HTTP.toString(jsonobject)); jsonobject = new JSONObject("{nix: null, nux: false, null: 'null', 'Request-URI': '/', Method: 'GET', 'HTTP-Version': 'HTTP/1.0'}"); - assertEquals("{\n" + - " \"HTTP-Version\": \"HTTP/1.0\",\n" + - " \"Method\": \"GET\",\n" + - " \"Request-URI\": \"/\",\n" + - " \"nix\": null,\n" + - " \"null\": \"null\",\n" + - " \"nux\": false\n" + - "}", jsonobject.toString(2)); + assertEquals("{\n \"Request-URI\": \"/\",\n \"nix\": null,\n \"nux\": false,\n \"Method\": \"GET\",\n \"HTTP-Version\": \"HTTP/1.0\",\n \"null\": \"null\"\n}", + jsonobject.toString(2)); assertTrue(jsonobject.isNull("nix")); assertTrue(jsonobject.has("nix")); assertEquals("/nullfalseGETHTTP/1.0null", @@ -1014,74 +426,21 @@ public class Test extends TestCase { "" + ""); - assertEquals("{\"SOAP-ENV:Envelope\": {\n" + - " \"SOAP-ENV:Body\": {\"ns1:doGoogleSearch\": {\n" + - " \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\",\n" + - " \"filter\": {\n" + - " \"content\": true,\n" + - " \"xsi:type\": \"xsd:boolean\"\n" + - " },\n" + - " \"ie\": {\n" + - " \"content\": \"latin1\",\n" + - " \"xsi:type\": \"xsd:string\"\n" + - " },\n" + - " \"key\": {\n" + - " \"content\": \"GOOGLEKEY\",\n" + - " \"xsi:type\": \"xsd:string\"\n" + - " },\n" + - " \"lr\": {\"xsi:type\": \"xsd:string\"},\n" + - " \"maxResults\": {\n" + - " \"content\": 10,\n" + - " \"xsi:type\": \"xsd:int\"\n" + - " },\n" + - " \"oe\": {\n" + - " \"content\": \"latin1\",\n" + - " \"xsi:type\": \"xsd:string\"\n" + - " },\n" + - " \"q\": {\n" + - " \"content\": \"'+search+'\",\n" + - " \"xsi:type\": \"xsd:string\"\n" + - " },\n" + - " \"restrict\": {\"xsi:type\": \"xsd:string\"},\n" + - " \"safeSearch\": {\n" + - " \"content\": false,\n" + - " \"xsi:type\": \"xsd:boolean\"\n" + - " },\n" + - " \"start\": {\n" + - " \"content\": \"0\",\n" + - " \"xsi:type\": \"xsd:int\"\n" + - " },\n" + - " \"xmlns:ns1\": \"urn:GoogleSearch\"\n" + - " }},\n" + - " \"xmlns:SOAP-ENV\": \"http://schemas.xmlsoap.org/soap/envelope/\",\n" + - " \"xmlns:xsd\": \"http://www.w3.org/1999/XMLSchema\",\n" + - " \"xmlns:xsi\": \"http://www.w3.org/1999/XMLSchema-instance\"\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"SOAP-ENV:Envelope\": {\n \"SOAP-ENV:Body\": {\"ns1:doGoogleSearch\": {\n \"oe\": {\n \"content\": \"latin1\",\n \"xsi:type\": \"xsd:string\"\n },\n \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\",\n \"lr\": {\"xsi:type\": \"xsd:string\"},\n \"start\": {\n \"content\": 0,\n \"xsi:type\": \"xsd:int\"\n },\n \"q\": {\n \"content\": \"'+search+'\",\n \"xsi:type\": \"xsd:string\"\n },\n \"ie\": {\n \"content\": \"latin1\",\n \"xsi:type\": \"xsd:string\"\n },\n \"safeSearch\": {\n \"content\": false,\n \"xsi:type\": \"xsd:boolean\"\n },\n \"xmlns:ns1\": \"urn:GoogleSearch\",\n \"restrict\": {\"xsi:type\": \"xsd:string\"},\n \"filter\": {\n \"content\": true,\n \"xsi:type\": \"xsd:boolean\"\n },\n \"maxResults\": {\n \"content\": 10,\n \"xsi:type\": \"xsd:int\"\n },\n \"key\": {\n \"content\": \"GOOGLEKEY\",\n \"xsi:type\": \"xsd:string\"\n }\n }},\n \"xmlns:xsd\": \"http://www.w3.org/1999/XMLSchema\",\n \"xmlns:xsi\": \"http://www.w3.org/1999/XMLSchema-instance\",\n \"xmlns:SOAP-ENV\": \"http://schemas.xmlsoap.org/soap/envelope/\"\n}}", + jsonobject.toString(2)); assertEquals("latin1xsd:stringhttp://schemas.xmlsoap.org/soap/encoding/xsd:string0xsd:int'+search+'xsd:stringlatin1xsd:stringfalsexsd:booleanurn:GoogleSearchxsd:stringtruexsd:boolean10xsd:intGOOGLEKEYxsd:stringhttp://www.w3.org/1999/XMLSchemahttp://www.w3.org/1999/XMLSchema-instancehttp://schemas.xmlsoap.org/soap/envelope/", XML.toString(jsonobject)); jsonobject = new JSONObject("{Envelope: {Body: {\"ns1:doGoogleSearch\": {oe: \"latin1\", filter: true, q: \"'+search+'\", key: \"GOOGLEKEY\", maxResults: 10, \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\", start: 0, ie: \"latin1\", safeSearch:false, \"xmlns:ns1\": \"urn:GoogleSearch\"}}}}"); - assertEquals("{\"Envelope\": {\"Body\": {\"ns1:doGoogleSearch\": {\n" + - " \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\",\n" + - " \"filter\": true,\n" + - " \"ie\": \"latin1\",\n" + - " \"key\": \"GOOGLEKEY\",\n" + - " \"maxResults\": 10,\n" + - " \"oe\": \"latin1\",\n" + - " \"q\": \"'+search+'\",\n" + - " \"safeSearch\": false,\n" + - " \"start\": 0,\n" + - " \"xmlns:ns1\": \"urn:GoogleSearch\"\n" + - "}}}}", jsonobject.toString(2)); + assertEquals("{\"Envelope\": {\"Body\": {\"ns1:doGoogleSearch\": {\n \"oe\": \"latin1\",\n \"SOAP-ENV:encodingStyle\": \"http://schemas.xmlsoap.org/soap/encoding/\",\n \"start\": 0,\n \"q\": \"'+search+'\",\n \"ie\": \"latin1\",\n \"safeSearch\": false,\n \"xmlns:ns1\": \"urn:GoogleSearch\",\n \"maxResults\": 10,\n \"key\": \"GOOGLEKEY\",\n \"filter\": true\n}}}}", + jsonobject.toString(2)); assertEquals("latin1http://schemas.xmlsoap.org/soap/encoding/0'+search+'latin1falseurn:GoogleSearch10GOOGLEKEYtrue", XML.toString(jsonobject)); jsonobject = CookieList.toJSONObject(" f%oo = b+l=ah ; o;n%40e = t.wo "); - assertEquals("{\n" + - " \"f%oo\": \"b l=ah\",\n" + - " \"o;n@e\": \"t.wo\"\n" + - "}", jsonobject.toString(2)); + assertEquals("{\n \"o;n@e\": \"t.wo\",\n \"f%oo\": \"b l=ah\"\n}", + jsonobject.toString(2)); assertEquals("o%3bn@e=t.wo;f%25oo=b l%3dah", CookieList.toString(jsonobject)); @@ -1117,31 +476,11 @@ public class Test extends TestCase { "3,2,1\n" + "It works.,\"It is good,\",\n", string); - assertEquals("[\n" + - " {\n" + - " \"\\\"Strip\\\"Quotes\": \"2\",\n" + - " \"Comma delimited list test\": \"1\",\n" + - " \"quote, comma\": \"3\"\n" + - " },\n" + - " {\n" + - " \"\\\"Strip\\\"Quotes\": \"It is \\\"good,\\\"\",\n" + - " \"Comma delimited list test\": \"\",\n" + - " \"quote, comma\": \"It works.\"\n" + - " }\n" + - "]", jsonarray.toString(4)); + assertEquals("[\n {\n \"quote, comma\": \"3\",\n \"\\\"Strip\\\"Quotes\": \"2\",\n \"Comma delimited list test\": \"1\"\n },\n {\n \"quote, comma\": \"It works.\",\n \"\\\"Strip\\\"Quotes\": \"It is \\\"good,\\\"\",\n \"Comma delimited list test\": \"\"\n }\n]", + jsonarray.toString(1)); jsonarray = CDL.toJSONArray(string); - assertEquals("[\n" + - " {\n" + - " \"Comma delimited list test\": \"1\",\n" + - " \"StripQuotes\": \"2\",\n" + - " \"quote, comma\": \"3\"\n" + - " },\n" + - " {\n" + - " \"Comma delimited list test\": \"\",\n" + - " \"StripQuotes\": \"It is good,\",\n" + - " \"quote, comma\": \"It works.\"\n" + - " }\n" + - "]", jsonarray.toString(4)); + assertEquals("[\n {\n \"quote, comma\": \"3\",\n \"StripQuotes\": \"2\",\n \"Comma delimited list test\": \"1\"\n },\n {\n \"quote, comma\": \"It works.\",\n \"StripQuotes\": \"It is good,\",\n \"Comma delimited list test\": \"\"\n }\n]", + jsonarray.toString(1)); jsonarray = new JSONArray(" [\"\", next is an implied null , , ok,] "); assertEquals("[\"\",\"next is an implied null\",null,\"ok\"]", @@ -1150,52 +489,19 @@ public class Test extends TestCase { XML.toString(jsonarray)); jsonobject = new JSONObject("{ fun => with non-standard forms ; forgiving => This package can be used to parse formats that are similar to but not stricting conforming to JSON; why=To make it easier to migrate existing data to JSON,one = [[1.00]]; uno=[[{1=>1}]];'+':+6e66 ;pluses=+++;empty = '' , 'double':0.666,true: TRUE, false: FALSE, null=NULL;[true] = [[!,@;*]]; string=> o. k. ; \r oct=0666; hex=0x666; dec=666; o=0999; noh=0x0x}"); - assertEquals("{\n" + - " \"+\": 6.0E66,\n" + - " \"[true]\": [[\n" + - " \"!\",\n" + - " \"@\",\n" + - " \"*\"\n" + - " ]],\n" + - " \"dec\": 666,\n" + - " \"double\": 0.666,\n" + - " \"empty\": \"\",\n" + - " \"false\": false,\n" + - " \"forgiving\": \"This package can be used to parse formats that are similar to but not stricting conforming to JSON\",\n" + - " \"fun\": \"with non-standard forms\",\n" + - " \"hex\": 1638,\n" + - " \"noh\": \"0x0x\",\n" + - " \"null\": null,\n" + - " \"o\": 999,\n" + - " \"oct\": 666,\n" + - " \"one\": [[1]],\n" + - " \"pluses\": \"+++\",\n" + - " \"string\": \"o. k.\",\n" + - " \"true\": true,\n" + - " \"uno\": [[{\"1\": 1}]],\n" + - " \"why\": \"To make it easier to migrate existing data to JSON\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"noh\": \"0x0x\",\n \"one\": [[1]],\n \"o\": 999,\n \"+\": 6.0E66,\n \"true\": true,\n \"forgiving\": \"This package can be used to parse formats that are similar to but not stricting conforming to JSON\",\n \"fun\": \"with non-standard forms\",\n \"double\": 0.666,\n \"uno\": [[{\"1\": 1}]],\n \"dec\": 666,\n \"oct\": 666,\n \"hex\": 1638,\n \"string\": \"o. k.\",\n \"empty\": \"\",\n \"false\": false,\n \"[true]\": [[\n \"!\",\n \"@\",\n \"*\"\n ]],\n \"pluses\": \"+++\",\n \"why\": \"To make it easier to migrate existing data to JSON\",\n \"null\": null\n}", jsonobject.toString(1)); assertTrue(jsonobject.getBoolean("true")); assertFalse(jsonobject.getBoolean("false")); jsonobject = new JSONObject(jsonobject, new String[]{"dec", "oct", "hex", "missing"}); - assertEquals("{\n" + - " \"dec\": 666,\n" + - " \"hex\": 1638,\n" + - " \"oct\": 666\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"oct\": 666,\n \"dec\": 666,\n \"hex\": 1638\n}", jsonobject.toString(1)); assertEquals("[[\"\",\"next is an implied null\",null,\"ok\"],{\"oct\":666,\"dec\":666,\"hex\":1638}]", new JSONStringer().array().value(jsonarray).value(jsonobject).endArray().toString()); jsonobject = new JSONObject("{string: \"98.6\", long: 2147483648, int: 2147483647, longer: 9223372036854775807, double: 9223372036854775808}"); - assertEquals("{\n" + - " \"double\": \"9223372036854775808\",\n" + - " \"int\": 2147483647,\n" + - " \"long\": 2147483648,\n" + - " \"longer\": 9223372036854775807,\n" + - " \"string\": \"98.6\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"int\": 2147483647,\n \"string\": \"98.6\",\n \"longer\": 9223372036854775807,\n \"double\": \"9223372036854775808\",\n \"long\": 2147483648\n}", + jsonobject.toString(1)); // getInt assertEquals(2147483647, jsonobject.getInt("int")); @@ -1235,22 +541,12 @@ public class Test extends TestCase { assertEquals(98.6, jsonobject.getDouble("string"), eps); jsonobject.put("good sized", 9223372036854775807L); - assertEquals("{\n" + - " \"double\": \"9223372036854775808\",\n" + - " \"good sized\": 9223372036854775807,\n" + - " \"int\": 2147483647,\n" + - " \"long\": 2147483648,\n" + - " \"longer\": 9223372036854775807,\n" + - " \"string\": \"98.6\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\n \"int\": 2147483647,\n \"string\": \"98.6\",\n \"longer\": 9223372036854775807,\n \"good sized\": 9223372036854775807,\n \"double\": \"9223372036854775808\",\n \"long\": 2147483648\n}", + jsonobject.toString(1)); jsonarray = new JSONArray("[2147483647, 2147483648, 9223372036854775807, 9223372036854775808]"); - assertEquals("[\n" + - " 2147483647,\n" + - " 2147483648,\n" + - " 9223372036854775807,\n" + - " \"9223372036854775808\"\n" + - "]", jsonarray.toString(4)); + assertEquals("[\n 2147483647,\n 2147483648,\n 9223372036854775807,\n \"9223372036854775808\"\n]", + jsonarray.toString(1)); List expectedKeys = new ArrayList(6); expectedKeys.add("int"); @@ -1304,17 +600,7 @@ public class Test extends TestCase { string = "Content of the first chapterContent of the second chapter Content of the first subchapter Content of the second subchapterThird Chapter"; jsonobject = XML.toJSONObject(string); - assertEquals("{\"book\": {\"chapter\": [\n" + - " \"Content of the first chapter\",\n" + - " {\n" + - " \"chapter\": [\n" + - " \"Content of the first subchapter\",\n" + - " \"Content of the second subchapter\"\n" + - " ],\n" + - " \"content\": \"Content of the second chapter\"\n" + - " },\n" + - " \"Third Chapter\"\n" + - "]}}", jsonobject.toString(4)); + assertEquals("{\"book\": {\"chapter\": [\n \"Content of the first chapter\",\n {\n \"content\": \"Content of the second chapter\",\n \"chapter\": [\n \"Content of the first subchapter\",\n \"Content of the second subchapter\"\n ]\n },\n \"Third Chapter\"\n]}}", jsonobject.toString(1)); assertEquals("Content of the first chapterContent of the second chapterContent of the first subchapterContent of the second subchapterThird Chapter", XML.toString(jsonobject)); @@ -1361,50 +647,12 @@ public class Test extends TestCase { jsonobject.put("array", jsonarray); jsonarray.put(map); jsonarray.put(collection); - assertEquals("{\n" + - " \"array\": [\n" + - " {},\n" + - " []\n" + - " ],\n" + - " \"collection\": [],\n" + - " \"map\": {},\n" + - " \"stooge\": [\n" + - " \"Joe DeRita\",\n" + - " \"Shemp\"\n" + - " ],\n" + - " \"stoogearray\": [[\n" + - " \"Curly\",\n" + - " \"Larry\",\n" + - " \"Moe\"\n" + - " ]],\n" + - " \"stooges\": [\n" + - " \"Curly\",\n" + - " \"Larry\",\n" + - " \"Moe\"\n" + - " ]\n" + - "}", jsonobject.toString(4)); + assertEquals("{\"stooge\":[\"Joe DeRita\",\"Shemp\"],\"map\":{},\"stooges\":[\"Curly\",\"Larry\",\"Moe\"],\"collection\":[],\"stoogearray\":[[\"Curly\",\"Larry\",\"Moe\"]],\"array\":[{},[]]}", jsonobject.toString()); string = "{plist=Apple; AnimalSmells = { pig = piggish; lamb = lambish; worm = wormy; }; AnimalSounds = { pig = oink; lamb = baa; worm = baa; Lisa = \"Why is the worm talking like a lamb?\" } ; AnimalColors = { pig = pink; lamb = black; worm = pink; } } "; jsonobject = new JSONObject(string); - assertEquals("{\n" + - " \"AnimalColors\": {\n" + - " \"lamb\": \"black\",\n" + - " \"pig\": \"pink\",\n" + - " \"worm\": \"pink\"\n" + - " },\n" + - " \"AnimalSmells\": {\n" + - " \"lamb\": \"lambish\",\n" + - " \"pig\": \"piggish\",\n" + - " \"worm\": \"wormy\"\n" + - " },\n" + - " \"AnimalSounds\": {\n" + - " \"Lisa\": \"Why is the worm talking like a lamb?\",\n" + - " \"lamb\": \"baa\",\n" + - " \"pig\": \"oink\",\n" + - " \"worm\": \"baa\"\n" + - " },\n" + - " \"plist\": \"Apple\"\n" + - "}", jsonobject.toString(4)); + assertEquals("{\"AnimalColors\":{\"worm\":\"pink\",\"lamb\":\"black\",\"pig\":\"pink\"},\"plist\":\"Apple\",\"AnimalSounds\":{\"worm\":\"baa\",\"Lisa\":\"Why is the worm talking like a lamb?\",\"lamb\":\"baa\",\"pig\":\"oink\"},\"AnimalSmells\":{\"worm\":\"wormy\",\"lamb\":\"lambish\",\"pig\":\"piggish\"}}", + jsonobject.toString()); string = " [\"San Francisco\", \"New York\", \"Seoul\", \"London\", \"Seattle\", \"Shanghai\"]"; jsonarray = new JSONArray(string); @@ -1413,23 +661,8 @@ public class Test extends TestCase { string = "The content of b and The content of cdoremi"; jsonobject = XML.toJSONObject(string); - assertEquals("{\"a\": {\n" + - " \"b\": \"The content of b\",\n" + - " \"c\": {\n" + - " \"content\": \"The content of c\",\n" + - " \"san\": 3\n" + - " },\n" + - " \"content\": \"and\",\n" + - " \"d\": [\n" + - " \"do\",\n" + - " \"re\",\n" + - " \"mi\"\n" + - " ],\n" + - " \"e\": \"\",\n" + - " \"f\": \"\",\n" + - " \"ichi\": 1,\n" + - " \"ni\": 2\n" + - "}}", jsonobject.toString(2)); + assertEquals("{\"a\":{\"f\":\"\",\"content\":\"and\",\"d\":[\"do\",\"re\",\"mi\"],\"ichi\":1,\"e\":\"\",\"b\":\"The content of b\",\"c\":{\"content\":\"The content of c\",\"san\":3},\"ni\":2}}", + jsonobject.toString()); assertEquals("anddoremi1The content of bThe content of c32", XML.toString(jsonobject)); ja = JSONML.toJSONArray(string);