diff --git a/moshi/src/main/java/com/squareup/moshi/JsonReader.java b/moshi/src/main/java/com/squareup/moshi/JsonReader.java index b42f36f..116eea6 100644 --- a/moshi/src/main/java/com/squareup/moshi/JsonReader.java +++ b/moshi/src/main/java/com/squareup/moshi/JsonReader.java @@ -21,6 +21,7 @@ import java.io.IOException; import okio.Buffer; import okio.BufferedSource; import okio.ByteString; +import okio.Okio; import okio.Source; /** @@ -263,13 +264,15 @@ public class JsonReader implements Closeable { private int[] pathIndices = new int[32]; /** - * Creates a new instance that reads a JSON-encoded stream from {@code in}. + * Creates a new instance that reads a JSON-encoded stream from {@code source}. */ public JsonReader(Source source) { if (source == null) { throw new NullPointerException("source == null"); } - throw new UnsupportedOperationException("TODO"); + BufferedSource bufferedSource = Okio.buffer(source); + this.source = bufferedSource; + this.buffer = bufferedSource.buffer(); } /** diff --git a/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java b/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java index f971889..966270d 100644 --- a/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java +++ b/moshi/src/test/java/com/squareup/moshi/JsonReaderTest.java @@ -18,6 +18,8 @@ package com.squareup.moshi; import java.io.EOFException; import java.io.IOException; import java.util.Arrays; +import okio.Buffer; +import okio.ForwardingSource; import okio.Source; import org.junit.Ignore; import org.junit.Test; @@ -66,6 +68,31 @@ public final class JsonReaderTest { assertEquals(JsonToken.END_DOCUMENT, reader.peek()); } + @Test public void readObjectBuffer() throws IOException { + Buffer buffer = new Buffer().writeUtf8("{\"a\": \"android\", \"b\": \"banana\"}"); + JsonReader reader = new JsonReader(buffer); + reader.beginObject(); + assertEquals("a", reader.nextName()); + assertEquals("android", reader.nextString()); + assertEquals("b", reader.nextName()); + assertEquals("banana", reader.nextString()); + reader.endObject(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + + @Test public void readObjectSource() throws IOException { + Buffer buffer = new Buffer().writeUtf8("{\"a\": \"android\", \"b\": \"banana\"}"); + Source source = new ForwardingSource(buffer) {}; // Mask the Buffer as an unbuffered Source. + JsonReader reader = new JsonReader(source); + reader.beginObject(); + assertEquals("a", reader.nextName()); + assertEquals("android", reader.nextString()); + assertEquals("b", reader.nextName()); + assertEquals("banana", reader.nextString()); + reader.endObject(); + assertEquals(JsonToken.END_DOCUMENT, reader.peek()); + } + @Test public void readEmptyObject() throws IOException { JsonReader reader = new JsonReader("{}"); reader.beginObject();