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