Revision: 7344
Author: [email protected]
Date: Mon Dec 21 10:54:10 2009
Log: Fix external issue 1581: Double.parseDouble treats whitespace  
differently in hosted mode

Allow whitespace in Float.parseFloat and Double.parseDouble.  Also, allow  
both 'e' and
'E' for the exponent delimiter.  Add some unit tests.

Review by: fabbott (desk review)


http://code.google.com/p/google-web-toolkit/source/detail?r=7344

Modified:
  /trunk/user/super/com/google/gwt/emul/java/lang/Number.java
  /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java
  /trunk/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java

=======================================
--- /trunk/user/super/com/google/gwt/emul/java/lang/Number.java Fri Jun 13  
17:45:25 2008
+++ /trunk/user/super/com/google/gwt/emul/java/lang/Number.java Mon Dec 21  
10:54:10 2009
@@ -164,7 +164,7 @@
    private static native double __parseDouble(String str) /*-{
      var floatRegex = @java.lang.Number::floatRegex;
      if (!floatRegex) {
-      floatRegex = @java.lang.Number::floatRegex =  
/^[+-]?\d*\.?\d*(e[+-]?\d+)?$/i;
+      floatRegex = @java.lang.Number::floatRegex =  
/^\s*[+-]?\d*\.?\d*([eE][+-]?\d+)?\s*$/i;
      }
      if (floatRegex.test(str)) {
        return parseFloat(str);
=======================================
--- /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java  Thu  
Apr 10 23:17:07 2008
+++ /trunk/user/test/com/google/gwt/emultest/java/lang/DoubleTest.java  Mon  
Dec 21 10:54:10 2009
@@ -78,5 +78,20 @@
      assertTrue(
          "Can't parse MAX_VALUE",
          Double.MAX_VALUE ==  
Double.parseDouble(String.valueOf(Double.MAX_VALUE)));
+
+    // Test that leading and trailing whitespace is ignored
+    // Test that both 'e' and 'E' may be used as the exponent delimiter
+    assertTrue(2.56789e1 == Double.parseDouble("2.56789e1"));
+    assertTrue(2.56789e1 == Double.parseDouble("  2.56789E+1"));
+    assertTrue(2.56789e1 == Double.parseDouble("2.56789e1   "));
+    assertTrue(2.56789e1 == Double.parseDouble("   2.56789E01   "));
+    assertTrue(2.56789e1 == Double.parseDouble("+2.56789e1"));
+    assertTrue(2.56789e1 == Double.parseDouble("  +2.56789E+01"));
+    assertTrue(2.56789e1 == Double.parseDouble("+2.56789e1   "));
+    assertTrue(2.56789e1 == Double.parseDouble("   +2.56789E1   "));
+    assertTrue(-2.56789e1 == Double.parseDouble("-2.56789e+1"));
+    assertTrue(-2.56789e1 == Double.parseDouble("  -2.56789E1"));
+    assertTrue(-2.56789e1 == Double.parseDouble("-2.56789e+01   "));
+    assertTrue(-2.56789e1 == Double.parseDouble("   -2.56789E1   "));
    }
  }
=======================================
--- /trunk/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java Fri  
Mar 28 09:23:40 2008
+++ /trunk/user/test/com/google/gwt/emultest/java/lang/IntegerTest.java Mon  
Dec 21 10:54:10 2009
@@ -76,6 +76,27 @@
      } catch (NumberFormatException e) {
        // Expected behavior
      }
+
+    try {
+      Integer.parseInt("-");
+      fail("parseInt should reject \"-\"");
+    } catch (NumberFormatException e) {
+      // Expected behavior
+    }
+
+    try {
+      Integer.parseInt(" -12345");
+      fail("parseInt should reject leading whitespace");
+    } catch (NumberFormatException e) {
+      // Expected behavior
+    }
+
+    try {
+      Integer.parseInt("-12345 ");
+      fail("parseInt should reject trailing whitespace");
+    } catch (NumberFormatException e) {
+      // Expected behavior
+    }
    }

    public void testBinaryString() {

-- 
http://groups.google.com/group/Google-Web-Toolkit-Contributors

Reply via email to