negative zero test and fix (#1069)
diff --git a/gson/src/main/java/com/google/gson/stream/JsonReader.java b/gson/src/main/java/com/google/gson/stream/JsonReader.java
index 877742b..9cbc62f 100644
--- a/gson/src/main/java/com/google/gson/stream/JsonReader.java
+++ b/gson/src/main/java/com/google/gson/stream/JsonReader.java
@@ -728,7 +728,7 @@
}
// We've read a complete number. Decide if it's a PEEKED_LONG or a PEEKED_NUMBER.
- if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative)) {
+ if (last == NUMBER_CHAR_DIGIT && fitsInLong && (value != Long.MIN_VALUE || negative) && (value!=0 || false==negative)) {
peekedLong = negative ? value : -value;
pos += i;
return peeked = PEEKED_LONG;
diff --git a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java
index d6b7a83..19ca2d2 100644
--- a/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java
+++ b/gson/src/test/java/com/google/gson/stream/JsonReaderTest.java
@@ -560,6 +560,18 @@
} catch (NumberFormatException expected) {
}
}
+
+ /**
+ * Issue 1053, negative zero.
+ * @throws Exception
+ */
+ public void testNegativeZero() throws Exception {
+ JsonReader reader = new JsonReader(reader("[-0]"));
+ reader.setLenient(false);
+ reader.beginArray();
+ assertEquals(NUMBER, reader.peek());
+ assertEquals("-0", reader.nextString());
+ }
/**
* This test fails because there's no double for 9223372036854775808, and our