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;