Skip to content

Commit 37e7274

Browse files
committed
2 parents 5e8ec73 + 95719aa commit 37e7274

File tree

7 files changed

+131
-9
lines changed

7 files changed

+131
-9
lines changed

.travis.yml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ jdk:
55
- openjdk11
66
- openjdk12
77
- openjdk13
8+
- openjdk14
89

910
script:
1011
- mvn -B clean test jacoco:report

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
<plugin>
107107
<groupId>org.jacoco</groupId>
108108
<artifactId>jacoco-maven-plugin</artifactId>
109-
<version>0.8.4</version>
109+
<version>0.8.5</version>
110110
<executions>
111111
<execution>
112112
<id>prepare-agent</id>
@@ -139,7 +139,7 @@
139139
<plugin>
140140
<groupId>org.jacoco</groupId>
141141
<artifactId>jacoco-maven-plugin</artifactId>
142-
<version>0.8.4</version>
142+
<version>0.8.5</version>
143143
<configuration>
144144
<excludes>
145145
<exclude>**/U$BaseHttpSslSocketFactory*.class</exclude>

src/main/java/com/github/underscore/lodash/Json.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
/*
22
* The MIT License (MIT)
33
*
4-
* Copyright 2015-2019 Valentyn Kolesnikov
4+
* Copyright 2015-2020 Valentyn Kolesnikov
55
*
66
* Permission is hereby granted, free of charge, to any person obtaining a copy
77
* of this software and associated documentation files (the "Software"), to deal
@@ -697,7 +697,9 @@ private Number readNumber() {
697697
final String number = endCapture();
698698
final Number result;
699699
if (number.contains(".") || number.contains("e") || number.contains("E")) {
700-
if (number.length() > 9) {
700+
if (number.length() > 9 || (number.contains(".")
701+
&& number.length() - number.lastIndexOf('.') > 2)
702+
&& number.charAt(number.length() - 1) == '0') {
701703
result = new java.math.BigDecimal(number);
702704
} else {
703705
result = Double.valueOf(number);

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

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2280,6 +2280,11 @@ public Builder add(final Builder builder) {
22802280
return this;
22812281
}
22822282

2283+
public Builder add(final String key, final ArrayBuilder builder) {
2284+
data.put(key, builder.build());
2285+
return this;
2286+
}
2287+
22832288
@SuppressWarnings("unchecked")
22842289
public Map<String, Object> build() {
22852290
return (Map<String, Object>) ((LinkedHashMap) data).clone();
@@ -2296,7 +2301,7 @@ public static Builder fromXml(final String xml) {
22962301
}
22972302

22982303
public String toJson() {
2299-
return Xml.toXml(data);
2304+
return Json.toJson(data);
23002305
}
23012306

23022307
public static Builder fromJson(final String json) {
@@ -2310,4 +2315,65 @@ public String toString() {
23102315
return data.toString();
23112316
}
23122317
}
2318+
2319+
public static ArrayBuilder arrayBuilder() {
2320+
return new U.ArrayBuilder();
2321+
}
2322+
2323+
public static class ArrayBuilder {
2324+
private final List<Object> data;
2325+
public ArrayBuilder() {
2326+
data = newArrayList();
2327+
}
2328+
2329+
public ArrayBuilder add(final Object value) {
2330+
data.add(value);
2331+
return this;
2332+
}
2333+
2334+
public ArrayBuilder set(final int index, final Object value) {
2335+
data.set(index, value);
2336+
return this;
2337+
}
2338+
2339+
public ArrayBuilder add(final ArrayBuilder builder) {
2340+
data.addAll(builder.build());
2341+
return this;
2342+
}
2343+
2344+
public ArrayBuilder add(final Builder builder) {
2345+
data.add(builder.build());
2346+
return this;
2347+
}
2348+
2349+
@SuppressWarnings("unchecked")
2350+
public List<Object> build() {
2351+
return (List<Object>) ((ArrayList) data).clone();
2352+
}
2353+
2354+
public String toXml() {
2355+
return Xml.toXml(data);
2356+
}
2357+
2358+
public static ArrayBuilder fromXml(final String xml) {
2359+
final ArrayBuilder builder = new ArrayBuilder();
2360+
builder.data.addAll(U.<List<Object>>fromXml(xml));
2361+
return builder;
2362+
}
2363+
2364+
public String toJson() {
2365+
return Json.toJson(data);
2366+
}
2367+
2368+
public static ArrayBuilder fromJson(final String json) {
2369+
final ArrayBuilder builder = new ArrayBuilder();
2370+
builder.data.addAll(U.<List<Object>>fromJson(json));
2371+
return builder;
2372+
}
2373+
2374+
@Override
2375+
public String toString() {
2376+
return data.toString();
2377+
}
2378+
}
23132379
}

src/main/java/com/github/underscore/lodash/Xml.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1001,7 +1001,9 @@ private static Object getValue(final Object value, final FromType fromType) {
10011001
public static Object stringToNumber(String number) {
10021002
final Object localValue;
10031003
if (number.contains(".") || number.contains("e") || number.contains("E")) {
1004-
if (number.length() > 9) {
1004+
if (number.length() > 9 || (number.contains(".")
1005+
&& number.length() - number.lastIndexOf('.') > 2)
1006+
&& number.charAt(number.length() - 1) == '0') {
10051007
localValue = new java.math.BigDecimal(number);
10061008
} else {
10071009
localValue = Double.valueOf(number);
@@ -1087,6 +1089,7 @@ private static Object checkArray(final Map<String, Object> map, final String nam
10871089
if (map.containsKey(ARRAY) && TRUE.equals(map.get(ARRAY))) {
10881090
final Map<String, Object> localMap4 = (Map) ((LinkedHashMap) localMap).clone();
10891091
localMap4.remove(ARRAY);
1092+
localMap4.remove(SELF_CLOSING);
10901093
object = name.equals(XmlValue.getMapKey(localMap4))
10911094
? U.newArrayList(Collections.singletonList(getValue(XmlValue.getMapValue(localMap4),
10921095
FromType.FOR_CONVERT)))

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

Lines changed: 40 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -704,12 +704,15 @@ public void formatXml() {
704704
Xml.XmlStringBuilder.Step.COMPACT));
705705
assertEquals("<a>\n\t<b></b>\n\t<b></b>\n</a>",
706706
U.formatXml("<a>\n <b></b>\n <b></b>\n</a>", Xml.XmlStringBuilder.Step.TABS));
707+
assertEquals("<a number=\"true\">1.00</a>", U.formatXml("<a number=\"true\">1.00</a>"));
708+
assertEquals("<a number=\"true\">2.01</a>", U.formatXml("<a number=\"true\">2.01</a>"));
707709
}
708710

709711
@Test
710712
public void formatJson() {
711713
assertEquals("{\n \"a\": {\n }\n}", U.formatJson("{\n \"a\": {\n }\n}"));
712714
assertEquals("[\n]", U.formatJson("[]"));
715+
assertEquals("[\n 1.00\n]", U.formatJson("[1.00]"));
713716
assertEquals("{\n \"a\": {\n }\n}",
714717
U.formatJson("{\n \"a\": {\n }\n}", Json.JsonStringBuilder.Step.FOUR_SPACES));
715718
assertEquals("{\"a\":{}}",
@@ -774,7 +777,7 @@ public void objectBuilder() {
774777
.add("city", "New York")
775778
.add("state", "NY")
776779
.add("postalCode", "10021"))
777-
.add("phoneNumber", U.objectBuilder()
780+
.add("phoneNumber", U.arrayBuilder()
778781
.add(U.objectBuilder()
779782
.add("type", "home")
780783
.add("number", "212 555-1234"))
@@ -783,8 +786,42 @@ public void objectBuilder() {
783786
.add("number", "646 555-4567")))
784787
.build();
785788
assertEquals("{firstName=John, lastName=Smith, age=25, address={streetAddress=21 2nd Street, "
786-
+ "city=New York, state=NY, postalCode=10021}, phoneNumber={0={type=home, number=212 555-1234}, "
787-
+ "1={type=fax, number=646 555-4567}}}", value.toString());
789+
+ "city=New York, state=NY, postalCode=10021}, phoneNumber=[{type=home, number=212 555-1234}, "
790+
+ "{type=fax, number=646 555-4567}]}", value.toString());
791+
}
792+
793+
@Test
794+
public void arrayBuilder() {
795+
U.ArrayBuilder builder = U.arrayBuilder().add("1").add("2");
796+
builder.add(builder);
797+
builder.toJson();
798+
U.ArrayBuilder.fromJson("[]");
799+
builder.toXml();
800+
U.ArrayBuilder.fromXml("<?xml version=\"1.0\" encoding=\"UTF-8\"?><root empty-array=\"true\"></root>");
801+
builder.set(1, "3");
802+
builder.toString();
803+
assertEquals("[1, 3, 1, 2]", builder.build().toString());
804+
Map<String, Object> value = U.objectBuilder()
805+
.add("firstName", "John")
806+
.add("lastName", "Smith")
807+
.add("age", 25)
808+
.add("address", U.arrayBuilder()
809+
.add(U.objectBuilder()
810+
.add("streetAddress", "21 2nd Street")
811+
.add("city", "New York")
812+
.add("state", "NY")
813+
.add("postalCode", "10021")))
814+
.add("phoneNumber", U.arrayBuilder()
815+
.add(U.objectBuilder()
816+
.add("type", "home")
817+
.add("number", "212 555-1234"))
818+
.add(U.objectBuilder()
819+
.add("type", "fax")
820+
.add("number", "646 555-4567")))
821+
.build();
822+
assertEquals("{firstName=John, lastName=Smith, age=25, address=[{streetAddress=21 2nd Street, "
823+
+ "city=New York, state=NY, postalCode=10021}], phoneNumber=[{type=home, number=212 555-1234}, "
824+
+ "{type=fax, number=646 555-4567}]}", value.toString());
788825
}
789826

790827
@SuppressWarnings("unchecked")

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

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,7 @@ public void camelCase() {
6565
assertEquals("fooBar", U.chain("Foo Bar").camelCase().item());
6666
assertEquals("fooBar", U.camelCase("--foo-bar"));
6767
assertEquals("fooBar", U.camelCase("__foo_bar__"));
68+
assertEquals("ThisIsAnExampleString", U.upperFirst(U.camelCase("THIS_IS_AN_EXAMPLE_STRING")));
6869
assertEquals("", U.camelCase(null));
6970
assertEquals("a", U.camelCase("\u00c0"));
7071
}
@@ -2262,6 +2263,18 @@ public void toJsonFromXml28() {
22622263
assertEquals(xml, U.toXml((Map<String, Object>) U.fromJson(json)));
22632264
}
22642265

2266+
@SuppressWarnings("unchecked")
2267+
@Test
2268+
public void toJsonFromXml29() {
2269+
final String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
2270+
+ "<root>\n"
2271+
+ " <element array=\"true\" null=\"true\"/>\n"
2272+
+ "</root>";
2273+
final String json = "[\n null\n]";
2274+
assertEquals(json, U.toJson((List<Object>) U.fromXml(xml)));
2275+
assertEquals(xml, U.toXml((List<Object>) U.fromJson(json)));
2276+
}
2277+
22652278
@SuppressWarnings("unchecked")
22662279
@Test
22672280
public void toXmlFromJson() {

0 commit comments

Comments
 (0)