Skip to content

Commit 1145863

Browse files
committed
Sync with underscore-java.
1 parent 926b580 commit 1145863

File tree

3 files changed

+84
-20
lines changed

3 files changed

+84
-20
lines changed

src/main/java/com/github/underscore/U.java

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,8 @@ public enum Mode {
140140
REMOVE_FIRST_LEVEL_XML_TO_JSON,
141141
FORCE_ADD_ROOT_JSON_TO_XML,
142142
FORCE_REMOVE_ARRAY_ATTRIBUTE_JSON_TO_XML,
143-
FORCE_REMOVE_ARRAY_BOOLEAN_NUMBER_ATTRIBUTES_JSON_TO_XML
143+
FORCE_REMOVE_ARRAY_BOOLEAN_NUMBER_ATTRIBUTES_JSON_TO_XML,
144+
WITHOUT_NAMESPACES_XML_TO_JSON
144145
}
145146

146147
public U(final Iterable<T> iterable) {
@@ -2555,6 +2556,11 @@ public static <T> T fromXmlWithoutNamespaces(final String xml) {
25552556
return (T) Xml.fromXmlWithoutNamespaces(xml);
25562557
}
25572558

2559+
public static Map<String, Object> fromXmlWithoutNamespacesMap(final String xml) {
2560+
final Object object = Xml.fromXmlWithoutNamespaces(xml);
2561+
return getStringObjectMap(object);
2562+
}
2563+
25582564
@SuppressWarnings("unchecked")
25592565
public static <T> T fromXmlWithoutAttributes(final String xml) {
25602566
return (T) Xml.fromXmlWithoutAttributes(xml);
@@ -2693,6 +2699,8 @@ public static String xmlToJson(String xml, Json.JsonStringBuilder.Step identStep
26932699
identStep);
26942700
} else if (mode == Mode.REMOVE_FIRST_LEVEL_XML_TO_JSON) {
26952701
result = Json.toJson(replaceFirstLevel((Map) object), identStep);
2702+
} else if (mode == Mode.WITHOUT_NAMESPACES_XML_TO_JSON) {
2703+
result = Json.toJson((Map) Xml.fromXmlWithoutNamespaces(xml), identStep);
26962704
} else {
26972705
result = Json.toJson((Map) object, identStep);
26982706
}
@@ -3062,12 +3070,19 @@ private static Object makeReplaceNumberAndBoolean(Object value) {
30623070
if (value instanceof List) {
30633071
List<Object> values = newArrayList();
30643072
for (Object item : (List) value) {
3065-
values.add(
3066-
item instanceof Map ? replaceNumberAndBooleanWithString((Map) item) : item);
3073+
if (item instanceof Map) {
3074+
values.add(replaceNumberAndBooleanWithString((Map) item));
3075+
} else if (item instanceof Number || item instanceof Boolean || isNull(item)) {
3076+
values.add(String.valueOf(item));
3077+
} else {
3078+
values.add(item);
3079+
}
30673080
}
30683081
result = values;
30693082
} else if (value instanceof Map) {
30703083
result = replaceNumberAndBooleanWithString((Map) value);
3084+
} else if (isNull(value)) {
3085+
result = "null";
30713086
} else {
30723087
result = value;
30733088
}

src/test/java/com/github/underscore/LodashTest.java

Lines changed: 19 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1092,21 +1092,33 @@ void forceRemoveArrayTrue() {
10921092
void forceRemoveArrayTrueBooleanAndNumber() {
10931093
assertEquals(
10941094
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
1095-
+ "<data>\n"
1096-
+ " <a>b</a>\n"
1097-
+ " <c>true</c>\n"
1098-
+ " <d>1</d>\n"
1099-
+ " <e></e>\n"
1100-
+ "</data>",
1095+
+ "<root>\n"
1096+
+ " <data>\n"
1097+
+ " <a>b</a>\n"
1098+
+ " <c>true</c>\n"
1099+
+ " <d>1</d>\n"
1100+
+ " <e></e>\n"
1101+
+ " <f>null</f>\n"
1102+
+ " </data>\n"
1103+
+ " <data2>true</data2>\n"
1104+
+ " <data2>1</data2>\n"
1105+
+ " <data2>null</data2>\n"
1106+
+ "</root>",
11011107
U.jsonToXml(
11021108
"{\n"
11031109
+ " \"data\": [\n"
11041110
+ " {\n"
11051111
+ " \"a\": \"b\",\n"
11061112
+ " \"c\": true,\n"
11071113
+ " \"d\": 1,\n"
1108-
+ " \"e\": {}\n"
1114+
+ " \"e\": {},\n"
1115+
+ " \"f\": null\n"
11091116
+ " }\n"
1117+
+ " ],\n"
1118+
+ " \"data2\": [\n"
1119+
+ " true,\n"
1120+
+ " 1,\n"
1121+
+ " null\n"
11101122
+ " ]\n"
11111123
+ "}",
11121124
U.Mode.FORCE_REMOVE_ARRAY_BOOLEAN_NUMBER_ATTRIBUTES_JSON_TO_XML));

src/test/java/com/github/underscore/StringTest.java

Lines changed: 47 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@
3232

3333
import com.github.underscore.Json.JsonStringBuilder;
3434
import com.github.underscore.Xml.XmlStringBuilder;
35-
3635
import java.io.IOException;
3736
import java.nio.file.Files;
3837
import java.nio.file.Paths;
@@ -1024,8 +1023,8 @@ void testDecodeParseErr14() {
10241023
@Test
10251024
void testXmlArray() {
10261025
XmlStringBuilder builder = new XmlStringBuilder();
1027-
Xml.XmlArray.writeXml(null, null, builder, false, Collections.<String>emptySet(), false,
1028-
ARRAY_TRUE);
1026+
Xml.XmlArray.writeXml(
1027+
null, null, builder, false, Collections.<String>emptySet(), false, ARRAY_TRUE);
10291028
assertEquals(
10301029
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\nnull\n</root>",
10311030
builder.toString());
@@ -1447,22 +1446,25 @@ void testXmlObjectArrayToString() {
14471446
XmlStringBuilder builder;
14481447

14491448
builder = new XmlStringBuilder();
1450-
Xml.XmlArray.writeXml(null, null, builder, false, Collections.emptySet(),
1451-
ARRAY_TRUE);
1449+
Xml.XmlArray.writeXml(null, null, builder, false, Collections.emptySet(), ARRAY_TRUE);
14521450
assertEquals(
14531451
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n <element null=\"true\"/>\n</root>",
14541452
builder.toString());
14551453

14561454
builder = new XmlStringBuilder();
1457-
Xml.XmlArray.writeXml(new Object[0], null, builder, false, Collections.<String>emptySet(),
1458-
ARRAY_TRUE);
1455+
Xml.XmlArray.writeXml(
1456+
new Object[0], null, builder, false, Collections.<String>emptySet(), ARRAY_TRUE);
14591457
assertEquals(
14601458
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n <element></element>\n</root>",
14611459
builder.toString());
14621460

14631461
builder = new XmlStringBuilder();
14641462
Xml.XmlArray.writeXml(
1465-
new Object[] {"Hello"}, null, builder, false, Collections.<String>emptySet(),
1463+
new Object[] {"Hello"},
1464+
null,
1465+
builder,
1466+
false,
1467+
Collections.<String>emptySet(),
14661468
ARRAY_TRUE);
14671469
assertEquals(
14681470
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<root>\n <element>Hello</element>\n</root>",
@@ -3276,6 +3278,37 @@ void fromXmlWithoutNamespaces() {
32763278
U.toJson((Map<String, Object>) U.fromXmlWithoutNamespaces(string)));
32773279
}
32783280

3281+
@SuppressWarnings("unchecked")
3282+
@Test
3283+
void fromXmlWithoutNamespacesMap() {
3284+
String string =
3285+
"<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n"
3286+
+ "<ns2:orders xmlns=\"http://www.demandware.com/xml/impex/inventory/2007-05-31\""
3287+
+ " xmlns:ns2=\"http://www.demandware.com/xml/impex/order/2006-10-31\">\n"
3288+
+ " <ns2:order ns2:order-no=\"00250551\">\n"
3289+
+ " <ns2:order-date>2018-11-20T09:47:47Z</ns2:order-date>\n"
3290+
+ " <ns2:created-by>storefront</ns2:created-by>\n"
3291+
+ " <ns2:original-order-no>00250551</ns2:original-order-no>\n"
3292+
+ " </ns2:order>\n"
3293+
+ "</ns2:orders>";
3294+
String json =
3295+
"{\n"
3296+
+ " \"orders\": {\n"
3297+
+ " \"-xmlns\": \"http://www.demandware.com/xml/impex/inventory/2007-05-31\",\n"
3298+
+ " \"-xmlns:ns2\": \"http://www.demandware.com/xml/impex/order/2006-10-31\",\n"
3299+
+ " \"order\": {\n"
3300+
+ " \"-order-no\": \"00250551\",\n"
3301+
+ " \"order-date\": \"2018-11-20T09:47:47Z\",\n"
3302+
+ " \"created-by\": \"storefront\",\n"
3303+
+ " \"original-order-no\": \"00250551\"\n"
3304+
+ " }\n"
3305+
+ " },\n"
3306+
+ " \"#standalone\": \"yes\"\n"
3307+
+ "}";
3308+
assertEquals(json, U.toJson(U.fromXmlWithoutNamespacesMap(string)));
3309+
assertEquals(json, U.xmlToJson(string, U.Mode.WITHOUT_NAMESPACES_XML_TO_JSON));
3310+
}
3311+
32793312
@SuppressWarnings("unchecked")
32803313
@Test
32813314
void fromXmlWithoutNamespacesAndAttributes() {
@@ -3438,7 +3471,9 @@ void fromJsonMap() {
34383471

34393472
@Test
34403473
void fromJsonStackoverflowObject() throws IOException {
3441-
String stringJson = new String(Files.readAllBytes(Paths.get("src/test/resources/wellFormedObject.json")));
3474+
String stringJson =
3475+
new String(
3476+
Files.readAllBytes(Paths.get("src/test/resources/wellFormedObject.json")));
34423477
try {
34433478
U.fromJsonMap(stringJson);
34443479
} catch (Throwable throwable) {
@@ -3448,7 +3483,9 @@ void fromJsonStackoverflowObject() throws IOException {
34483483

34493484
@Test
34503485
void fromJsonStackoverflowArray() throws IOException {
3451-
String stringJson = new String(Files.readAllBytes(Paths.get("src/test/resources/wellFormedArray.json")));
3486+
String stringJson =
3487+
new String(
3488+
Files.readAllBytes(Paths.get("src/test/resources/wellFormedArray.json")));
34523489
try {
34533490
U.fromJsonMap(stringJson);
34543491
} catch (Throwable throwable) {

0 commit comments

Comments
 (0)