package com.fasterxml.jackson.databind.node;
import com.fasterxml.jackson.core.JsonPointer;
import com.fasterxml.jackson.databind.*;
public class TestJsonPointer
extends BaseMapTest
{
public void testIt() throws Exception
{
final JsonNode SAMPLE_ROOT = objectMapper().readTree(SAMPLE_DOC_JSON_SPEC);
// first: "empty" pointer points to context node:
assertSame(SAMPLE_ROOT, SAMPLE_ROOT.at(JsonPointer.compile("")));
// then simple reference
assertTrue(SAMPLE_ROOT.at(JsonPointer.compile("/Image")).isObject());
JsonNode n = SAMPLE_ROOT.at(JsonPointer.compile("/Image/Width"));
assertTrue(n.isNumber());
assertEquals(SAMPLE_SPEC_VALUE_WIDTH, n.asInt());
// ok also with implicit compile() for pointer:
assertEquals(SAMPLE_SPEC_VALUE_HEIGHT,
SAMPLE_ROOT.at("/Image/Height").asInt());
assertEquals(SAMPLE_SPEC_VALUE_TN_ID3,
SAMPLE_ROOT.at(JsonPointer.compile("/Image/IDs/2")).asInt());
// and then check that "missing" paths are ok too but
assertTrue(SAMPLE_ROOT.at("/Image/Depth").isMissingNode());
assertTrue(SAMPLE_ROOT.at("/Image/1").isMissingNode());
}
// To help verify [Core#133]; should be fine with "big numbers" as property keys
public void testLongNumbers() throws Exception
{
// First, with small int key
JsonNode root = objectMapper().readTree("{\"123\" : 456}");
JsonNode jn2 = root.at("/123");
assertEquals(456, jn2.asInt());
// and then with above int-32:
root = objectMapper().readTree("{\"35361706045\" : 1234}");
jn2 = root.at("/35361706045");
assertEquals(1234, jn2.asInt());
}
}