Patch by T. Broyer - Fix issue 5065: Float.parseFloat and Double.parseDouble are too strict validating input (issue647802)

Review at http://gwt-code-reviews.appspot.com/661802

Review by: rjrjr@google.com

git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@8332 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/lang/Number.java b/user/super/com/google/gwt/emul/java/lang/Number.java
index 32ada57..04a85e1 100644
--- a/user/super/com/google/gwt/emul/java/lang/Number.java
+++ b/user/super/com/google/gwt/emul/java/lang/Number.java
@@ -345,7 +345,7 @@
     var floatRegex = @java.lang.Number::floatRegex;
     if (!floatRegex) {
       // Disallow '.' with no digits on either side
-      floatRegex = @java.lang.Number::floatRegex = /^\s*[+-]?((\d+\.?\d*)|(\.\d+))([eE][+-]?\d+)?\s*$/i;
+      floatRegex = @java.lang.Number::floatRegex = /^\s*[+-]?((\d+\.?\d*)|(\.\d+))([eE][+-]?\d+)?[dDfF]?\s*$/i;
     }
     if (floatRegex.test(str)) {
       return parseFloat(str);
diff --git a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
index f61a4ab..00520ed 100644
--- a/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
@@ -151,5 +151,11 @@
     assertTrue(-2.56789e1 == Double.parseDouble("  -2.56789E1"));
     assertTrue(-2.56789e1 == Double.parseDouble("-2.56789e+01   "));
     assertTrue(-2.56789e1 == Double.parseDouble("   -2.56789E1   "));
+    
+    // Test that a float/double type suffix is allowed
+    assertEquals(1.0d, Double.parseDouble("1.0f"), 0.0);
+    assertEquals(1.0d, Double.parseDouble("1.0F"), 0.0);
+    assertEquals(1.0d, Double.parseDouble("1.0d"), 0.0);
+    assertEquals(1.0d, Double.parseDouble("1.0D"), 0.0);
   }
 }
diff --git a/user/test/com/google/gwt/emultest/java/lang/FloatTest.java b/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
index 3254e20..2afc944 100644
--- a/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/FloatTest.java
@@ -78,6 +78,13 @@
     assertEquals(-1.5f, Float.parseFloat("-1.5"), 0.0);
     assertEquals(3.0f, Float.parseFloat("3."), 0.0);
     assertEquals(0.5f, Float.parseFloat(".5"), 0.0);
+
+    // Test that a float/double type suffix is allowed
+    assertEquals(1.0f, Float.parseFloat("1.0f"), 0.0);
+    assertEquals(1.0f, Float.parseFloat("1.0F"), 0.0);
+    assertEquals(1.0f, Float.parseFloat("1.0d"), 0.0);
+    assertEquals(1.0f, Float.parseFloat("1.0D"), 0.0);
+
     // TODO(jat): it isn't safe to parse MAX/MIN_VALUE because we also want to
     // be able to get POSITIVE/NEGATIVE_INFINITY for out-of-range values, and
     // since all math in JS is done in double we can't rely on getting the