WrapWithPath1724Test.java
package tools.jackson.core.unittest;
import java.lang.reflect.InvocationTargetException;
import org.junit.jupiter.api.Test;
import tools.jackson.core.JacksonException;
import tools.jackson.core.TokenStreamLocation;
import tools.jackson.core.exc.StreamReadException;
import static org.junit.jupiter.api.Assertions.*;
class WrapWithPath1724Test
{
@Test
void usesOriginalMessageOfTargetJacksonException()
{
StreamReadException cause = new StreamReadException(null, "Bad value",
new TokenStreamLocation(null, -1L, 2, 3));
cause.prependPath(this, "inner");
InvocationTargetException src = new InvocationTargetException(cause);
JacksonException wrapped = JacksonException.wrapWithPath(src, this, "value");
assertEquals("Bad value", wrapped.getOriginalMessage());
assertSame(src, wrapped.getCause());
assertSame(cause, wrapped.getCause().getCause());
assertEquals(1, wrapped.getPath().size());
assertEquals("value", wrapped.getPath().get(0).getPropertyName());
assertEquals(1, cause.getPath().size());
assertEquals("inner", cause.getPath().get(0).getPropertyName());
}
@Test
void usesTargetTypeWhenTargetMessageIsEmpty()
{
for (String message : new String[] { null, "" }) {
InvocationTargetException src = new InvocationTargetException(
new IllegalStateException(message));
JacksonException wrapped = JacksonException.wrapWithPath(src, this, "value");
assertEquals("(was java.lang.IllegalStateException)", wrapped.getOriginalMessage());
assertSame(src, wrapped.getCause());
}
}
@Test
void retainsTargetMessageAndOriginalCause()
{
InvocationTargetException src = new InvocationTargetException(
new IllegalArgumentException("Bad value"), "Wrapper message");
JacksonException wrapped = JacksonException.wrapWithPath(src, this, 3);
assertEquals("Bad value", wrapped.getOriginalMessage());
assertSame(src, wrapped.getCause());
assertEquals(3, wrapped.getPath().get(0).getIndex());
}
@Test
void handlesInvocationTargetExceptionWithoutCause()
{
InvocationTargetException src = new InvocationTargetException(null, "Wrapper message");
JacksonException wrapped = JacksonException.wrapWithPath(src, this, "value");
assertEquals("Wrapper message", wrapped.getOriginalMessage());
assertSame(src, wrapped.getCause());
src = new InvocationTargetException(null);
wrapped = JacksonException.wrapWithPath(src, this, "value");
assertEquals("(was java.lang.reflect.InvocationTargetException)", wrapped.getOriginalMessage());
assertSame(src, wrapped.getCause());
}
@Test
void prependsPathToExistingJacksonException()
{
JacksonException src = new StreamReadException("Bad value");
src.prependPath(this, "inner");
JacksonException wrapped = JacksonException.wrapWithPath(src, this, "outer");
assertSame(src, wrapped);
assertEquals("Bad value", wrapped.getOriginalMessage());
assertEquals(2, wrapped.getPath().size());
assertEquals("outer", wrapped.getPath().get(0).getPropertyName());
assertEquals("inner", wrapped.getPath().get(1).getPropertyName());
}
}