This is an automated email from the ASF dual-hosted git repository.

pkarwasz pushed a commit to branch 2.x
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git


The following commit(s) were added to refs/heads/2.x by this push:
     new 0bd1572b7c Improve inheritance of JUnit annotations
0bd1572b7c is described below

commit 0bd1572b7c491f81b6702329b8fb85317418cb2b
Author: Piotr P. Karwasz <[email protected]>
AuthorDate: Thu Sep 21 08:42:50 2023 +0200

    Improve inheritance of JUnit annotations
---
 .../log4j/test/junit/TestPropertyResolver.java     | 22 ++---------
 .../core/test/junit/LoggerContextResolver.java     | 46 +++++++++++++++-------
 2 files changed, 35 insertions(+), 33 deletions(-)

diff --git 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertyResolver.java
 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertyResolver.java
index 8d5184079b..c70724f5e4 100644
--- 
a/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertyResolver.java
+++ 
b/log4j-api-test/src/main/java/org/apache/logging/log4j/test/junit/TestPropertyResolver.java
@@ -16,8 +16,6 @@
  */
 package org.apache.logging.log4j.test.junit;
 
-import java.util.List;
-
 import org.apache.logging.log4j.test.TestProperties;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
@@ -39,14 +37,8 @@ public class TestPropertyResolver extends 
TypeBasedParameterResolver<TestPropert
     @Override
     public void beforeEach(final ExtensionContext context) throws Exception {
         final TestProperties props = 
TestPropertySource.createProperties(context);
-        final List<SetTestProperty> setProperties = 
AnnotationSupport.findRepeatableAnnotations(
-                context.getRequiredTestMethod(),
-                SetTestProperty.class);
-        if (setProperties.size() > 0) {
-            for (final SetTestProperty setProperty : setProperties) {
-                props.setProperty(setProperty.key(), setProperty.value());
-            }
-        }
+        
AnnotationSupport.findRepeatableAnnotations(context.getRequiredTestMethod(), 
SetTestProperty.class)
+                .forEach(setProperty -> props.setProperty(setProperty.key(), 
setProperty.value()));
         final Class<?> testClass = context.getRequiredTestClass();
         final Object testInstance = context.getRequiredTestInstance();
         ReflectionSupport
@@ -67,14 +59,8 @@ public class TestPropertyResolver extends 
TypeBasedParameterResolver<TestPropert
     @Override
     public void beforeAll(final ExtensionContext context) throws Exception {
         final TestProperties props = 
TestPropertySource.createProperties(context);
-        final List<SetTestProperty> setProperties = 
AnnotationSupport.findRepeatableAnnotations(
-                context.getRequiredTestClass(),
-                SetTestProperty.class);
-        if (setProperties.size() > 0) {
-            for (final SetTestProperty setProperty : setProperties) {
-                props.setProperty(setProperty.key(), setProperty.value());
-            }
-        }
+        
AnnotationSupport.findRepeatableAnnotations(context.getRequiredTestClass(), 
SetTestProperty.class)
+                .forEach(setProperty -> props.setProperty(setProperty.key(), 
setProperty.value()));
         final Class<?> testClass = context.getRequiredTestClass();
         ReflectionSupport
                 .findFields(testClass,
diff --git 
a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
index a51d73ee47..1201c57e9b 100644
--- 
a/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
+++ 
b/log4j-core-test/src/main/java/org/apache/logging/log4j/core/test/junit/LoggerContextResolver.java
@@ -17,6 +17,8 @@
 package org.apache.logging.log4j.core.test.junit;
 
 import java.lang.reflect.Method;
+import java.net.URISyntaxException;
+import java.net.URL;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.logging.log4j.core.LoggerContext;
@@ -28,8 +30,10 @@ import org.junit.jupiter.api.extension.AfterEachCallback;
 import org.junit.jupiter.api.extension.BeforeAllCallback;
 import org.junit.jupiter.api.extension.BeforeEachCallback;
 import org.junit.jupiter.api.extension.ExtensionContext;
+import org.junit.jupiter.api.extension.ExtensionContextException;
 import org.junit.jupiter.api.extension.ParameterContext;
 import org.junit.jupiter.api.extension.ParameterResolutionException;
+import org.junit.platform.commons.support.AnnotationSupport;
 
 class LoggerContextResolver extends TypeBasedParameterResolver<LoggerContext> 
implements BeforeAllCallback,
         AfterAllCallback, BeforeEachCallback, AfterEachCallback {
@@ -41,11 +45,11 @@ class LoggerContextResolver extends 
TypeBasedParameterResolver<LoggerContext> im
     @Override
     public void beforeAll(ExtensionContext context) throws Exception {
         final Class<?> testClass = context.getRequiredTestClass();
-        final LoggerContextSource testSource = 
testClass.getAnnotation(LoggerContextSource.class);
-        if (testSource != null) {
-            final LoggerContextConfig config = new 
LoggerContextConfig(testSource, context);
-            getTestClassStore(context).put(LoggerContext.class, config);
-        }
+        AnnotationSupport.findAnnotation(testClass, LoggerContextSource.class)
+                .ifPresent(testSource -> {
+                    final LoggerContextConfig config = new 
LoggerContextConfig(testSource, context);
+                    getTestClassStore(context).put(LoggerContext.class, 
config);
+                });
     }
 
     @Override
@@ -60,7 +64,7 @@ class LoggerContextResolver extends 
TypeBasedParameterResolver<LoggerContext> im
     @Override
     public void beforeEach(ExtensionContext context) throws Exception {
         final Class<?> testClass = context.getRequiredTestClass();
-        if (testClass.isAnnotationPresent(LoggerContextSource.class)) {
+        if (AnnotationSupport.isAnnotated(testClass, 
LoggerContextSource.class)) {
             final LoggerContextConfig config = 
getTestClassStore(context).get(LoggerContext.class, LoggerContextConfig.class);
             if (config == null) {
                 throw new IllegalStateException(
@@ -71,14 +75,14 @@ class LoggerContextResolver extends 
TypeBasedParameterResolver<LoggerContext> im
                 config.reconfigure();
             }
         }
-        final LoggerContextSource source = 
context.getRequiredTestMethod().getAnnotation(LoggerContextSource.class);
-        if (source != null) {
-            final LoggerContextConfig config = new LoggerContextConfig(source, 
context);
-            if (config.reconfigurationPolicy == 
ReconfigurationPolicy.BEFORE_EACH) {
-                config.reconfigure();
-            }
-            getTestInstanceStore(context).put(LoggerContext.class, config);
-        }
+        AnnotationSupport.findAnnotation(context.getRequiredTestMethod(), 
LoggerContextSource.class)
+                .ifPresent(source -> {
+                    final LoggerContextConfig config = new 
LoggerContextConfig(source, context);
+                    if (config.reconfigurationPolicy == 
ReconfigurationPolicy.BEFORE_EACH) {
+                        config.reconfigure();
+                    }
+                    getTestInstanceStore(context).put(LoggerContext.class, 
config);
+                });
     }
 
     @Override
@@ -91,7 +95,7 @@ class LoggerContextResolver extends 
TypeBasedParameterResolver<LoggerContext> im
         }
         // reloadable variant
         final Class<?> testClass = context.getRequiredTestClass();
-        if (testClass.isAnnotationPresent(LoggerContextSource.class)) {
+        if (AnnotationSupport.isAnnotated(testClass, 
LoggerContextSource.class)) {
             final LoggerContextConfig config = 
getTestClassStore(context).get(LoggerContext.class, LoggerContextConfig.class);
             if (config == null) {
                 throw new IllegalStateException(
@@ -147,6 +151,18 @@ class LoggerContextResolver extends 
TypeBasedParameterResolver<LoggerContext> im
                 final ExtensionContext extensionContext) {
             final String value = source.value();
             if (value.isEmpty()) {
+                Class<?> clazz = extensionContext.getRequiredTestClass();
+                while (clazz != null) {
+                    final URL url = clazz.getResource(clazz.getSimpleName() + 
".xml");
+                    if (url != null) {
+                        try {
+                            return url.toURI().toString();
+                        } catch (URISyntaxException e) {
+                            throw new ExtensionContextException("An error 
occurred accessing the configuration.", e);
+                        }
+                    }
+                    clazz = clazz.getSuperclass();
+                }
                 return 
extensionContext.getRequiredTestClass().getName().replaceAll("[.$]", "/") + 
".xml";
             }
             return value;

Reply via email to