mirror of
https://github.com/fankes/moshi.git
synced 2025-10-20 00:19:21 +08:00
Make selectString consistent across JsonReaders. (#399)
Make JsonValueReader.selectString return -1 for non-strings instead of throwing.
This commit is contained in:
@@ -168,9 +168,18 @@ final class JsonValueReader extends JsonReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override public int selectString(Options options) throws IOException {
|
@Override public int selectString(Options options) throws IOException {
|
||||||
String peeked = require(String.class, Token.STRING);
|
Object peeked = (stackSize != 0 ? stack[stackSize - 1] : null);
|
||||||
|
|
||||||
|
if (!(peeked instanceof String)) {
|
||||||
|
if (peeked == JSON_READER_CLOSED) {
|
||||||
|
throw new IllegalStateException("JsonReader is closed");
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
String peekedString = (String) peeked;
|
||||||
|
|
||||||
for (int i = 0, length = options.strings.length; i < length; i++) {
|
for (int i = 0, length = options.strings.length; i < length; i++) {
|
||||||
if (options.strings[i].equals(peeked)) {
|
if (options.strings[i].equals(peekedString)) {
|
||||||
remove();
|
remove();
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
@@ -852,6 +852,21 @@ public final class JsonReaderTest {
|
|||||||
reader.endArray();
|
reader.endArray();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test public void selectStringWithoutString() throws IOException {
|
||||||
|
JsonReader.Options numbers = JsonReader.Options.of("1", "2.0", "true", "4");
|
||||||
|
|
||||||
|
JsonReader reader = newReader("[0, 2.0, true, \"4\"]");
|
||||||
|
reader.beginArray();
|
||||||
|
assertThat(reader.selectString(numbers)).isEqualTo(-1);
|
||||||
|
reader.skipValue();
|
||||||
|
assertThat(reader.selectString(numbers)).isEqualTo(-1);
|
||||||
|
reader.skipValue();
|
||||||
|
assertThat(reader.selectString(numbers)).isEqualTo(-1);
|
||||||
|
reader.skipValue();
|
||||||
|
assertThat(reader.selectString(numbers)).isEqualTo(3);
|
||||||
|
reader.endArray();
|
||||||
|
}
|
||||||
|
|
||||||
@Test public void stringToNumberCoersion() throws Exception {
|
@Test public void stringToNumberCoersion() throws Exception {
|
||||||
JsonReader reader = newReader("[\"0\", \"9223372036854775807\", \"1.5\"]");
|
JsonReader reader = newReader("[\"0\", \"9223372036854775807\", \"1.5\"]");
|
||||||
reader.beginArray();
|
reader.beginArray();
|
||||||
|
Reference in New Issue
Block a user