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
