Fix bugs in getPath() with arrays of objects and arrays of arrays

This commit is contained in:
Jesse Wilson 2014-11-11 01:59:48 +00:00
parent f2591b6664
commit d6c8c1e3cf
2 changed files with 46 additions and 4 deletions

View File

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

View File

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