Fix bugs in getPath() with arrays of objects and arrays of arrays
This commit is contained in:
parent
f2591b6664
commit
d6c8c1e3cf
@ -363,6 +363,7 @@ public class JsonReader implements Closeable {
|
||||
}
|
||||
if (p == PEEKED_END_ARRAY) {
|
||||
stackSize--;
|
||||
pathIndices[stackSize - 1]++;
|
||||
peeked = PEEKED_NONE;
|
||||
} else {
|
||||
throw new IllegalStateException("Expected END_ARRAY but was " + peek()
|
||||
@ -400,6 +401,7 @@ public class JsonReader implements Closeable {
|
||||
if (p == PEEKED_END_OBJECT) {
|
||||
stackSize--;
|
||||
pathNames[stackSize] = null; // Free the last path name so that it can be garbage collected!
|
||||
pathIndices[stackSize - 1]++;
|
||||
peeked = PEEKED_NONE;
|
||||
} else {
|
||||
throw new IllegalStateException("Expected END_OBJECT but was " + peek()
|
||||
|
@ -48,13 +48,13 @@ public class JsonReaderPathTest extends TestCase {
|
||||
reader.nextString();
|
||||
assertEquals("$.a[5].c", reader.getPath());
|
||||
reader.endObject();
|
||||
assertEquals("$.a[5]", reader.getPath());
|
||||
assertEquals("$.a[6]", reader.getPath());
|
||||
reader.beginArray();
|
||||
assertEquals("$.a[5][0]", reader.getPath());
|
||||
assertEquals("$.a[6][0]", reader.getPath());
|
||||
reader.nextInt();
|
||||
assertEquals("$.a[5][1]", reader.getPath());
|
||||
assertEquals("$.a[6][1]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$.a[5]", reader.getPath());
|
||||
assertEquals("$.a[7]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$.a", reader.getPath());
|
||||
reader.endObject();
|
||||
@ -173,4 +173,44 @@ public class JsonReaderPathTest extends TestCase {
|
||||
reader.skipValue();
|
||||
assertEquals("$[1]", reader.getPath());
|
||||
}
|
||||
|
||||
public void testArrayOfObjects() throws IOException {
|
||||
JsonReader reader = new JsonReader(new StringReader("[{},{},{}]"));
|
||||
reader.beginArray();
|
||||
assertEquals("$[0]", reader.getPath());
|
||||
reader.beginObject();
|
||||
assertEquals("$[0].", reader.getPath());
|
||||
reader.endObject();
|
||||
assertEquals("$[1]", reader.getPath());
|
||||
reader.beginObject();
|
||||
assertEquals("$[1].", reader.getPath());
|
||||
reader.endObject();
|
||||
assertEquals("$[2]", reader.getPath());
|
||||
reader.beginObject();
|
||||
assertEquals("$[2].", reader.getPath());
|
||||
reader.endObject();
|
||||
assertEquals("$[3]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$", reader.getPath());
|
||||
}
|
||||
|
||||
public void testArrayOfArrays() throws IOException {
|
||||
JsonReader reader = new JsonReader(new StringReader("[[],[],[]]"));
|
||||
reader.beginArray();
|
||||
assertEquals("$[0]", reader.getPath());
|
||||
reader.beginArray();
|
||||
assertEquals("$[0][0]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$[1]", reader.getPath());
|
||||
reader.beginArray();
|
||||
assertEquals("$[1][0]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$[2]", reader.getPath());
|
||||
reader.beginArray();
|
||||
assertEquals("$[2][0]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$[3]", reader.getPath());
|
||||
reader.endArray();
|
||||
assertEquals("$", reader.getPath());
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user