Merge pull request #16 from square/jw/source

Enable JsonReader with Source.
This commit is contained in:
Jesse Wilson
2014-12-22 16:09:38 -05:00
2 changed files with 32 additions and 2 deletions

View File

@@ -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();
}
/**

View File

@@ -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();