From 35abc3a6dcbacf9e5ae3f1b06ba3f60c8ca79b8c Mon Sep 17 00:00:00 2001 From: Moritz Halbritter Date: Tue, 25 Oct 2022 11:29:12 +0200 Subject: [PATCH] Register runtime hints for OutputCapture Closes gh-32870 --- .../boot/test/system/OutputCapture.java | 16 ++++++++++++++++ .../main/resources/META-INF/spring/aot.factories | 3 +++ 2 files changed, 19 insertions(+) create mode 100644 spring-boot-project/spring-boot-test/src/main/resources/META-INF/spring/aot.factories diff --git a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/system/OutputCapture.java b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/system/OutputCapture.java index a561fac7580..d4ab620224e 100644 --- a/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/system/OutputCapture.java +++ b/spring-boot-project/spring-boot-test/src/main/java/org/springframework/boot/test/system/OutputCapture.java @@ -21,14 +21,19 @@ import java.io.OutputStream; import java.io.PrintStream; import java.util.ArrayDeque; import java.util.ArrayList; +import java.util.Collections; import java.util.Deque; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Consumer; import java.util.function.Predicate; +import org.springframework.aot.hint.ExecutableMode; +import org.springframework.aot.hint.RuntimeHints; +import org.springframework.aot.hint.TypeReference; import org.springframework.boot.ansi.AnsiOutput; import org.springframework.boot.ansi.AnsiOutput.Enabled; +import org.springframework.test.context.aot.TestRuntimeHintsRegistrar; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; @@ -339,4 +344,15 @@ class OutputCapture implements CapturedOutput { } + static class OutputCaptureRuntimeHints implements TestRuntimeHintsRegistrar { + + @Override + public void registerHints(RuntimeHints runtimeHints, Class testClass, ClassLoader classLoader) { + runtimeHints.reflection().registerType(TypeReference.of(OutputCapture.class), + (hint) -> hint.onReachableType(OutputCaptureExtension.class) + .withConstructor(Collections.emptyList(), ExecutableMode.INVOKE)); + } + + } + } diff --git a/spring-boot-project/spring-boot-test/src/main/resources/META-INF/spring/aot.factories b/spring-boot-project/spring-boot-test/src/main/resources/META-INF/spring/aot.factories new file mode 100644 index 00000000000..0a0df54c116 --- /dev/null +++ b/spring-boot-project/spring-boot-test/src/main/resources/META-INF/spring/aot.factories @@ -0,0 +1,3 @@ +# Runtime hints for tests +org.springframework.test.context.aot.TestRuntimeHintsRegistrar=\ +org.springframework.boot.test.system.OutputCapture.OutputCaptureRuntimeHints