Test case passed with tags with multiple entries set forceList

This commit is contained in:
Zach 2021-11-19 21:22:38 -06:00
parent e638955034
commit 5dd78bc0b9
2 changed files with 94 additions and 5 deletions

View File

@ -380,6 +380,16 @@ public class XML {
if (x.nextToken() != GT) {
throw x.syntaxError("Misshaped tag");
}
if (config.getForceList().contains(tagName)) {
// Force the value to be an array
if (nilAttributeFound) {
context.append(tagName, JSONObject.NULL);
} else if (jsonObject.length() > 0) {
context.append(tagName, jsonObject);
} else {
context.put(tagName, new JSONArray());
}
} else {
if (nilAttributeFound) {
context.accumulate(tagName, JSONObject.NULL);
} else if (jsonObject.length() > 0) {
@ -387,6 +397,7 @@ public class XML {
} else {
context.accumulate(tagName, "");
}
}
return false;
} else if (token == GT) {
@ -414,6 +425,7 @@ public class XML {
// Nested element
if (parse(x, jsonObject, tagName, config)) {
if (config.getForceList().contains(tagName)) {
// Force the value to be an array
if (jsonObject.length() == 0) {
context.put(tagName, new JSONArray());
} else if (jsonObject.length() == 1

View File

@ -976,6 +976,45 @@ public class XMLConfigurationTest {
Util.compareActualVsExpectedJsonObjects(jsonObject, expetedJsonObject);
}
@Test
public void testMultipleTagForceList() {
String xmlStr =
"<addresses>\n"+
" <address>\n"+
" <name>Sherlock Holmes</name>\n"+
" <name>John H. Watson</name>\n"+
" </address>\n"+
"</addresses>";
String expectedStr =
"{"+
"\"addresses\":["+
"{"+
"\"address\":["+
"{"+
"\"name\":["+
"\"Sherlock Holmes\","+
"\"John H. Watson\""+
"]"+
"}"+
"]"+
"}"+
"]"+
"}";
Set<String> forceList = new HashSet<String>();
forceList.add("addresses");
forceList.add("address");
forceList.add("name");
XMLParserConfiguration config =
new XMLParserConfiguration()
.withForceList(forceList);
JSONObject jsonObject = XML.toJSONObject(xmlStr, config);
JSONObject expetedJsonObject = new JSONObject(expectedStr);
Util.compareActualVsExpectedJsonObjects(jsonObject, expetedJsonObject);
}
@Test
public void testEmptyForceList() {
String xmlStr =
"<addresses></addresses>";
@ -994,6 +1033,44 @@ public class XMLConfigurationTest {
Util.compareActualVsExpectedJsonObjects(jsonObject, expetedJsonObject);
}
@Test
public void testContentForceList() {
String xmlStr =
"<addresses>Baker Street</addresses>";
String expectedStr =
"{\"addresses\":[\"Baker Street\"]}";
Set<String> forceList = new HashSet<String>();
forceList.add("addresses");
XMLParserConfiguration config =
new XMLParserConfiguration()
.withForceList(forceList);
JSONObject jsonObject = XML.toJSONObject(xmlStr, config);
JSONObject expetedJsonObject = new JSONObject(expectedStr);
Util.compareActualVsExpectedJsonObjects(jsonObject, expetedJsonObject);
}
@Test
public void testEmptyTagForceList() {
String xmlStr =
"<addresses />";
String expectedStr =
"{\"addresses\":[]}";
Set<String> forceList = new HashSet<String>();
forceList.add("addresses");
XMLParserConfiguration config =
new XMLParserConfiguration()
.withForceList(forceList);
JSONObject jsonObject = XML.toJSONObject(xmlStr, config);
JSONObject expetedJsonObject = new JSONObject(expectedStr);
Util.compareActualVsExpectedJsonObjects(jsonObject, expetedJsonObject);
}
/**
* Convenience method, given an input string and expected result,