blob: 0c88cdc1553e215a49d6cc54795aedbfac45ed07 [file] [log] [blame]
package com.fasterxml.jackson.databind.node;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
/**
* This unit test suite tries to verify that JsonNode-based trees
* can be deserialized as expected.
*/
public class TestTreeDeserialization
extends BaseMapTest
{
final static class Bean {
int _x;
JsonNode _node;
public void setX(int x) { _x = x; }
public void setNode(JsonNode n) { _node = n; }
}
/*
/**********************************************************
/* Unit tests
/**********************************************************
*/
/**
* This test checks that is possible to mix "regular" Java objects
* and JsonNode.
*/
public void testMixed() throws IOException
{
ObjectMapper om = new ObjectMapper();
String JSON = "{\"node\" : { \"a\" : 3 }, \"x\" : 9 }";
Bean bean = om.readValue(JSON, Bean.class);
assertEquals(9, bean._x);
JsonNode n = bean._node;
assertNotNull(n);
assertEquals(1, n.size());
ObjectNode on = (ObjectNode) n;
assertEquals(3, on.get("a").intValue());
}
/// Verifying [JACKSON-143]
public void testArrayNodeEquality()
{
ArrayNode n1 = new ArrayNode(null);
ArrayNode n2 = new ArrayNode(null);
assertTrue(n1.equals(n2));
assertTrue(n2.equals(n1));
n1.add(TextNode.valueOf("Test"));
assertFalse(n1.equals(n2));
assertFalse(n2.equals(n1));
n2.add(TextNode.valueOf("Test"));
assertTrue(n1.equals(n2));
assertTrue(n2.equals(n1));
}
public void testObjectNodeEquality()
{
ObjectNode n1 = new ObjectNode(null);
ObjectNode n2 = new ObjectNode(null);
assertTrue(n1.equals(n2));
assertTrue(n2.equals(n1));
n1.set("x", TextNode.valueOf("Test"));
assertFalse(n1.equals(n2));
assertFalse(n2.equals(n1));
n2.set("x", TextNode.valueOf("Test"));
assertTrue(n1.equals(n2));
assertTrue(n2.equals(n1));
}
public void testReadFromString() throws Exception
{
String json = "{\"field\":\"{\\\"name\\\":\\\"John Smith\\\"}\"}";
ObjectMapper mapper = new ObjectMapper();
JsonNode jNode = mapper.readValue(json, JsonNode.class);
String generated = mapper.writeValueAsString( jNode); //back slashes are gone
JsonNode out = mapper.readValue( generated, JsonNode.class ); //crashes here
assertTrue(out.isObject());
assertEquals(1, out.size());
String value = out.path("field").asText();
assertNotNull(value);
}
// Issue#186
public void testNullHandling() throws Exception
{
// First, a stand-alone null
JsonNode n = objectReader().readTree("null");
assertNotNull(n);
assertTrue(n.isNull());
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());
}
final static class CovarianceBean {
ObjectNode _object;
ArrayNode _array;
public void setObject(ObjectNode n) { _object = n; }
public void setArray(ArrayNode n) { _array = n; }
}
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);
}
}