package com.fasterxml.jackson.databind.node; import java.io.StringReader; import java.util.Iterator; import com.fasterxml.jackson.core.JsonToken; import com.fasterxml.jackson.databind.JsonNode; public class TestMissingNode extends NodeTestBase { public void testMissing() { MissingNode n = MissingNode.getInstance(); assertTrue(n.isMissingNode()); assertEquals(JsonToken.NOT_AVAILABLE, n.asToken()); assertEquals("", n.asText()); assertStandardEquals(n); assertEquals("", n.toString()); assertNodeNumbersForNonNumeric(n); assertTrue(n.asBoolean(true)); assertEquals(4, n.asInt(4)); assertEquals(5L, n.asLong(5)); assertEquals(0.25, n.asDouble(0.25)); assertEquals("foo", n.asText("foo")); } /** * Let's also verify behavior of "MissingNode" -- one needs to be able * to traverse such bogus nodes with appropriate methods. */ @SuppressWarnings("unused") public void testMissingViaMapper() throws Exception { String JSON = "[ { }, [ ] ]"; JsonNode result = objectMapper().readTree(new StringReader(JSON)); assertTrue(result.isContainerNode()); assertTrue(result.isArray()); assertEquals(2, result.size()); int count = 0; for (JsonNode node : result) { ++count; } assertEquals(2, count); Iterator<JsonNode> it = result.iterator(); JsonNode onode = it.next(); assertTrue(onode.isContainerNode()); assertTrue(onode.isObject()); assertEquals(0, onode.size()); assertFalse(onode.isMissingNode()); // real node assertNull(onode.textValue()); // how about dereferencing? assertNull(onode.get(0)); JsonNode dummyNode = onode.path(0); assertNotNull(dummyNode); assertTrue(dummyNode.isMissingNode()); assertNull(dummyNode.get(3)); assertNull(dummyNode.get("whatever")); JsonNode dummyNode2 = dummyNode.path(98); assertNotNull(dummyNode2); assertTrue(dummyNode2.isMissingNode()); JsonNode dummyNode3 = dummyNode.path("field"); assertNotNull(dummyNode3); assertTrue(dummyNode3.isMissingNode()); // and same for the array node JsonNode anode = it.next(); assertTrue(anode.isContainerNode()); assertTrue(anode.isArray()); assertFalse(anode.isMissingNode()); // real node assertEquals(0, anode.size()); assertNull(anode.get(0)); dummyNode = anode.path(0); assertNotNull(dummyNode); assertTrue(dummyNode.isMissingNode()); assertNull(dummyNode.get(0)); assertNull(dummyNode.get("myfield")); dummyNode2 = dummyNode.path(98); assertNotNull(dummyNode2); assertTrue(dummyNode2.isMissingNode()); dummyNode3 = dummyNode.path("f"); assertNotNull(dummyNode3); assertTrue(dummyNode3.isMissingNode()); } }