From 627e62f507e809eb7f0e8e274512de858dd40d3c Mon Sep 17 00:00:00 2001 From: Eric Cochran Date: Fri, 22 Jun 2018 15:18:22 -0700 Subject: [PATCH] Fix hasNext to return false at document end. --- moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java | 2 +- moshi/src/main/java/com/squareup/moshi/JsonValueReader.java | 3 +-- moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java | 6 ++++++ 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java index 200ab07..14e12a5 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonUtf8Reader.java @@ -162,7 +162,7 @@ final class JsonUtf8Reader extends JsonReader { if (p == PEEKED_NONE) { p = doPeek(); } - return p != PEEKED_END_OBJECT && p != PEEKED_END_ARRAY; + return p != PEEKED_END_OBJECT && p != PEEKED_END_ARRAY && p != PEEKED_EOF; } @Override public Token peek() throws IOException { diff --git a/moshi/src/main/java/com/squareup/moshi/JsonValueReader.java b/moshi/src/main/java/com/squareup/moshi/JsonValueReader.java index 5babf47..fb3991b 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonValueReader.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonValueReader.java @@ -101,8 +101,7 @@ final class JsonValueReader extends JsonReader { } @Override public boolean hasNext() throws IOException { - // TODO(jwilson): this is consistent with BufferedSourceJsonReader but it doesn't make sense. - if (stackSize == 0) return true; + if (stackSize == 0) return false; Object peeked = stack[stackSize - 1]; return !(peeked instanceof Iterator) || ((Iterator) peeked).hasNext(); diff --git a/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java b/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java index 86d7106..ea1d952 100644 --- a/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java +++ b/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java @@ -979,4 +979,10 @@ public final class JsonReaderTest { } assertThat(reader.nextInt()).isEqualTo(1); } + + @Test public void emptyDocumentHasNextReturnsFalse() throws IOException { + JsonReader reader = newReader("1"); + reader.readJsonValue(); + assertThat(reader.hasNext()).isFalse(); + } }