blob: 6097447231e9d8aea344958c34e1482db75c449e [file] [log] [blame]
package org.codehaus.jackson.map.tree;
import main.BaseTest;
import java.util.*;
import org.codehaus.jackson.*;
import org.codehaus.jackson.map.*;
import org.codehaus.jackson.node.*;
/**
* Unit tests to verify that Json Objects map property to Map-like
* ObjectNodes.
*/
public class TestTreeMapperMaps
extends BaseTest
{
public void testSimpleObject() throws Exception
{
String JSON = "{ \"key\" : 1, \"b\" : \"x\" }";
ObjectMapper mapper = new ObjectMapper();
JsonNode root = mapper.readTree(JSON);
// basic properties first:
assertFalse(root.isValueNode());
assertTrue(root.isContainerNode());
assertFalse(root.isArray());
assertTrue(root.isObject());
assertEquals(2, root.size());
// Related to [JACKSON-50]:
Iterator<JsonNode> it = root.iterator();
assertNotNull(it);
assertTrue(it.hasNext());
JsonNode n = it.next();
assertNotNull(n);
assertEquals(IntNode.valueOf(1), n);
assertTrue(it.hasNext());
n = it.next();
assertNotNull(n);
assertEquals(TextNode.valueOf("x"), n);
assertFalse(it.hasNext());
// Ok, then, let's traverse via extended interface
ObjectNode obNode = (ObjectNode) root;
Iterator<Map.Entry<String,JsonNode>> fit = obNode.getFields();
// we also know that LinkedHashMap is used, i.e. order preserved
assertTrue(fit.hasNext());
Map.Entry<String,JsonNode> en = fit.next();
assertEquals("key", en.getKey());
assertEquals(IntNode.valueOf(1), en.getValue());
assertTrue(fit.hasNext());
en = fit.next();
assertEquals("b", en.getKey());
assertEquals(TextNode.valueOf("x"), en.getValue());
// Plus: we should be able to modify the node via iterator too:
fit.remove();
assertEquals(1, obNode.size());
assertEquals(IntNode.valueOf(1), root.get("key"));
assertNull(root.get("b"));
}
public void testSimplePath() throws Exception
{
JsonNode root = new ObjectMapper().readTree("{ \"results\" : { \"a\" : 3 } }");
assertTrue(root.isObject());
JsonNode rnode = root.path("results");
assertNotNull(rnode);
assertTrue(rnode.isObject());
assertEquals(3, rnode.path("a").getIntValue());
}
}