Handle Infinity and Nan in the same way when encoding JSON
Change-Id: I8aaff25f834e5f4a3d8beb46ba635cb3d08af181
diff --git a/elemental/src/elemental/json/impl/JreJsonNumber.java b/elemental/src/elemental/json/impl/JreJsonNumber.java
index 664ce5f..9739dc1 100644
--- a/elemental/src/elemental/json/impl/JreJsonNumber.java
+++ b/elemental/src/elemental/json/impl/JreJsonNumber.java
@@ -74,6 +74,9 @@
}
public String toJson() {
+ if (Double.isInfinite(number) || Double.isNaN(number)) {
+ return "null";
+ }
String toReturn = String.valueOf(number);
if (toReturn.endsWith(".0")) {
toReturn = toReturn.substring(0, toReturn.length() - 2);
diff --git a/elemental/src/elemental/json/impl/JsonUtil.java b/elemental/src/elemental/json/impl/JsonUtil.java
index e853e5e..b8c0613 100644
--- a/elemental/src/elemental/json/impl/JsonUtil.java
+++ b/elemental/src/elemental/json/impl/JsonUtil.java
@@ -88,7 +88,7 @@
@Override
public void visit(double number, JsonContext ctx) {
- sb.append(Double.isInfinite(number) ? "null" : format(number));
+ sb.append(Double.isInfinite(number) || Double.isNaN(number) ? "null" : format(number));
}
@Override
diff --git a/elemental/tests/elemental/json/JsonUtilTest.java b/elemental/tests/elemental/json/JsonUtilTest.java
index d331c2e..1dbaa88 100755
--- a/elemental/tests/elemental/json/JsonUtilTest.java
+++ b/elemental/tests/elemental/json/JsonUtilTest.java
@@ -210,6 +210,24 @@
JsonUtil.parse(json)));
}
+ public void testStringifyDoubleNanInfinity() {
+ JsonNumber json = Json.create(Double.NaN);
+ assertEquals("null",JsonUtil.stringify(json));
+ json = Json.create(Double.POSITIVE_INFINITY);
+ assertEquals("null",JsonUtil.stringify(json));
+ json = Json.create(Double.NEGATIVE_INFINITY);
+ assertEquals("null",JsonUtil.stringify(json));
+ }
+
+ public void testJsonNumberToJsonDoubleNanInfinity() {
+ JsonNumber json = Json.create(Double.NaN);
+ assertEquals("null",json.toJson());
+ json = Json.create(Double.POSITIVE_INFINITY);
+ assertEquals("null",json.toJson());
+ json = Json.create(Double.NEGATIVE_INFINITY);
+ assertEquals("null",json.toJson());
+ }
+
private native JsonObject nativeMethod(Object o) /*-{
o.y = o.x + 1;
return o;