blob: 22f239ad40e754eabd8e3a9359a9335d34d73b80 [file] [log] [blame]
package com.fasterxml.jackson.databind.node;
import com.fasterxml.jackson.core.JsonPointer;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
public class RequiredAccessorTest
extends BaseMapTest
{
private final ObjectMapper MAPPER = sharedMapper();
private final JsonNode TEST_OBJECT, TEST_ARRAY;
public RequiredAccessorTest() throws Exception {
TEST_OBJECT = MAPPER.readTree(aposToQuotes(
"{ 'data' : { 'primary' : 15, 'vector' : [ 'yes', false ], 'nullable' : null },\n"
+" 'array' : [ true, {\"messsage\":'hello', 'value' : 42, 'misc' : [1, 2] }, null, 0.25 ]\n"
+"}"
));
TEST_ARRAY = MAPPER.readTree(aposToQuotes(
"[ true, { 'data' : { 'primary' : 15, 'vector' : [ 'yes', false ] } }, 0.25, 'last' ]"
));
}
public void testIMPORTANT() {
_checkRequiredAt(TEST_OBJECT, "/data/weird/and/more", "/weird/and/more");
}
public void testRequiredAtObjectOk() throws Exception {
assertNotNull(TEST_OBJECT.requiredAt("/array"));
assertNotNull(TEST_OBJECT.requiredAt("/array/0"));
assertTrue(TEST_OBJECT.requiredAt("/array/0").isBoolean());
assertNotNull(TEST_OBJECT.requiredAt("/array/1/misc/1"));
assertEquals(2, TEST_OBJECT.requiredAt("/array/1/misc/1").intValue());
}
public void testRequiredAtArrayOk() throws Exception {
assertTrue(TEST_ARRAY.requiredAt("/0").isBoolean());
assertTrue(TEST_ARRAY.requiredAt("/1").isObject());
assertNotNull(TEST_ARRAY.requiredAt("/1/data/primary"));
assertNotNull(TEST_ARRAY.requiredAt("/1/data/vector/1"));
}
public void testRequiredAtFailOnObject() throws Exception {
_checkRequiredAt(TEST_OBJECT, "/0", "/0");
_checkRequiredAt(TEST_OBJECT, "/bogus", "/bogus");
_checkRequiredAt(TEST_OBJECT, "/data/weird/and/more", "/weird/and/more");
_checkRequiredAt(TEST_OBJECT, "/data/vector/other/3", "/other/3");
}
public void testRequiredAtFailOnArray() throws Exception {
_checkRequiredAt(TEST_ARRAY, "/1/data/vector/25", "/25");
}
private void _checkRequiredAt(JsonNode doc, String fullPath, String mismatchPart) {
try {
doc.requiredAt(fullPath);
} catch (IllegalArgumentException e) {
verifyException(e, "No node at '"+fullPath+"' (unmatched part: '"+mismatchPart+"')");
}
}
public void testSimpleRequireOk() throws Exception {
// first basic working accessors on node itself
assertSame(TEST_OBJECT, TEST_OBJECT.require());
assertSame(TEST_OBJECT, TEST_OBJECT.requireNonNull());
assertSame(TEST_OBJECT, TEST_OBJECT.requiredAt(""));
assertSame(TEST_OBJECT, TEST_OBJECT.requiredAt(JsonPointer.compile("")));
assertSame(TEST_OBJECT.get("data"), TEST_OBJECT.required("data"));
assertSame(TEST_ARRAY.get(0), TEST_ARRAY.required(0));
assertSame(TEST_ARRAY.get(3), TEST_ARRAY.required(3));
// check diff between missing, null nodes
TEST_OBJECT.path("data").path("nullable").require();
try {
JsonNode n = TEST_OBJECT.path("data").path("nullable").requireNonNull();
fail("Should not pass; got: "+n);
} catch (IllegalArgumentException e) {
verifyException(e, "requireNonNull() called on `NullNode`");
}
}
public void testSimpleRequireFail() throws Exception {
try {
TEST_OBJECT.required("bogus");
fail("Should not pass");
} catch (IllegalArgumentException e) {
verifyException(e, "No value for property 'bogus'");
}
try {
TEST_ARRAY.required("bogus");
fail("Should not pass");
} catch (IllegalArgumentException e) {
verifyException(e, "Node of type `ArrayNode` has no fields");
}
}
}