This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-lang.git
commit 62e8c58129813811fea5da0d180c88559490778d Author: Gary Gregory <garydgreg...@gmail.com> AuthorDate: Wed Jan 24 22:13:51 2024 -0500 Sort members --- .../commons/lang3/builder/ConversionTest.java | 8 +- .../commons/lang3/builder/DiffResultTest.java | 10 +- .../commons/lang3/reflect/TypeUtilsTest.java | 372 ++++++++++----------- 3 files changed, 195 insertions(+), 195 deletions(-) diff --git a/src/test/java/org/apache/commons/lang3/builder/ConversionTest.java b/src/test/java/org/apache/commons/lang3/builder/ConversionTest.java index 7143e2c72..36b4a8543 100644 --- a/src/test/java/org/apache/commons/lang3/builder/ConversionTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/ConversionTest.java @@ -31,13 +31,13 @@ class ConversionTest { } @Test - void testHexToByte_nullString() { - assertThrows(NullPointerException.class, () -> Conversion.hexToByte(null, 0, (byte) 0, 0, 2)); + void testHexToByte_IllegalArgument() { + assertThrows(IllegalArgumentException.class, () -> Conversion.hexToByte("A0", 0, (byte) 0, 4, 2)); } @Test - void testHexToByte_IllegalArgument() { - assertThrows(IllegalArgumentException.class, () -> Conversion.hexToByte("A0", 0, (byte) 0, 4, 2)); + void testHexToByte_nullString() { + assertThrows(NullPointerException.class, () -> Conversion.hexToByte(null, 0, (byte) 0, 0, 2)); } } diff --git a/src/test/java/org/apache/commons/lang3/builder/DiffResultTest.java b/src/test/java/org/apache/commons/lang3/builder/DiffResultTest.java index 2f3f19cc6..e76251184 100644 --- a/src/test/java/org/apache/commons/lang3/builder/DiffResultTest.java +++ b/src/test/java/org/apache/commons/lang3/builder/DiffResultTest.java @@ -132,32 +132,32 @@ public class DiffResultTest extends AbstractLangTest { } @Test - public void testToStringOutput() { + public void testToStringFormat() { // @formatter:off final DiffResult<EmptyClass> result = DiffBuilder.<EmptyClass>builder() .setLeft(new EmptyClass()) .setRight(new EmptyClass()) .setStyle(ToStringStyle.SHORT_PREFIX_STYLE) + .setToStringFormat("%s <> %s") .build() .append("test", false, true) .build(); // @formatter:on - assertEquals("DiffResultTest.EmptyClass[test=false] differs from DiffResultTest.EmptyClass[test=true]", result.toString()); + assertEquals("DiffResultTest.EmptyClass[test=false] <> DiffResultTest.EmptyClass[test=true]", result.toString()); } @Test - public void testToStringFormat() { + public void testToStringOutput() { // @formatter:off final DiffResult<EmptyClass> result = DiffBuilder.<EmptyClass>builder() .setLeft(new EmptyClass()) .setRight(new EmptyClass()) .setStyle(ToStringStyle.SHORT_PREFIX_STYLE) - .setToStringFormat("%s <> %s") .build() .append("test", false, true) .build(); // @formatter:on - assertEquals("DiffResultTest.EmptyClass[test=false] <> DiffResultTest.EmptyClass[test=true]", result.toString()); + assertEquals("DiffResultTest.EmptyClass[test=false] differs from DiffResultTest.EmptyClass[test=true]", result.toString()); } @Test diff --git a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java index b01ee870f..ce5051413 100644 --- a/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/reflect/TypeUtilsTest.java @@ -163,6 +163,10 @@ public class TypeUtilsTest<B> extends AbstractLangTest { } } + /** This non-static inner class is parameterized. */ + private class MyInnerClass<T> { + } + public class Other<T> implements This<String, T> { } @@ -229,6 +233,11 @@ public class TypeUtilsTest<B> extends AbstractLangTest { public Iterable<? extends Map<Integer, ? extends Collection<?>>> iterable; + /** The inner class is used as a return type from a method. */ + private <U> MyInnerClass<U> aMethod() { + return null; + } + @Test public void test_LANG_1114() throws NoSuchFieldException { final Type nonWildcardType = getClass().getDeclaredField("wildcardComparable").getGenericType(); @@ -283,22 +292,6 @@ public class TypeUtilsTest<B> extends AbstractLangTest { assertEquals("java.util.function.Function<? super T, ? extends U>", typeName); } - @Test - public void test_LANG_820() { - final Type[] typeArray = {String.class, String.class}; - final Type[] expectedArray = {String.class}; - assertArrayEquals(expectedArray, TypeUtils.normalizeUpperBounds(typeArray)); - } - - /** This non-static inner class is parameterized. */ - private class MyInnerClass<T> { - } - - /** The inner class is used as a return type from a method. */ - private <U> MyInnerClass<U> aMethod() { - return null; - } - @Test public void test_LANG_1702() throws NoSuchMethodException, SecurityException { final Type type = TypeUtilsTest.class.getDeclaredMethod("aMethod").getGenericReturnType(); @@ -310,6 +303,13 @@ public class TypeUtilsTest<B> extends AbstractLangTest { final Type unrolledType = TypeUtils.unrollVariables(typeArguments, type); } + @Test + public void test_LANG_820() { + final Type[] typeArray = {String.class, String.class}; + final Type[] expectedArray = {String.class}; + assertArrayEquals(expectedArray, TypeUtils.normalizeUpperBounds(typeArray)); + } + @Test public void testContainsTypeVariables() throws NoSuchMethodException { assertFalse(TypeUtils.containsTypeVariables(Test1.class.getMethod("m0").getGenericReturnType())); @@ -582,82 +582,130 @@ public class TypeUtilsTest<B> extends AbstractLangTest { } @Test - public void testIsAssignableGenericComparableTypes() throws NoSuchFieldException { - final Type intComparableType = getClass().getField("intComparable").getGenericType(); - assertTrue(TypeUtils.isAssignable(int.class, intComparableType)); + public void testIsAssignableDirectClassHierarchy() throws NoSuchFieldException { + final Type bClassType = AClass.class.getField("bClass").getGenericType(); // B is superclass + final Type cClassType = AClass.class.getField("cClass").getGenericType(); // C subclass of B + final Type dClassType = AClass.class.getField("dClass").getGenericType(); // D subclass of C + final Type eClassType = AClass.class.getField("eClass").getGenericType(); // E subclass of D + final Type fClassType = AClass.class.getField("fClass").getGenericType(); // F subclass of E - final Type longComparableType = getClass().getField("longComparable").getGenericType(); - assertFalse(TypeUtils.isAssignable(int.class, longComparableType)); - assertFalse(TypeUtils.isAssignable(Integer.class, longComparableType)); + assertTrue(TypeUtils.isAssignable(cClassType, bClassType)); + assertTrue(TypeUtils.isAssignable(dClassType, bClassType)); + assertTrue(TypeUtils.isAssignable(eClassType, bClassType)); + assertTrue(TypeUtils.isAssignable(fClassType, bClassType)); - final Type intComparableArrayType = getClass().getField("intWildcardComparable").getGenericType(); - assertTrue(TypeUtils.isAssignable(Integer[].class, intComparableArrayType)); + assertTrue(TypeUtils.isAssignable(dClassType, cClassType)); + assertTrue(TypeUtils.isAssignable(eClassType, cClassType)); + assertTrue(TypeUtils.isAssignable(fClassType, cClassType)); + + assertTrue(TypeUtils.isAssignable(eClassType, dClassType)); + assertTrue(TypeUtils.isAssignable(fClassType, dClassType)); + + assertTrue(TypeUtils.isAssignable(fClassType, eClassType)); } @Test - public void testIsAssignableGenericListTypes() throws NoSuchFieldException { - final Type rawListType = GenericTypeHolder.class.getDeclaredField("rawList").getGenericType(); - final Type objectListType = GenericTypeHolder.class.getDeclaredField("objectList").getGenericType(); - final Type unboundListType = GenericTypeHolder.class.getDeclaredField("unboundList").getGenericType(); - final Type superObjectListType = GenericTypeHolder.class.getDeclaredField("superObjectList").getGenericType(); - final Type stringListType = GenericTypeHolder.class.getDeclaredField("stringList").getGenericType(); - final Type subStringListType = GenericTypeHolder.class.getDeclaredField("subStringList").getGenericType(); - final Type superStringListType = GenericTypeHolder.class.getDeclaredField("superStringList").getGenericType(); + public void testIsAssignableGenericArrayTypeToObject() { + final Class<Constructor> rawClass = Constructor.class; + final Class<Insets> typeArgClass = Insets.class; + // Builds a ParameterizedType for Constructor<Insets> + final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); + assertEquals(rawClass, paramType.getRawType()); + assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); - assertTrue(TypeUtils.isAssignable(rawListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, objectListType)); - assertTrue(TypeUtils.isAssignable(objectListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, unboundListType)); - assertTrue(TypeUtils.isAssignable(unboundListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, superObjectListType)); - assertTrue(TypeUtils.isAssignable(superObjectListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, stringListType)); - assertTrue(TypeUtils.isAssignable(stringListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, subStringListType)); - assertTrue(TypeUtils.isAssignable(subStringListType, rawListType)); - assertTrue(TypeUtils.isAssignable(rawListType, superStringListType)); - assertTrue(TypeUtils.isAssignable(superStringListType, rawListType)); + assertTrue(Object.class.isAssignableFrom(paramType.getClass())); + assertFalse(paramType.getClass().isAssignableFrom(Object.class)); - assertTrue(TypeUtils.isAssignable(objectListType, objectListType)); - assertTrue(TypeUtils.isAssignable(objectListType, unboundListType)); - assertFalse(TypeUtils.isAssignable(unboundListType, objectListType)); - assertTrue(TypeUtils.isAssignable(objectListType, superObjectListType)); - assertFalse(TypeUtils.isAssignable(superObjectListType, objectListType)); - assertFalse(TypeUtils.isAssignable(objectListType, stringListType)); - assertFalse(TypeUtils.isAssignable(stringListType, objectListType)); - assertFalse(TypeUtils.isAssignable(objectListType, subStringListType)); - assertFalse(TypeUtils.isAssignable(subStringListType, objectListType)); - assertTrue(TypeUtils.isAssignable(objectListType, superStringListType)); - assertFalse(TypeUtils.isAssignable(superStringListType, objectListType)); + final Type testType = Object.class; + assertTrue(TypeUtils.isAssignable(paramType, testType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); + assertFalse(TypeUtils.isAssignable(testType, paramType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); + } - assertTrue(TypeUtils.isAssignable(unboundListType, unboundListType)); - assertFalse(TypeUtils.isAssignable(unboundListType, superObjectListType)); - assertTrue(TypeUtils.isAssignable(superObjectListType, unboundListType)); - assertFalse(TypeUtils.isAssignable(unboundListType, stringListType)); - assertTrue(TypeUtils.isAssignable(stringListType, unboundListType)); - assertFalse(TypeUtils.isAssignable(unboundListType, subStringListType)); - assertTrue(TypeUtils.isAssignable(subStringListType, unboundListType)); - assertFalse(TypeUtils.isAssignable(unboundListType, superStringListType)); - assertTrue(TypeUtils.isAssignable(superStringListType, unboundListType)); + @Test + public void testIsAssignableGenericArrayTypeToParameterizedType() { + final Class<Constructor> rawClass = Constructor.class; + final Class<Insets> typeArgClass = Insets.class; + // Builds a ParameterizedType for Constructor<Insets> + final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); + assertEquals(rawClass, paramType.getRawType()); + assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); - assertTrue(TypeUtils.isAssignable(superObjectListType, superObjectListType)); - assertFalse(TypeUtils.isAssignable(superObjectListType, stringListType)); - assertFalse(TypeUtils.isAssignable(stringListType, superObjectListType)); - assertFalse(TypeUtils.isAssignable(superObjectListType, subStringListType)); - assertFalse(TypeUtils.isAssignable(subStringListType, superObjectListType)); - assertTrue(TypeUtils.isAssignable(superObjectListType, superStringListType)); - assertFalse(TypeUtils.isAssignable(superStringListType, superObjectListType)); + assertFalse(GenericArrayType.class.isAssignableFrom(paramType.getClass())); + assertFalse(paramType.getClass().isAssignableFrom(GenericArrayType.class)); - assertTrue(TypeUtils.isAssignable(stringListType, stringListType)); - assertTrue(TypeUtils.isAssignable(stringListType, subStringListType)); - assertFalse(TypeUtils.isAssignable(subStringListType, stringListType)); - assertTrue(TypeUtils.isAssignable(stringListType, superStringListType)); - assertFalse(TypeUtils.isAssignable(superStringListType, stringListType)); + final GenericArrayType testType = TypeUtils.genericArrayType(paramType); + assertFalse(TypeUtils.isAssignable(paramType, testType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); + assertFalse(TypeUtils.isAssignable(testType, paramType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); + } - assertTrue(TypeUtils.isAssignable(subStringListType, subStringListType)); - assertFalse(TypeUtils.isAssignable(subStringListType, superStringListType)); - assertFalse(TypeUtils.isAssignable(superStringListType, subStringListType)); - assertTrue(TypeUtils.isAssignable(superStringListType, superStringListType)); + @Test + @Disabled("TODO") + public void testIsAssignableGenericArrayTypeToWildcardType() { + final Class<Constructor> rawClass = Constructor.class; + final Class<Insets> typeArgClass = Insets.class; + // Builds a ParameterizedType for Constructor<Insets> + final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); + assertEquals(rawClass, paramType.getRawType()); + assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); + + assertFalse(WildcardType.class.isAssignableFrom(paramType.getClass())); + assertFalse(paramType.getClass().isAssignableFrom(WildcardType.class)); + + final WildcardType testType = TypeUtils.WILDCARD_ALL; + // TODO This test returns true unlike the test above. + // Is this a bug in this test or in the main code? + assertFalse(TypeUtils.isAssignable(paramType, testType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); + assertFalse(TypeUtils.isAssignable(testType, paramType), + () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); + } + + @Test + public void testIsAssignableGenericClassHierarchy() throws NoSuchFieldException { + /* + * <<This>> + * / / \ \ + * <<And>> That Other Tester + * \ / | + * The Thing + */ + final Type disType = getClass().getField("dis").getGenericType(); // This is superinterface + final Type datType = getClass().getField("dat").getGenericType(); // That implements This + final Type dat2Type = getClass().getField("dat2").getGenericType(); + final Type dat3Type = getClass().getField("dat3").getGenericType(); + final Type daType = getClass().getField("da").getGenericType(); // The extends That and implements And + final Type uhderType = getClass().getField("uhder").getGenericType(); // Other implements This + final Type dingType = getClass().getField("ding").getGenericType(); // Thing extends Other + final Type testerType = getClass().getField("tester").getGenericType(); // Tester implements This + final Type tester2Type = getClass().getField("tester2").getGenericType(); + + assertTrue(TypeUtils.isAssignable(datType, disType)); + assertFalse(TypeUtils.isAssignable(daType, disType)); + assertTrue(TypeUtils.isAssignable(uhderType, disType)); + assertFalse(TypeUtils.isAssignable(dingType, disType)); + assertTrue(TypeUtils.isAssignable(testerType, disType)); + assertFalse(TypeUtils.isAssignable(tester2Type, disType)); + + assertFalse(TypeUtils.isAssignable(dat2Type, datType)); + assertFalse(TypeUtils.isAssignable(datType, dat2Type)); + assertFalse(TypeUtils.isAssignable(dat3Type, datType)); + } + + @Test + public void testIsAssignableGenericComparableTypes() throws NoSuchFieldException { + final Type intComparableType = getClass().getField("intComparable").getGenericType(); + assertTrue(TypeUtils.isAssignable(int.class, intComparableType)); + + final Type longComparableType = getClass().getField("longComparable").getGenericType(); + assertFalse(TypeUtils.isAssignable(int.class, longComparableType)); + assertFalse(TypeUtils.isAssignable(Integer.class, longComparableType)); + + final Type intComparableArrayType = getClass().getField("intWildcardComparable").getGenericType(); + assertTrue(TypeUtils.isAssignable(Integer[].class, intComparableArrayType)); } @Test @@ -727,117 +775,69 @@ public class TypeUtilsTest<B> extends AbstractLangTest { } @Test - public void testIsAssignableDirectClassHierarchy() throws NoSuchFieldException { - final Type bClassType = AClass.class.getField("bClass").getGenericType(); // B is superclass - final Type cClassType = AClass.class.getField("cClass").getGenericType(); // C subclass of B - final Type dClassType = AClass.class.getField("dClass").getGenericType(); // D subclass of C - final Type eClassType = AClass.class.getField("eClass").getGenericType(); // E subclass of D - final Type fClassType = AClass.class.getField("fClass").getGenericType(); // F subclass of E - - assertTrue(TypeUtils.isAssignable(cClassType, bClassType)); - assertTrue(TypeUtils.isAssignable(dClassType, bClassType)); - assertTrue(TypeUtils.isAssignable(eClassType, bClassType)); - assertTrue(TypeUtils.isAssignable(fClassType, bClassType)); - - assertTrue(TypeUtils.isAssignable(dClassType, cClassType)); - assertTrue(TypeUtils.isAssignable(eClassType, cClassType)); - assertTrue(TypeUtils.isAssignable(fClassType, cClassType)); - - assertTrue(TypeUtils.isAssignable(eClassType, dClassType)); - assertTrue(TypeUtils.isAssignable(fClassType, dClassType)); - - assertTrue(TypeUtils.isAssignable(fClassType, eClassType)); - } - - @Test - public void testIsAssignableGenericClassHierarchy() throws NoSuchFieldException { - /* - * <<This>> - * / / \ \ - * <<And>> That Other Tester - * \ / | - * The Thing - */ - final Type disType = getClass().getField("dis").getGenericType(); // This is superinterface - final Type datType = getClass().getField("dat").getGenericType(); // That implements This - final Type dat2Type = getClass().getField("dat2").getGenericType(); - final Type dat3Type = getClass().getField("dat3").getGenericType(); - final Type daType = getClass().getField("da").getGenericType(); // The extends That and implements And - final Type uhderType = getClass().getField("uhder").getGenericType(); // Other implements This - final Type dingType = getClass().getField("ding").getGenericType(); // Thing extends Other - final Type testerType = getClass().getField("tester").getGenericType(); // Tester implements This - final Type tester2Type = getClass().getField("tester2").getGenericType(); - - assertTrue(TypeUtils.isAssignable(datType, disType)); - assertFalse(TypeUtils.isAssignable(daType, disType)); - assertTrue(TypeUtils.isAssignable(uhderType, disType)); - assertFalse(TypeUtils.isAssignable(dingType, disType)); - assertTrue(TypeUtils.isAssignable(testerType, disType)); - assertFalse(TypeUtils.isAssignable(tester2Type, disType)); - - assertFalse(TypeUtils.isAssignable(dat2Type, datType)); - assertFalse(TypeUtils.isAssignable(datType, dat2Type)); - assertFalse(TypeUtils.isAssignable(dat3Type, datType)); - } - - @Test - public void testIsAssignableGenericArrayTypeToObject() { - final Class<Constructor> rawClass = Constructor.class; - final Class<Insets> typeArgClass = Insets.class; - // Builds a ParameterizedType for Constructor<Insets> - final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); - assertEquals(rawClass, paramType.getRawType()); - assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); - - assertTrue(Object.class.isAssignableFrom(paramType.getClass())); - assertFalse(paramType.getClass().isAssignableFrom(Object.class)); - - final Type testType = Object.class; - assertTrue(TypeUtils.isAssignable(paramType, testType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); - assertFalse(TypeUtils.isAssignable(testType, paramType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); - } + public void testIsAssignableGenericListTypes() throws NoSuchFieldException { + final Type rawListType = GenericTypeHolder.class.getDeclaredField("rawList").getGenericType(); + final Type objectListType = GenericTypeHolder.class.getDeclaredField("objectList").getGenericType(); + final Type unboundListType = GenericTypeHolder.class.getDeclaredField("unboundList").getGenericType(); + final Type superObjectListType = GenericTypeHolder.class.getDeclaredField("superObjectList").getGenericType(); + final Type stringListType = GenericTypeHolder.class.getDeclaredField("stringList").getGenericType(); + final Type subStringListType = GenericTypeHolder.class.getDeclaredField("subStringList").getGenericType(); + final Type superStringListType = GenericTypeHolder.class.getDeclaredField("superStringList").getGenericType(); - @Test - public void testIsAssignableGenericArrayTypeToParameterizedType() { - final Class<Constructor> rawClass = Constructor.class; - final Class<Insets> typeArgClass = Insets.class; - // Builds a ParameterizedType for Constructor<Insets> - final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); - assertEquals(rawClass, paramType.getRawType()); - assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); + assertTrue(TypeUtils.isAssignable(rawListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, objectListType)); + assertTrue(TypeUtils.isAssignable(objectListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, unboundListType)); + assertTrue(TypeUtils.isAssignable(unboundListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, superObjectListType)); + assertTrue(TypeUtils.isAssignable(superObjectListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, stringListType)); + assertTrue(TypeUtils.isAssignable(stringListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, subStringListType)); + assertTrue(TypeUtils.isAssignable(subStringListType, rawListType)); + assertTrue(TypeUtils.isAssignable(rawListType, superStringListType)); + assertTrue(TypeUtils.isAssignable(superStringListType, rawListType)); - assertFalse(GenericArrayType.class.isAssignableFrom(paramType.getClass())); - assertFalse(paramType.getClass().isAssignableFrom(GenericArrayType.class)); + assertTrue(TypeUtils.isAssignable(objectListType, objectListType)); + assertTrue(TypeUtils.isAssignable(objectListType, unboundListType)); + assertFalse(TypeUtils.isAssignable(unboundListType, objectListType)); + assertTrue(TypeUtils.isAssignable(objectListType, superObjectListType)); + assertFalse(TypeUtils.isAssignable(superObjectListType, objectListType)); + assertFalse(TypeUtils.isAssignable(objectListType, stringListType)); + assertFalse(TypeUtils.isAssignable(stringListType, objectListType)); + assertFalse(TypeUtils.isAssignable(objectListType, subStringListType)); + assertFalse(TypeUtils.isAssignable(subStringListType, objectListType)); + assertTrue(TypeUtils.isAssignable(objectListType, superStringListType)); + assertFalse(TypeUtils.isAssignable(superStringListType, objectListType)); - final GenericArrayType testType = TypeUtils.genericArrayType(paramType); - assertFalse(TypeUtils.isAssignable(paramType, testType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); - assertFalse(TypeUtils.isAssignable(testType, paramType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); - } + assertTrue(TypeUtils.isAssignable(unboundListType, unboundListType)); + assertFalse(TypeUtils.isAssignable(unboundListType, superObjectListType)); + assertTrue(TypeUtils.isAssignable(superObjectListType, unboundListType)); + assertFalse(TypeUtils.isAssignable(unboundListType, stringListType)); + assertTrue(TypeUtils.isAssignable(stringListType, unboundListType)); + assertFalse(TypeUtils.isAssignable(unboundListType, subStringListType)); + assertTrue(TypeUtils.isAssignable(subStringListType, unboundListType)); + assertFalse(TypeUtils.isAssignable(unboundListType, superStringListType)); + assertTrue(TypeUtils.isAssignable(superStringListType, unboundListType)); - @Test - @Disabled("TODO") - public void testIsAssignableGenericArrayTypeToWildcardType() { - final Class<Constructor> rawClass = Constructor.class; - final Class<Insets> typeArgClass = Insets.class; - // Builds a ParameterizedType for Constructor<Insets> - final ParameterizedType paramType = TypeUtils.parameterize(rawClass, typeArgClass); - assertEquals(rawClass, paramType.getRawType()); - assertEquals(typeArgClass, paramType.getActualTypeArguments()[0]); + assertTrue(TypeUtils.isAssignable(superObjectListType, superObjectListType)); + assertFalse(TypeUtils.isAssignable(superObjectListType, stringListType)); + assertFalse(TypeUtils.isAssignable(stringListType, superObjectListType)); + assertFalse(TypeUtils.isAssignable(superObjectListType, subStringListType)); + assertFalse(TypeUtils.isAssignable(subStringListType, superObjectListType)); + assertTrue(TypeUtils.isAssignable(superObjectListType, superStringListType)); + assertFalse(TypeUtils.isAssignable(superStringListType, superObjectListType)); - assertFalse(WildcardType.class.isAssignableFrom(paramType.getClass())); - assertFalse(paramType.getClass().isAssignableFrom(WildcardType.class)); + assertTrue(TypeUtils.isAssignable(stringListType, stringListType)); + assertTrue(TypeUtils.isAssignable(stringListType, subStringListType)); + assertFalse(TypeUtils.isAssignable(subStringListType, stringListType)); + assertTrue(TypeUtils.isAssignable(stringListType, superStringListType)); + assertFalse(TypeUtils.isAssignable(superStringListType, stringListType)); - final WildcardType testType = TypeUtils.WILDCARD_ALL; - // TODO This test returns true unlike the test above. - // Is this a bug in this test or in the main code? - assertFalse(TypeUtils.isAssignable(paramType, testType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", paramType, testType)); - assertFalse(TypeUtils.isAssignable(testType, paramType), - () -> String.format("TypeUtils.isAssignable(%s, %s)", testType, paramType)); + assertTrue(TypeUtils.isAssignable(subStringListType, subStringListType)); + assertFalse(TypeUtils.isAssignable(subStringListType, superStringListType)); + assertFalse(TypeUtils.isAssignable(superStringListType, subStringListType)); + assertTrue(TypeUtils.isAssignable(superStringListType, superStringListType)); } @SuppressWarnings("boxing") // boxing is deliberate here