Fixes issue 3647: Long.parseLong("-") returns 0 instead of throwing a NumberFormatException.
Patch by: amitmanjhi
Review by: rjrjr (desk review)
git-svn-id: https://google-web-toolkit.googlecode.com/svn/trunk@5353 8db76d5a-ed1c-0410-87a9-c151d255dfc7
diff --git a/user/super/com/google/gwt/emul/java/lang/Long.java b/user/super/com/google/gwt/emul/java/lang/Long.java
index d544038..913fab7 100644
--- a/user/super/com/google/gwt/emul/java/lang/Long.java
+++ b/user/super/com/google/gwt/emul/java/lang/Long.java
@@ -122,6 +122,9 @@
if (orig.charAt(0) == '-') {
neg = true;
s = orig.substring(1);
+ if (s.equals("")) { // orig = "-"
+ throw NumberFormatException.forInputString(orig);
+ }
} else {
s = orig;
}
diff --git a/user/test/com/google/gwt/emultest/java/lang/LongTest.java b/user/test/com/google/gwt/emultest/java/lang/LongTest.java
index 879c696..c307636 100644
--- a/user/test/com/google/gwt/emultest/java/lang/LongTest.java
+++ b/user/test/com/google/gwt/emultest/java/lang/LongTest.java
@@ -87,7 +87,7 @@
assertEquals(63, Long.numberOfTrailingZeros(Long.MIN_VALUE));
assertEquals(20, Long.numberOfTrailingZeros(-0x7ff00000L));
}
-
+
public void testParse() {
assertEquals(0L, Long.parseLong("0"));
assertEquals(100000000000L, Long.parseLong("100000000000"));
@@ -113,6 +113,44 @@
// expected
}
try {
+ // issue 3647
+ Long.parseLong("-");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
+ // issue 3647
+ new Long("-");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
+ Long.parseLong(" -");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
+ new Long(" -");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
+ Long.parseLong("- ");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
+ new Long("- ");
+ fail("expected NumberFormatException");
+ } catch (NumberFormatException ex) {
+ // expected
+ }
+ try {
Long.parseLong("deadbeefbeef");
fail("expected NumberFormatException");
} catch (NumberFormatException ex) {