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(); + } }