| package com.fasterxml.jackson.databind.node; |
| |
| import java.io.StringWriter; |
| import java.math.BigDecimal; |
| import java.math.BigInteger; |
| |
| import com.fasterxml.jackson.databind.JsonNode; |
| import com.fasterxml.jackson.databind.ObjectMapper; |
| |
| public class TestNullNode extends NodeTestBase |
| { |
| final static class CovarianceBean { |
| ObjectNode _object; |
| ArrayNode _array; |
| |
| public void setObject(ObjectNode n) { _object = n; } |
| public void setArray(ArrayNode n) { _array = n; } |
| } |
| |
| public void testBasicsWithNullNode() throws Exception |
| { |
| // Let's use something that doesn't add much beyond JsonNode base |
| NullNode n = NullNode.instance; |
| |
| // basic properties |
| assertFalse(n.isContainerNode()); |
| assertFalse(n.isBigDecimal()); |
| assertFalse(n.isBigInteger()); |
| assertFalse(n.isBinary()); |
| assertFalse(n.isBoolean()); |
| assertFalse(n.isPojo()); |
| assertFalse(n.isMissingNode()); |
| |
| // fallback accessors |
| assertFalse(n.booleanValue()); |
| assertNull(n.numberValue()); |
| assertEquals(0, n.intValue()); |
| assertEquals(0L, n.longValue()); |
| assertEquals(BigDecimal.ZERO, n.decimalValue()); |
| assertEquals(BigInteger.ZERO, n.bigIntegerValue()); |
| |
| assertEquals(0, n.size()); |
| assertFalse(n.elements().hasNext()); |
| assertFalse(n.fieldNames().hasNext()); |
| // path is never null; but does point to missing node |
| assertNotNull(n.path("xyz")); |
| assertTrue(n.path("xyz").isMissingNode()); |
| |
| assertFalse(n.has("field")); |
| assertFalse(n.has(3)); |
| |
| assertNodeNumbersForNonNumeric(n); |
| |
| // 2.4 |
| assertEquals("foo", n.asText("foo")); |
| } |
| |
| public void testNullHandling() throws Exception |
| { |
| // First, a stand-alone null |
| JsonNode n = objectReader().readTree("null"); |
| assertNotNull(n); |
| assertTrue(n.isNull()); |
| assertFalse(n.isNumber()); |
| assertFalse(n.isTextual()); |
| assertEquals("null", n.asText()); |
| assertEquals(n, NullNode.instance); |
| |
| n = objectMapper().readTree("null"); |
| assertNotNull(n); |
| assertTrue(n.isNull()); |
| |
| // Then object property |
| ObjectNode root = (ObjectNode) objectReader().readTree("{\"x\":null}"); |
| assertEquals(1, root.size()); |
| n = root.get("x"); |
| assertNotNull(n); |
| assertTrue(n.isNull()); |
| } |
| |
| public void testNullSerialization() throws Exception |
| { |
| ObjectMapper mapper = new ObjectMapper(); |
| StringWriter sw = new StringWriter(); |
| mapper.writeValue(sw, NullNode.instance); |
| assertEquals("null", sw.toString()); |
| } |
| |
| public void testNullHandlingCovariance() throws Exception |
| { |
| String JSON = "{\"object\" : null, \"array\" : null }"; |
| CovarianceBean bean = objectMapper().readValue(JSON, CovarianceBean.class); |
| |
| ObjectNode on = bean._object; |
| assertNull(on); |
| |
| ArrayNode an = bean._array; |
| assertNull(an); |
| } |
| } |