aboutsummaryrefslogtreecommitdiff
path: root/src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java')
-rw-r--r--src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java221
1 files changed, 221 insertions, 0 deletions
diff --git a/src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java b/src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java
new file mode 100644
index 000000000..8572635bc
--- /dev/null
+++ b/src/test/java/com/fasterxml/jackson/databind/util/ClassUtilTest.java
@@ -0,0 +1,221 @@
+package com.fasterxml.jackson.databind.util;
+
+import java.util.*;
+
+import com.fasterxml.jackson.databind.BaseMapTest;
+import com.fasterxml.jackson.databind.util.ClassUtil;
+
+public class ClassUtilTest extends BaseMapTest
+{
+ /*
+ /**********************************************************
+ /* Test classes, enums
+ /**********************************************************
+ */
+
+ /* Test classes and interfaces needed for testing class util
+ * methods
+ */
+ static abstract class BaseClass implements Comparable<BaseClass>,
+ BaseInt
+ {
+ BaseClass(String str) { }
+ }
+
+ interface BaseInt { }
+
+ interface SubInt extends BaseInt { }
+
+ enum TestEnum { A; }
+
+ abstract class InnerNonStatic { }
+
+ static class Inner {
+ protected Inner() {
+ throw new IllegalStateException("test");
+ }
+ }
+
+ static abstract class SubClass
+ extends BaseClass
+ implements SubInt {
+ SubClass() { super("x"); }
+ }
+
+ static abstract class ConcreteAndAbstract {
+ public abstract void a();
+
+ public void c() { }
+ }
+
+ /*
+ /**********************************************************
+ /* Test methods
+ /**********************************************************
+ */
+
+ public void testIsConcrete() throws Exception
+ {
+ assertTrue(ClassUtil.isConcrete(getClass()));
+ assertFalse(ClassUtil.isConcrete(BaseClass.class));
+ assertFalse(ClassUtil.isConcrete(BaseInt.class));
+
+ assertFalse(ClassUtil.isConcrete(ConcreteAndAbstract.class.getDeclaredMethod("a")));
+ assertTrue(ClassUtil.isConcrete(ConcreteAndAbstract.class.getDeclaredMethod("c")));
+ }
+
+ public void testCanBeABeanType()
+ {
+ assertEquals("annotation", ClassUtil.canBeABeanType(java.lang.annotation.Retention.class));
+ assertEquals("array", ClassUtil.canBeABeanType(String[].class));
+ assertEquals("enum", ClassUtil.canBeABeanType(TestEnum.class));
+ assertEquals("primitive", ClassUtil.canBeABeanType(Integer.TYPE));
+ assertNull(ClassUtil.canBeABeanType(Integer.class));
+
+ assertEquals("non-static member class", ClassUtil.isLocalType(InnerNonStatic.class, false));
+ assertNull(ClassUtil.isLocalType(Integer.class, false));
+ }
+
+ public void testExceptionHelpers()
+ {
+ RuntimeException e = new RuntimeException("test");
+ RuntimeException wrapper = new RuntimeException(e);
+
+ assertSame(e, ClassUtil.getRootCause(wrapper));
+
+ try {
+ ClassUtil.throwAsIAE(e);
+ fail("Shouldn't get this far");
+ } catch (RuntimeException e2) {
+ assertSame(e, e2);
+ }
+
+ try {
+ ClassUtil.throwRootCause(e);
+ fail("Shouldn't get this far");
+ } catch (Exception eAct) {
+ assertSame(e, eAct);
+ }
+
+ Error err = new Error();
+ try {
+ ClassUtil.throwAsIAE(err);
+ fail("Shouldn't get this far");
+ } catch (Error errAct) {
+ assertSame(err, errAct);
+ }
+
+ try {
+ ClassUtil.unwrapAndThrowAsIAE(wrapper);
+ fail("Shouldn't get this far");
+ } catch (RuntimeException e2) {
+ assertSame(e, e2);
+ }
+ }
+
+ public void testFailedCreateInstance()
+ {
+ try {
+ ClassUtil.createInstance(BaseClass.class, true);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "has no default");
+ }
+
+ try {
+ // false means ctor would need to be public
+ ClassUtil.createInstance(Inner.class, false);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "is not accessible");
+ }
+
+ // and finally, check that we'll get expected exception...
+ try {
+ ClassUtil.createInstance(Inner.class, true);
+ } catch (IllegalStateException e) {
+ verifyException(e, "test");
+ }
+ }
+
+ public void testPrimitiveDefaultValue()
+ {
+ assertEquals(Integer.valueOf(0), ClassUtil.defaultValue(Integer.TYPE));
+ assertEquals(Long.valueOf(0L), ClassUtil.defaultValue(Long.TYPE));
+ assertEquals(Character.valueOf('\0'), ClassUtil.defaultValue(Character.TYPE));
+ assertEquals(Short.valueOf((short) 0), ClassUtil.defaultValue(Short.TYPE));
+ assertEquals(Byte.valueOf((byte) 0), ClassUtil.defaultValue(Byte.TYPE));
+
+ assertEquals(Double.valueOf(0.0), ClassUtil.defaultValue(Double.TYPE));
+ assertEquals(Float.valueOf(0.0f), ClassUtil.defaultValue(Float.TYPE));
+
+ assertEquals(Boolean.FALSE, ClassUtil.defaultValue(Boolean.TYPE));
+
+ try {
+ ClassUtil.defaultValue(String.class);
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "String is not a primitive type");
+ }
+ }
+
+ public void testPrimitiveWrapperType()
+ {
+ assertEquals(Byte.class, ClassUtil.wrapperType(Byte.TYPE));
+ assertEquals(Short.class, ClassUtil.wrapperType(Short.TYPE));
+ assertEquals(Character.class, ClassUtil.wrapperType(Character.TYPE));
+ assertEquals(Integer.class, ClassUtil.wrapperType(Integer.TYPE));
+ assertEquals(Long.class, ClassUtil.wrapperType(Long.TYPE));
+
+ assertEquals(Double.class, ClassUtil.wrapperType(Double.TYPE));
+ assertEquals(Float.class, ClassUtil.wrapperType(Float.TYPE));
+
+ assertEquals(Boolean.class, ClassUtil.wrapperType(Boolean.TYPE));
+
+ try {
+ ClassUtil.wrapperType(String.class);
+ fail("Should not pass");
+ } catch (IllegalArgumentException e) {
+ verifyException(e, "String is not a primitive type");
+ }
+ }
+
+ public void testWrapperToPrimitiveType()
+ {
+ assertEquals(Integer.TYPE, ClassUtil.primitiveType(Integer.class));
+ assertEquals(Long.TYPE, ClassUtil.primitiveType(Long.class));
+ assertEquals(Character.TYPE, ClassUtil.primitiveType(Character.class));
+ assertEquals(Short.TYPE, ClassUtil.primitiveType(Short.class));
+ assertEquals(Byte.TYPE, ClassUtil.primitiveType(Byte.class));
+ assertEquals(Float.TYPE, ClassUtil.primitiveType(Float.class));
+ assertEquals(Double.TYPE, ClassUtil.primitiveType(Double.class));
+ assertEquals(Boolean.TYPE, ClassUtil.primitiveType(Boolean.class));
+
+ assertNull(ClassUtil.primitiveType(String.class));
+ }
+
+ public void testFindEnumType()
+ {
+ assertEquals(TestEnum.class, ClassUtil.findEnumType(TestEnum.A));
+ assertEquals(TestEnum.class, ClassUtil.findEnumType(EnumSet.allOf(TestEnum.class)));
+ assertEquals(TestEnum.class, ClassUtil.findEnumType(new EnumMap<TestEnum,Integer>(TestEnum.class)));
+ }
+
+ public void testDescs()
+ {
+ final String exp = String.class.getName();
+ assertEquals(exp, ClassUtil.getClassDescription("foo"));
+ assertEquals(exp, ClassUtil.getClassDescription(String.class));
+ }
+
+ @SuppressWarnings("deprecation")
+ public void testFindClass() throws Exception
+ {
+ assertEquals(Integer.TYPE, ClassUtil.findClass("int"));
+ assertEquals(Long.TYPE, ClassUtil.findClass("long"));
+ assertEquals(Byte.TYPE, ClassUtil.findClass("byte"));
+ assertEquals(Short.TYPE, ClassUtil.findClass("short"));
+ assertEquals(Character.TYPE, ClassUtil.findClass("char"));
+ assertEquals(Float.TYPE, ClassUtil.findClass("float"));
+ assertEquals(Double.TYPE, ClassUtil.findClass("double"));
+ assertEquals(Boolean.TYPE, ClassUtil.findClass("boolean"));
+ assertEquals(Void.TYPE, ClassUtil.findClass("void"));
+ }
+}