From 5c5c42529721a893b3b6553aeadbc1fd4452c065 Mon Sep 17 00:00:00 2001 From: Holly Cummins Date: Wed, 22 Jan 2025 14:07:22 +0000 Subject: [PATCH] Allow anonymous classes to share the test state of their parents --- ...stractQuarkusTestWithContextExtension.java | 4 ++-- .../AbstractTestWithCallbacksExtension.java | 20 +++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractQuarkusTestWithContextExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractQuarkusTestWithContextExtension.java index 68b1b601ed90c..e6c397fecb7e7 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractQuarkusTestWithContextExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractQuarkusTestWithContextExtension.java @@ -57,7 +57,7 @@ protected QuarkusTestExtensionState getState(ExtensionContext context) { QuarkusTestExtensionState state = store.get(QuarkusTestExtensionState.class.getName(), QuarkusTestExtensionState.class); if (state != null) { Class testingTypeOfState = store.get(IO_QUARKUS_TESTING_TYPE, Class.class); - if (!this.getClass().equals(testingTypeOfState)) { + if (!this.getTestingType().equals(testingTypeOfState)) { // The current state was created by a different testing type, so we need to renew it, so the new state is // compatible with the current testing type. try { @@ -78,7 +78,7 @@ protected QuarkusTestExtensionState getState(ExtensionContext context) { protected void setState(ExtensionContext context, QuarkusTestExtensionState state) { ExtensionContext.Store store = getStoreFromContext(context); store.put(QuarkusTestExtensionState.class.getName(), state); - store.put(IO_QUARKUS_TESTING_TYPE, this.getClass()); + store.put(IO_QUARKUS_TESTING_TYPE, this.getTestingType()); } protected ExtensionContext.Store getStoreFromContext(ExtensionContext context) { diff --git a/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractTestWithCallbacksExtension.java b/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractTestWithCallbacksExtension.java index 0299c686e134d..b5499ec94b920 100644 --- a/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractTestWithCallbacksExtension.java +++ b/test-framework/junit5/src/main/java/io/quarkus/test/junit/AbstractTestWithCallbacksExtension.java @@ -170,4 +170,24 @@ private void invokeCallbacks(List callbacks, String methodName, Class throw e; } } + + protected Class getTestingType() { + + // In general, the testing type should be the test extension class, but ... + Class type = this.getClass(); + + // We don't want to pick up the class of anonymous classes, since they're clearly supposed to 'be' the superclass. + // We want something like + // @RegisterExtension + // static QuarkusTestExtension TEST = new QuarkusTestExtension() { + // @Override + // // Whatever + // }; + // to count as a QuarkusTestExtension class + if (type.isAnonymousClass()) { + return type.getSuperclass(); + } else { + return type; + } + } }