mirror of
https://github.com/ethauvin/JSON-java.git
synced 2025-06-17 16:00:51 -07:00
* Update link in the README to the main JSON-Java repo
* Cleans up some warnings * Adds new test for bug https://github.com/stleary/JSON-java/issues/332 * Adds some resource handling for string writers using pre-java1.7 support. I know StringWriters don't need a close method called, but the tests should still handle their resources properly.
This commit is contained in:
parent
f6ab6d7b27
commit
9df5d34bbe
10 changed files with 2878 additions and 2703 deletions
|
@ -711,8 +711,7 @@ public class JSONMLTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* JSON string cannot be reverted to original xml. See test result in
|
||||
* comment below.
|
||||
* JSON string cannot be reverted to original xml when type guessing is used.
|
||||
*/
|
||||
@Test
|
||||
public void testToJSONArray_reversibility() {
|
||||
|
@ -722,10 +721,11 @@ public class JSONMLTest {
|
|||
}
|
||||
|
||||
/**
|
||||
* test passes when using the new method toJsonML.
|
||||
* JSON string cannot be reverted to original xml when type guessing is used.
|
||||
* When we force all the values as string, the original text comes back.
|
||||
*/
|
||||
@Test
|
||||
public void testToJsonML() {
|
||||
public void testToJSONArray_reversibility2() {
|
||||
final String originalXml = "<root><id>01</id><id>1</id><id>00</id><id>0</id><item id=\"01\"/><title>True</title></root>";
|
||||
final String expectedJsonString = "[\"root\",[\"id\",\"01\"],[\"id\",\"1\"],[\"id\",\"00\"],[\"id\",\"0\"],[\"item\",{\"id\":\"01\"}],[\"title\",\"True\"]]";
|
||||
final JSONArray json = JSONML.toJSONArray(originalXml,true);
|
||||
|
@ -735,4 +735,71 @@ public class JSONMLTest {
|
|||
assertEquals(originalXml, reverseXml);
|
||||
}
|
||||
|
||||
/**
|
||||
* JSON can be reverted to original xml.
|
||||
*/
|
||||
@Test
|
||||
public void testToJSONArray_reversibility3() {
|
||||
final String originalXml = "<readResult><errors someAttr=\"arrtValue\"><code>400</code></errors><errors><code>402</code></errors></readResult>";
|
||||
final JSONArray jsonArray = JSONML.toJSONArray(originalXml, false);
|
||||
final String revertedXml = JSONML.toString(jsonArray);
|
||||
assertEquals(revertedXml, originalXml);
|
||||
}
|
||||
|
||||
/**
|
||||
* JSON string cannot be reverted to original xml. See test result in
|
||||
* comment below.
|
||||
*/
|
||||
@Test
|
||||
public void testToJSONObject_reversibility() {
|
||||
final String originalXml = "<readResult><errors someAttr=\"arrtValue\"><code>400</code></errors><errors><code>402</code></errors></readResult>";
|
||||
final JSONObject originalObject=JSONML.toJSONObject(originalXml,false);
|
||||
final String originalJson = originalObject.toString();
|
||||
final String xml = JSONML.toString(originalObject);
|
||||
final JSONObject revertedObject = JSONML.toJSONObject(xml, false);
|
||||
final String newJson = revertedObject.toString();
|
||||
assertTrue("JSON Objects are not similar",originalObject.similar(revertedObject));
|
||||
assertEquals("original JSON does not equal the new JSON",originalJson, newJson);
|
||||
}
|
||||
|
||||
/**
|
||||
* Test texts taken from jsonml.org. Currently our implementation FAILS this conversion but shouldn't.
|
||||
* Technically JsonML should be able to transform any valid xhtml document, but ours only supports
|
||||
* standard XML entities, not HTML entities.
|
||||
*/
|
||||
@Test
|
||||
public void testAttributeConversionReversabilityHTML() {
|
||||
final String originalXml = "<table class=\"MyTable\" style=\"background-color:yellow\"><tr><td class=\"MyTD\" style=\"border:1px solid black\">#5D28D1</td><td class=\"MyTD\" style=\"background-color:red\">Example text here</td></tr><tr><td class=\"MyTD\" style=\"border:1px solid black\">#AF44EF</td><td class=\"MyTD\" style=\"background-color:green\">127310656</td></tr><tr><td class=\"MyTD\" style=\"border:1px solid black\">#AAD034</td><td class=\"MyTD\" style=\"background-color:blue\"> <span style=\"background-color:maroon\">©</span> </td></tr></table>";
|
||||
final String expectedJsonString = "[\"table\",{\"class\" : \"MyTable\",\"style\" : \"background-color:yellow\"},[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#550758\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:red\"},\"Example text here\"]],[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#993101\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:green\"},\"127624015\"]],[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#E33D87\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:blue\"},\"\u00A0\",[\"span\",{ \"style\" : \"background-color:maroon\" },\"\u00A9\"],\"\u00A0\"]]]";
|
||||
final JSONArray json = JSONML.toJSONArray(originalXml,true);
|
||||
final String actualJsonString = json.toString();
|
||||
|
||||
final String reverseXml = JSONML.toString(json);
|
||||
assertNotEquals(originalXml, reverseXml);
|
||||
|
||||
assertNotEquals(expectedJsonString, actualJsonString);
|
||||
}
|
||||
|
||||
// this test does not pass for the following reasons:
|
||||
// 1. Our XML parser does not handle generic HTML entities, only valid XML entities. Hence
|
||||
// or other HTML specific entites would fail on reversability
|
||||
// 2. Our JSON implementation for storing the XML attributes uses the standard unordered map.
|
||||
// This means that <tag attr1="v1" attr2="v2" /> can not be reversed reliably.
|
||||
// /**
|
||||
// * Test texts taken from jsonml.org but modified to have XML entities only.
|
||||
// */
|
||||
// @Test
|
||||
// public void testAttributeConversionReversabilityXML() {
|
||||
// final String originalXml = "<table class=\"MyTable\" style=\"background-color:yellow\"><tr><td class=\"MyTD\" style=\"border:1px solid black\">#5D28D1</td><td class=\"MyTD\" style=\"background-color:red\">Example text here</td></tr><tr><td class=\"MyTD\" style=\"border:1px solid black\">#AF44EF</td><td class=\"MyTD\" style=\"background-color:green\">127310656</td></tr><tr><td class=\"MyTD\" style=\"border:1px solid black\">#AAD034</td><td class=\"MyTD\" style=\"background-color:blue\">&<span style=\"background-color:maroon\">></span><</td></tr></table>";
|
||||
// final String expectedJsonString = "[\"table\",{\"class\" : \"MyTable\",\"style\" : \"background-color:yellow\"},[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#550758\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:red\"},\"Example text here\"]],[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#993101\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:green\"},\"127624015\"]],[\"tr\",[\"td\",{\"class\" : \"MyTD\",\"style\" : \"border:1px solid black\"},\"#E33D87\"],[\"td\",{\"class\" : \"MyTD\",\"style\" : \"background-color:blue\"},\"&\",[\"span\",{ \"style\" : \"background-color:maroon\" },\">\"],\"<\"]]]";
|
||||
// final JSONArray jsonML = JSONML.toJSONArray(originalXml,true);
|
||||
// final String actualJsonString = jsonML.toString();
|
||||
//
|
||||
// final String reverseXml = JSONML.toString(jsonML);
|
||||
// // currently not equal because the hashing of the attribute objects makes the attribute
|
||||
// // order not happen the same way twice
|
||||
// assertEquals(originalXml, reverseXml);
|
||||
//
|
||||
// assertEquals(expectedJsonString, actualJsonString);
|
||||
// }
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue