Skip to content

Commit 4dbd138

Browse files
committed
Sync with underscore-java.
1 parent 63a8b6c commit 4dbd138

File tree

4 files changed

+115
-13
lines changed

4 files changed

+115
-13
lines changed

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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@
3030
public final class Base32 {
3131

3232
private static final Charset UTF_8 = Charset.forName("UTF-8");
33-
private static final Base32 INSTANCE = new Base32("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef");
33+
private static final Base32 INSTANCE = new Base32();
3434

3535
private final char[] digits;
3636
private final int mask;
3737
private final int shift;
3838
private final Map<Character, Integer> charMap;
3939

40-
private Base32(final String alphabet) {
41-
digits = alphabet.toCharArray();
40+
private Base32() {
41+
digits = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdef".toCharArray();
4242
mask = digits.length - 1;
4343
shift = Integer.numberOfTrailingZeros(digits.length);
4444
charMap = new HashMap<Character, Integer>();

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

Lines changed: 68 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1994,6 +1994,23 @@ public static Object fromXml(final String xml) {
19941994
return Xml.fromXml(xml);
19951995
}
19961996

1997+
public static Map<String, Object> fromXmlMap(final String xml) {
1998+
return fromXmlMap(xml, Xml.FromType.FOR_CONVERT);
1999+
}
2000+
2001+
@SuppressWarnings("unchecked")
2002+
public static Map<String, Object> fromXmlMap(final String xml, final Xml.FromType fromType) {
2003+
final Object object = Xml.fromXml(xml, fromType);
2004+
final Map<String, Object> result;
2005+
if (object instanceof Map) {
2006+
result = (Map<String, Object>) object;
2007+
} else {
2008+
result = newLinkedHashMap();
2009+
result.put("value", object);
2010+
}
2011+
return result;
2012+
}
2013+
19972014
public static Object fromXml(final String xml, final Xml.FromType fromType) {
19982015
return Xml.fromXml(xml, fromType);
19992016
}
@@ -2030,6 +2047,19 @@ public Object fromJson() {
20302047
return Json.fromJson(getString().get());
20312048
}
20322049

2050+
@SuppressWarnings("unchecked")
2051+
public static Map<String, Object> fromJsonMap(final String string) {
2052+
final Object object = Json.fromJson(string);
2053+
final Map<String, Object> result;
2054+
if (object instanceof Map) {
2055+
result = (Map<String, Object>) object;
2056+
} else {
2057+
result = newLinkedHashMap();
2058+
result.put("value", object);
2059+
}
2060+
return result;
2061+
}
2062+
20332063
public String toXml() {
20342064
return Xml.toXml((Collection) getIterable());
20352065
}
@@ -2086,15 +2116,15 @@ public static String formatXml(String xml) {
20862116
@SuppressWarnings("unchecked")
20872117
public static Map<String, Object> removeMinusesAndConvertNumbers(Map<String, Object> map) {
20882118
Map<String, Object> outMap = newLinkedHashMap();
2089-
for (String key : map.keySet()) {
2119+
for (Map.Entry<String, Object> entry : map.entrySet()) {
20902120
final String newKey;
2091-
if (key.startsWith("-")) {
2092-
newKey = key.substring(1);
2121+
if (entry.getKey().startsWith("-")) {
2122+
newKey = entry.getKey().substring(1);
20932123
} else {
2094-
newKey = key;
2124+
newKey = entry.getKey();
20952125
}
2096-
if (!key.equals("-self-closing") && !key.equals("#omit-xml-declaration")) {
2097-
outMap.put(newKey, makeObject(map.get(key)));
2126+
if (!entry.getKey().equals("-self-closing") && !entry.getKey().equals("#omit-xml-declaration")) {
2127+
outMap.put(newKey, makeObject(entry.getValue()));
20982128
}
20992129
}
21002130
return outMap;
@@ -2113,11 +2143,42 @@ private static Object makeObject(Object value) {
21132143
result = removeMinusesAndConvertNumbers((Map<String, Object>) value);
21142144
} else {
21152145
String stringValue = String.valueOf(value);
2116-
result = stringValue.matches("^-?\\d*([.eE])?\\d+$") ? Xml.stringToNumber(stringValue) : value;
2146+
result = isJsonNumber(stringValue) ? Xml.stringToNumber(stringValue) : value;
21172147
}
21182148
return result;
21192149
}
21202150

2151+
public static boolean isJsonNumber(final String string) {
2152+
boolean eFound = false;
2153+
boolean periodValid = true;
2154+
boolean pmValid = true;
2155+
boolean numberEncountered = false;
2156+
for (char ch : string.toCharArray()) {
2157+
if (pmValid) {
2158+
pmValid = false;
2159+
if (ch == '-') {
2160+
continue;
2161+
}
2162+
}
2163+
if (!eFound && (ch == 'e' || ch == 'E')) {
2164+
eFound = true;
2165+
periodValid = false;
2166+
pmValid = true;
2167+
numberEncountered = false;
2168+
continue;
2169+
}
2170+
if (periodValid && ch == '.') {
2171+
periodValid = false;
2172+
continue;
2173+
}
2174+
if (ch < '0' || ch > '9') {
2175+
return false;
2176+
}
2177+
numberEncountered = true;
2178+
}
2179+
return numberEncountered;
2180+
}
2181+
21212182
@SuppressWarnings("unchecked")
21222183
public static Map<String, Object> replaceSelfClosingWithNull(Map map) {
21232184
Map<String, Object> outMap = newLinkedHashMap();

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -715,12 +715,27 @@ public void removeMinusesAndConvertNumbers() {
715715
Map<String, Object> result4 = U.removeMinusesAndConvertNumbers(
716716
(Map<String, Object>) U.fromXml("<a><b c=\"1\"/></a>"));
717717
assertEquals("{a={b={c=1}}}", result4.toString());
718+
Map<String, Object> result5 = U.removeMinusesAndConvertNumbers(
719+
(Map<String, Object>) U.fromXml("<a><b c=\"-1e1\"/></a>"));
720+
assertEquals("{a={b={c=-10.0}}}", result5.toString());
721+
Map<String, Object> result6 = U.removeMinusesAndConvertNumbers(
722+
(Map<String, Object>) U.fromXml("<a><b c=\"-1E1\"/></a>"));
723+
assertEquals("{a={b={c=-10.0}}}", result6.toString());
724+
Map<String, Object> result7 = U.removeMinusesAndConvertNumbers(
725+
(Map<String, Object>) U.fromXml("<a><b c=\"1.a\"/></a>"));
726+
assertEquals("{a={b={c=1.a}}}", result7.toString());
727+
Map<String, Object> result8 = U.removeMinusesAndConvertNumbers(
728+
(Map<String, Object>) U.fromXml("<a><b c=\"1.-\"/></a>"));
729+
assertEquals("{a={b={c=1.-}}}", result8.toString());
730+
Map<String, Object> result9 = U.removeMinusesAndConvertNumbers(
731+
(Map<String, Object>) U.fromXml("<a><b c=\"+1ee\"/></a>"));
732+
assertEquals("{a={b={c=+1ee}}}", result9.toString());
718733
Map<String, Object> map = U.newLinkedHashMap();
719734
List<Object> list = U.newArrayList();
720735
list.add(U.newArrayList());
721736
map.put("list", list);
722-
Map<String, Object> result5 = U.removeMinusesAndConvertNumbers(map);
723-
assertEquals("{list=[[]]}", result5.toString());
737+
Map<String, Object> result10 = U.removeMinusesAndConvertNumbers(map);
738+
assertEquals("{list=[[]]}", result10.toString());
724739
}
725740

726741
@SuppressWarnings("unchecked")

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

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3123,6 +3123,32 @@ public void fromXml() {
31233123
U.fromXml(stringXml);
31243124
}
31253125

3126+
@SuppressWarnings("unchecked")
3127+
@Test
3128+
public void fromXmlMap() {
3129+
String stringXml =
3130+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
3131+
+ "\n<root empty-array=\"true\"></root>";
3132+
assertEquals("{value=[]}", U.fromXmlMap(stringXml).toString());
3133+
String stringXml2 =
3134+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
3135+
+ "\n<root></root>";
3136+
assertEquals("{}", U.fromXmlMap(stringXml2).toString());
3137+
String stringXml3 =
3138+
"<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
3139+
+ "\n<root></root>";
3140+
assertEquals("{}", U.fromXmlMap(stringXml3, Xml.FromType.FOR_CONVERT).toString());
3141+
}
3142+
3143+
@SuppressWarnings("unchecked")
3144+
@Test
3145+
public void fromJsonMap() {
3146+
String stringJson = "[]";
3147+
assertEquals("{value=[]}", U.fromJsonMap(stringJson).toString());
3148+
String stringJson2 = "{}";
3149+
assertEquals("{}", U.fromJsonMap(stringJson2).toString());
3150+
}
3151+
31263152
@Test(expected = IllegalArgumentException.class)
31273153
public void testDecodeParseXmlErr13() {
31283154
U.fromXml("[\"abc\u0010\"]");
@@ -3628,7 +3654,7 @@ public void toJsonJavaString() {
36283654
}
36293655

36303656
@Test
3631-
public void main() throws Exception {
3657+
public void main() {
36323658
U.main(new String[] {});
36333659
new U<String>(new ArrayList<String>());
36343660
new U<String>("");

0 commit comments

Comments
 (0)