blob: edde02c6cf71d9234c83ba2c975e7da4586a7cdc [file] [log] [blame]
package com.fasterxml.jackson.core;
public class TestJsonPointer extends BaseTest
{
public void testSimplePath() throws Exception
{
final String INPUT = "/Image/15/name";
JsonPointer ptr = JsonPointer.compile(INPUT);
assertFalse(ptr.matches());
assertEquals(-1, ptr.getMatchingIndex());
assertEquals("Image", ptr.getMatchingProperty());
assertEquals("/Image/15", ptr.head().toString());
assertEquals(INPUT, ptr.toString());
ptr = ptr.tail();
assertNotNull(ptr);
assertFalse(ptr.matches());
assertEquals(15, ptr.getMatchingIndex());
assertEquals("15", ptr.getMatchingProperty());
assertEquals("/15", ptr.head().toString());
assertEquals("/15/name", ptr.toString());
assertEquals("", ptr.head().head().toString());
assertNull(ptr.head().head().head());
ptr = ptr.tail();
assertNotNull(ptr);
assertFalse(ptr.matches());
assertEquals(-1, ptr.getMatchingIndex());
assertEquals("name", ptr.getMatchingProperty());
assertEquals("/name", ptr.toString());
assertEquals("", ptr.head().toString());
// done!
ptr = ptr.tail();
assertTrue(ptr.matches());
assertNull(ptr.tail());
assertEquals("", ptr.getMatchingProperty());
assertEquals(-1, ptr.getMatchingIndex());
}
public void testWonkyNumber173() throws Exception
{
JsonPointer ptr = JsonPointer.compile("/1e0");
assertFalse(ptr.matches());
}
public void testLast()
{
final String INPUT = "/Image/15/name";
JsonPointer ptr = JsonPointer.compile(INPUT);
JsonPointer leaf = ptr.last();
assertEquals("name", leaf.getMatchingProperty());
}
public void testAppend()
{
final String INPUT = "/Image/15/name";
final String APPEND = "/extension";
JsonPointer ptr = JsonPointer.compile(INPUT);
JsonPointer apd = JsonPointer.compile(APPEND);
JsonPointer appended = ptr.append(apd);
assertEquals("extension", appended.last().getMatchingProperty());
}
public void testAppendWithFinalSlash()
{
final String INPUT = "/Image/15/name/";
final String APPEND = "/extension";
JsonPointer ptr = JsonPointer.compile(INPUT);
JsonPointer apd = JsonPointer.compile(APPEND);
JsonPointer appended = ptr.append(apd);
assertEquals("extension", appended.last().getMatchingProperty());
}
public void testQuotedPath() throws Exception
{
final String INPUT = "/w~1out/til~0de/a~1b";
JsonPointer ptr = JsonPointer.compile(INPUT);
assertFalse(ptr.matches());
assertEquals(-1, ptr.getMatchingIndex());
assertEquals("w/out", ptr.getMatchingProperty());
assertEquals("/w~1out/til~0de", ptr.head().toString());
assertEquals(INPUT, ptr.toString());
ptr = ptr.tail();
assertNotNull(ptr);
assertFalse(ptr.matches());
assertEquals(-1, ptr.getMatchingIndex());
assertEquals("til~de", ptr.getMatchingProperty());
assertEquals("/til~0de", ptr.head().toString());
assertEquals("/til~0de/a~1b", ptr.toString());
ptr = ptr.tail();
assertNotNull(ptr);
assertFalse(ptr.matches());
assertEquals(-1, ptr.getMatchingIndex());
assertEquals("a/b", ptr.getMatchingProperty());
assertEquals("/a~1b", ptr.toString());
assertEquals("", ptr.head().toString());
// done!
ptr = ptr.tail();
assertTrue(ptr.matches());
assertNull(ptr.tail());
}
// [Issue#133]
public void testLongNumbers() throws Exception
{
final long LONG_ID = ((long) Integer.MAX_VALUE) + 1L;
final String INPUT = "/User/"+LONG_ID;
JsonPointer ptr = JsonPointer.compile(INPUT);
assertEquals("User", ptr.getMatchingProperty());
assertEquals(INPUT, ptr.toString());
ptr = ptr.tail();
assertNotNull(ptr);
assertFalse(ptr.matches());
/* 14-Mar-2014, tatu: We do not support array indexes beyond 32-bit
* range; can still match textually of course.
*/
assertEquals(-1, ptr.getMatchingIndex());
assertEquals(String.valueOf(LONG_ID), ptr.getMatchingProperty());
// done!
ptr = ptr.tail();
assertTrue(ptr.matches());
assertNull(ptr.tail());
}
}