Skip to content

Commit

Permalink
Register runtime hints for skipped exceptions in the TestContext fram…
Browse files Browse the repository at this point in the history
…ework

Closes gh-31479
  • Loading branch information
sbrannen committed Nov 27, 2023
1 parent 4370030 commit 2468333
Show file tree
Hide file tree
Showing 2 changed files with 27 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,7 @@ public void processAheadOfTime(Stream<Class<?>> testClasses) throws TestContextA
MultiValueMap<ClassName, Class<?>> initializerClassMappings = processAheadOfTime(mergedConfigMappings);
generateAotTestContextInitializerMappings(initializerClassMappings);
generateAotTestAttributeMappings();
registerSkippedExceptionTypes();
}
finally {
resetAotFactories();
Expand Down Expand Up @@ -422,6 +423,20 @@ private void registerDeclaredConstructors(Class<?> type) {
this.runtimeHints.reflection().registerType(type, INVOKE_DECLARED_CONSTRUCTORS);
}

/**
* Register hints for skipped exception types loaded via reflection in
* {@link org.springframework.test.context.TestContextManager}.
* @since 6.1.2
*/
private void registerSkippedExceptionTypes() {
Stream.of(
"org.opentest4j.TestAbortedException",
"org.junit.AssumptionViolatedException",
"org.testng.SkipException")
.map(TypeReference::of)
.forEach(this.runtimeHints.reflection()::registerType);
}

private static boolean getFailOnErrorFlag() {
String failOnError = SpringProperties.getProperty(FAIL_ON_ERROR_PROPERTY_NAME);
if (StringUtils.hasText(failOnError)) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,12 @@ private static void assertRuntimeHints(RuntimeHints runtimeHints) {
assertReflectionRegistered(runtimeHints, AotTestContextInitializersCodeGenerator.GENERATED_MAPPINGS_CLASS_NAME, INVOKE_PUBLIC_METHODS);
assertReflectionRegistered(runtimeHints, AotTestAttributesCodeGenerator.GENERATED_ATTRIBUTES_CLASS_NAME, INVOKE_PUBLIC_METHODS);

Stream.of(
"org.opentest4j.TestAbortedException",
"org.junit.AssumptionViolatedException",
"org.testng.SkipException"
).forEach(type -> assertReflectionRegistered(runtimeHints, type));

Stream.of(
org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.class,
org.springframework.test.context.support.DefaultBootstrapContext.class
Expand Down Expand Up @@ -239,6 +245,12 @@ private static void assertRuntimeHints(RuntimeHints runtimeHints) {
.accepts(runtimeHints);
}

private static void assertReflectionRegistered(RuntimeHints runtimeHints, String type) {
assertThat(reflection().onType(TypeReference.of(type)))
.as("Reflection hint for %s", type)
.accepts(runtimeHints);
}

private static void assertReflectionRegistered(RuntimeHints runtimeHints, String type, MemberCategory memberCategory) {
assertThat(reflection().onType(TypeReference.of(type)).withMemberCategory(memberCategory))
.as("Reflection hint for %s with category %s", type, memberCategory)
Expand Down

0 comments on commit 2468333

Please sign in to comment.