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) {