diff options
author | joel.leitch@gmail.com <joel.leitch@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae> | 2013-01-14 18:38:46 +0000 |
---|---|---|
committer | joel.leitch@gmail.com <joel.leitch@gmail.com@2534bb62-2c4b-0410-85e8-b5006b95c4ae> | 2013-01-14 18:38:46 +0000 |
commit | 22d573ca50015bbb62dca24159911f0822d9e7b9 (patch) | |
tree | 1bb288093f99ad913e7df3e6799b3084b99b1ffe | |
parent | 8b3b867a6c425112a477aa87efa19aab01df2c54 (diff) | |
download | android_external_gson-22d573ca50015bbb62dca24159911f0822d9e7b9.tar.gz android_external_gson-22d573ca50015bbb62dca24159911f0822d9e7b9.tar.bz2 android_external_gson-22d573ca50015bbb62dca24159911f0822d9e7b9.zip |
Do not peek during a "skipValue" if a value has already been peeked.
git-svn-id: http://google-gson.googlecode.com/svn/trunk/gson@1221 2534bb62-2c4b-0410-85e8-b5006b95c4ae
-rw-r--r-- | src/main/java/com/google/gson/stream/JsonReader.java | 6 | ||||
-rw-r--r-- | src/test/java/com/google/gson/stream/JsonReaderTest.java | 49 |
2 files changed, 54 insertions, 1 deletions
diff --git a/src/main/java/com/google/gson/stream/JsonReader.java b/src/main/java/com/google/gson/stream/JsonReader.java index 50f50ec5..2cc4b124 100644 --- a/src/main/java/com/google/gson/stream/JsonReader.java +++ b/src/main/java/com/google/gson/stream/JsonReader.java @@ -1225,7 +1225,11 @@ public class JsonReader implements Closeable { public void skipValue() throws IOException { int count = 0; do { - int p = doPeek(); + int p = peeked; + if (p == PEEKED_NONE) { + p = doPeek(); + } + if (p == PEEKED_BEGIN_ARRAY) { push(JsonScope.EMPTY_ARRAY); count++; diff --git a/src/test/java/com/google/gson/stream/JsonReaderTest.java b/src/test/java/com/google/gson/stream/JsonReaderTest.java index cb2376da..dd7bb574 100644 --- a/src/test/java/com/google/gson/stream/JsonReaderTest.java +++ b/src/test/java/com/google/gson/stream/JsonReaderTest.java @@ -71,6 +71,38 @@ public final class JsonReaderTest extends TestCase { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + public void testSkipArray() throws IOException { + JsonReader reader = new JsonReader(reader( + "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); + reader.beginObject(); + assertEquals("a", reader.nextName()); + reader.skipValue(); + assertEquals("b", reader.nextName()); + assertEquals(123, reader.nextInt()); + reader.endObject(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + + public void testSkipArrayAfterPeek() throws Exception { + JsonReader reader = new JsonReader(reader( + "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); + reader.beginObject(); + assertEquals("a", reader.nextName()); + assertEquals(BEGIN_ARRAY, reader.peek()); + reader.skipValue(); + assertEquals("b", reader.nextName()); + assertEquals(123, reader.nextInt()); + reader.endObject(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + + public void testSkipTopLevelObject() throws Exception { + JsonReader reader = new JsonReader(reader( + "{\"a\": [\"one\", \"two\", \"three\"], \"b\": 123}")); + reader.skipValue(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + public void testSkipObject() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\": { \"c\": [], \"d\": [true, true, {}] }, \"b\": \"banana\"}")); @@ -83,6 +115,23 @@ public final class JsonReaderTest extends TestCase { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + public void testSkipObjectAfterPeek() throws Exception { + String json = "{" + " \"one\": { \"num\": 1 }" + + ", \"two\": { \"num\": 2 }" + ", \"three\": { \"num\": 3 }" + "}"; + JsonReader reader = new JsonReader(reader(json)); + reader.beginObject(); + assertEquals("one", reader.nextName()); + assertEquals(BEGIN_OBJECT, reader.peek()); + reader.skipValue(); + assertEquals("two", reader.nextName()); + assertEquals(BEGIN_OBJECT, reader.peek()); + reader.skipValue(); + assertEquals("three", reader.nextName()); + reader.skipValue(); + reader.endObject(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + public void testSkipInteger() throws IOException { JsonReader reader = new JsonReader(reader( "{\"a\":123456789,\"b\":-123456789}")); |