Skip to content

Commit

Permalink
Increase test coverage for ReflectionUtils.tryToLoadClass()
Browse files Browse the repository at this point in the history
This is a prerequisite for #4250.
  • Loading branch information
sbrannen committed Jan 20, 2025
1 parent 9bddac8 commit 0fe36c7
Showing 1 changed file with 88 additions and 34 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,6 @@
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTimeoutPreemptively;
import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.platform.commons.function.Try.success;
import static org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode.BOTTOM_UP;
import static org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode.TOP_DOWN;
import static org.junit.platform.commons.util.ReflectionUtils.findFields;
Expand Down Expand Up @@ -804,77 +803,132 @@ void loadClass() {

@Test
void tryToLoadClass() {
assertThat(ReflectionUtils.tryToLoadClass(Integer.class.getName())).isEqualTo(success(Integer.class));
assertThat(ReflectionUtils.tryToLoadClass(Void.class.getName())).isEqualTo(success(Void.class));
assertTryToLoadClass(getClass().getName(), getClass());
assertTryToLoadClass(Integer.class.getName(), Integer.class);
assertTryToLoadClass(Void.class.getName(), Void.class);
}

@Test
void tryToLoadClassTrimsClassName() {
assertThat(ReflectionUtils.tryToLoadClass(" " + Integer.class.getName() + "\t"))//
.isEqualTo(success(Integer.class));
assertTryToLoadClass(" " + Integer.class.getName() + "\t", Integer.class);
}

@Test
void tryToLoadClassForPrimitive() {
assertThat(ReflectionUtils.tryToLoadClass(int.class.getName())).isEqualTo(success(int.class));
assertThat(ReflectionUtils.tryToLoadClass(void.class.getName())).isEqualTo(success(void.class));
void tryToLoadClassForVoidPseudoPrimitiveType() {
assertTryToLoadClass("void", void.class);
}

// The following should be equivalent to the above, but just to be sure...
assertThat(ReflectionUtils.tryToLoadClass("int")).isEqualTo(success(int.class));
assertThat(ReflectionUtils.tryToLoadClass("void")).isEqualTo(success(void.class));
@Test
void tryToLoadClassForPrimitiveType() {
assertTryToLoadClass("boolean", boolean.class);
assertTryToLoadClass("char", char.class);
assertTryToLoadClass("byte", byte.class);
assertTryToLoadClass("short", short.class);
assertTryToLoadClass("int", int.class);
assertTryToLoadClass("long", long.class);
assertTryToLoadClass("float", float.class);
assertTryToLoadClass("double", double.class);
}

@Test
void tryToLoadClassForPrimitiveArray() {
assertThat(ReflectionUtils.tryToLoadClass(int[].class.getName())).isEqualTo(success(int[].class));
void tryToLoadClassForBinaryPrimitiveArrayName() {
assertTryToLoadClass("[Z", boolean[].class);
assertTryToLoadClass("[C", char[].class);
assertTryToLoadClass("[B", byte[].class);
assertTryToLoadClass("[S", short[].class);
assertTryToLoadClass("[I", int[].class);
assertTryToLoadClass("[J", long[].class);
assertTryToLoadClass("[F", float[].class);
assertTryToLoadClass("[D", double[].class);
}

@Test
void tryToLoadClassForPrimitiveArrayUsingSourceCodeSyntax() {
assertThat(ReflectionUtils.tryToLoadClass("int[]")).isEqualTo(success(int[].class));
void tryToLoadClassForCanonicalPrimitiveArrayName() {
assertTryToLoadClass("boolean[]", boolean[].class);
assertTryToLoadClass("char[]", char[].class);
assertTryToLoadClass("byte[]", byte[].class);
assertTryToLoadClass("short[]", short[].class);
assertTryToLoadClass("int[]", int[].class);
assertTryToLoadClass("long[]", long[].class);
assertTryToLoadClass("float[]", float[].class);
assertTryToLoadClass("double[]", double[].class);
}

@Test
void tryToLoadClassForObjectArray() {
assertThat(ReflectionUtils.tryToLoadClass(String[].class.getName())).isEqualTo(success(String[].class));
void tryToLoadClassForBinaryObjectArrayName() {
assertTryToLoadClass(String[].class.getName(), String[].class);
}

@Test
void tryToLoadClassForObjectArrayUsingSourceCodeSyntax() {
assertThat(ReflectionUtils.tryToLoadClass("java.lang.String[]")).isEqualTo(success(String[].class));
void tryToLoadClassForCanonicalObjectArrayName() {
assertTryToLoadClass("java.lang.String[]", String[].class);
}

@Test
void tryToLoadClassForTwoDimensionalPrimitiveArray() {
assertThat(ReflectionUtils.tryToLoadClass(int[][].class.getName())).isEqualTo(success(int[][].class));
void tryToLoadClassForBinaryTwoDimensionalPrimitiveArrayName() {
assertTryToLoadClass("[[Z", boolean[][].class);
assertTryToLoadClass("[[C", char[][].class);
assertTryToLoadClass("[[B", byte[][].class);
assertTryToLoadClass("[[S", short[][].class);
assertTryToLoadClass("[[I", int[][].class);
assertTryToLoadClass("[[J", long[][].class);
assertTryToLoadClass("[[F", float[][].class);
assertTryToLoadClass("[[D", double[][].class);
}

@Test
void tryToLoadClassForTwoDimensionaldimensionalPrimitiveArrayUsingSourceCodeSyntax() {
assertThat(ReflectionUtils.tryToLoadClass("int[][]")).isEqualTo(success(int[][].class));
void tryToLoadClassForCanonicalTwoDimensionalPrimitiveArrayName() {
assertTryToLoadClass("boolean[][]", boolean[][].class);
assertTryToLoadClass("char[][]", char[][].class);
assertTryToLoadClass("byte[][]", byte[][].class);
assertTryToLoadClass("short[][]", short[][].class);
assertTryToLoadClass("int[][]", int[][].class);
assertTryToLoadClass("long[][]", long[][].class);
assertTryToLoadClass("float[][]", float[][].class);
assertTryToLoadClass("double[][]", double[][].class);
}

@Test
void tryToLoadClassForMultidimensionalPrimitiveArray() {
assertThat(ReflectionUtils.tryToLoadClass(int[][][][][].class.getName()))//
.isEqualTo(success(int[][][][][].class));
void tryToLoadClassForBinaryMultidimensionalPrimitiveArrayName() {
assertTryToLoadClass("[[[[[Z", boolean[][][][][].class);
assertTryToLoadClass("[[[[[C", char[][][][][].class);
assertTryToLoadClass("[[[[[B", byte[][][][][].class);
assertTryToLoadClass("[[[[[S", short[][][][][].class);
assertTryToLoadClass("[[[[[I", int[][][][][].class);
assertTryToLoadClass("[[[[[J", long[][][][][].class);
assertTryToLoadClass("[[[[[F", float[][][][][].class);
assertTryToLoadClass("[[[[[D", double[][][][][].class);
}

@Test
void tryToLoadClassForMultidimensionalPrimitiveArrayUsingSourceCodeSyntax() {
assertThat(ReflectionUtils.tryToLoadClass("int[][][][][]")).isEqualTo(success(int[][][][][].class));
void tryToLoadClassForCanonicalMultidimensionalPrimitiveArrayName() {
assertTryToLoadClass("boolean[][][][][]", boolean[][][][][].class);
assertTryToLoadClass("char[][][][][]", char[][][][][].class);
assertTryToLoadClass("byte[][][][][]", byte[][][][][].class);
assertTryToLoadClass("short[][][][][]", short[][][][][].class);
assertTryToLoadClass("int[][][][][]", int[][][][][].class);
assertTryToLoadClass("long[][][][][]", long[][][][][].class);
assertTryToLoadClass("float[][][][][]", float[][][][][].class);
assertTryToLoadClass("double[][][][][]", double[][][][][].class);
}

@Test
void tryToLoadClassForMultidimensionalObjectArray() {
assertThat(ReflectionUtils.tryToLoadClass(String[][][][][].class.getName()))//
.isEqualTo(success(String[][][][][].class));
void tryToLoadClassForBinaryMultidimensionalObjectArrayName() {
assertTryToLoadClass(String[][][][][].class.getName(), String[][][][][].class);
}

@Test
void tryToLoadClassForMultidimensionalObjectArrayUsingSourceCodeSyntax() {
assertThat(ReflectionUtils.tryToLoadClass("java.lang.String[][][][][]"))//
.isEqualTo(success(String[][][][][].class));
void tryToLoadClassForCanonicalMultidimensionalObjectArrayName() {
assertTryToLoadClass("java.lang.String[][][][][]", String[][][][][].class);
}

private static void assertTryToLoadClass(String name, Class<?> type) {
try {
assertThat(ReflectionUtils.tryToLoadClass(name).get()).as(name).isEqualTo(type);
}
catch (Exception ex) {
ExceptionUtils.throwAsUncheckedException(ex);
}
}

}
Expand Down

0 comments on commit 0fe36c7

Please sign in to comment.