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) {
|
if (p == PEEKED_END_ARRAY) {
|
||||||
stackSize--;
|
stackSize--;
|
||||||
|
pathIndices[stackSize - 1]++;
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException("Expected END_ARRAY but was " + peek()
|
throw new IllegalStateException("Expected END_ARRAY but was " + peek()
|
||||||
@ -400,6 +401,7 @@ public class JsonReader implements Closeable {
|
|||||||
if (p == PEEKED_END_OBJECT) {
|
if (p == PEEKED_END_OBJECT) {
|
||||||
stackSize--;
|
stackSize--;
|
||||||
pathNames[stackSize] = null; // Free the last path name so that it can be garbage collected!
|
pathNames[stackSize] = null; // Free the last path name so that it can be garbage collected!
|
||||||
|
pathIndices[stackSize - 1]++;
|
||||||
peeked = PEEKED_NONE;
|
peeked = PEEKED_NONE;
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalStateException("Expected END_OBJECT but was " + peek()
|
throw new IllegalStateException("Expected END_OBJECT but was " + peek()
|
||||||
|
@ -48,13 +48,13 @@ public class JsonReaderPathTest extends TestCase {
|
|||||||
reader.nextString();
|
reader.nextString();
|
||||||
assertEquals("$.a[5].c", reader.getPath());
|
assertEquals("$.a[5].c", reader.getPath());
|
||||||
reader.endObject();
|
reader.endObject();
|
||||||
assertEquals("$.a[5]", reader.getPath());
|
assertEquals("$.a[6]", reader.getPath());
|
||||||
reader.beginArray();
|
reader.beginArray();
|
||||||
assertEquals("$.a[5][0]", reader.getPath());
|
assertEquals("$.a[6][0]", reader.getPath());
|
||||||
reader.nextInt();
|
reader.nextInt();
|
||||||
assertEquals("$.a[5][1]", reader.getPath());
|
assertEquals("$.a[6][1]", reader.getPath());
|
||||||
reader.endArray();
|
reader.endArray();
|
||||||
assertEquals("$.a[5]", reader.getPath());
|
assertEquals("$.a[7]", reader.getPath());
|
||||||
reader.endArray();
|
reader.endArray();
|
||||||
assertEquals("$.a", reader.getPath());
|
assertEquals("$.a", reader.getPath());
|
||||||
reader.endObject();
|
reader.endObject();
|
||||||
@ -173,4 +173,44 @@ public class JsonReaderPathTest extends TestCase {
|
|||||||
reader.skipValue();
|
reader.skipValue();
|
||||||
assertEquals("$[1]", reader.getPath());
|
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