package com.fasterxml.jackson.databind.exc;
import java.io.StringWriter;
import java.util.Collection;
import java.util.Collections;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.introspect.BeanPropertyDefinition;
import com.fasterxml.jackson.databind.type.TypeFactory;
public class BasicExceptionTest extends BaseMapTest
{
final ObjectMapper MAPPER = new ObjectMapper();
final JsonFactory JSON_F = MAPPER.getFactory();
public void testBadDefinition() throws Exception
{
JavaType t = TypeFactory.defaultInstance().constructType(String.class);
JsonParser p = JSON_F.createParser("[]");
InvalidDefinitionException e = new InvalidDefinitionException(p,
"Testing", t);
assertEquals("Testing", e.getOriginalMessage());
assertEquals(String.class, e.getType().getRawClass());
assertNull(e.getBeanDescription());
assertNull(e.getProperty());
assertSame(p, e.getProcessor());
p.close();
// and via factory method:
BeanDescription beanDef = MAPPER.getSerializationConfig().introspectClassAnnotations(getClass());
e = InvalidDefinitionException.from(p, "Testing",
beanDef, (BeanPropertyDefinition) null);
assertEquals(beanDef.getType(), e.getType());
assertNotNull(e);
// and the other constructor too
JsonGenerator g = JSON_F.createGenerator(new StringWriter());
e = new InvalidDefinitionException(p,
"Testing", t);
assertEquals("Testing", e.getOriginalMessage());
assertEquals(String.class, e.getType().getRawClass());
// and factory
e = InvalidDefinitionException.from(g, "Testing",
beanDef, (BeanPropertyDefinition) null);
assertEquals(beanDef.getType(), e.getType());
assertNotNull(e);
g.close();
}
@SuppressWarnings("deprecation")
public void testInvalidFormat() throws Exception
{
// deprecated methods should still work:
InvalidFormatException e = new InvalidFormatException("Testing", Boolean.TRUE,
String.class);
assertSame(Boolean.TRUE, e.getValue());
assertNull(e.getProcessor());
assertNotNull(e);
e = new InvalidFormatException("Testing", JsonLocation.NA,
Boolean.TRUE, String.class);
assertSame(Boolean.TRUE, e.getValue());
assertNull(e.getProcessor());
assertNotNull(e);
}
public void testIgnoredProperty() throws Exception
{
// first just construct valid instance with some variations
JsonParser p = JSON_F.createParser("{ }");
IgnoredPropertyException e = IgnoredPropertyException.from(p,
this, // to get class from
"testProp", Collections.<Object>singletonList("x"));
assertNotNull(e);
e = IgnoredPropertyException.from(p,
getClass(),
"testProp", null);
assertNotNull(e);
assertNull(e.getKnownPropertyIds());
p.close();
// also, verify failure if null passed for "value"
try {
IgnoredPropertyException.from(p, null,
"testProp", Collections.<Object>singletonList("x"));
fail("Should not pass");
} catch (NullPointerException e2) {
}
}
public void testUnrecognizedProperty() throws Exception
{
JsonParser p = JSON_F.createParser("{ }");
UnrecognizedPropertyException e = UnrecognizedPropertyException.from(p, this,
"testProp", Collections.<Object>singletonList("y"));
assertNotNull(e);
assertEquals(getClass(), e.getReferringClass());
Collection<Object> ids = e.getKnownPropertyIds();
assertNotNull(ids);
assertEquals(1, ids.size());
assertTrue(ids.contains("y"));
e = UnrecognizedPropertyException.from(p, getClass(),
"testProp", Collections.<Object>singletonList("y"));
assertEquals(getClass(), e.getReferringClass());
p.close();
}
}