You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by ma...@apache.org on 2023/03/18 23:50:20 UTC
[logging-log4j2] 02/02: Add more Key-related tests
This is an automated email from the ASF dual-hosted git repository.
mattsicker pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j2.git
commit 154a0ab13c31d587fe6bfac60d485f0a702f1117
Author: Matt Sicker <ma...@apache.org>
AuthorDate: Sat Mar 18 17:17:49 2023 -0500
Add more Key-related tests
Signed-off-by: Matt Sicker <ma...@apache.org>
---
.../apache/logging/log4j/plugins/di/KeyTest.java | 87 ++++++++++++++++++++--
1 file changed, 82 insertions(+), 5 deletions(-)
diff --git a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
index 4ae4dc6f1f..96cbe9cd72 100644
--- a/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
+++ b/log4j-plugins-test/src/test/java/org/apache/logging/log4j/plugins/di/KeyTest.java
@@ -14,21 +14,26 @@
* See the license for the specific language governing permissions and
* limitations under the license.
*/
-
package org.apache.logging.log4j.plugins.di;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.reflect.Field;
+import java.lang.reflect.Method;
+import java.lang.reflect.Parameter;
+import java.util.Optional;
+
import org.apache.logging.log4j.plugins.Named;
import org.apache.logging.log4j.plugins.Namespace;
import org.apache.logging.log4j.plugins.Ordered;
+import org.apache.logging.log4j.plugins.QualifierType;
+import org.apache.logging.log4j.plugins.name.AnnotatedElementNameProvider;
+import org.apache.logging.log4j.plugins.name.NameProvider;
import org.junit.jupiter.api.Test;
-import java.lang.reflect.Field;
-import java.lang.reflect.Method;
-
import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
import static org.junit.jupiter.api.Assertions.assertEquals;
-// TODO: add tests for meta namespace annotations
// TODO: add tests for more complex types with generics etc
class KeyTest {
@@ -43,6 +48,7 @@ class KeyTest {
final Key<AnnotatedClass> key = Key.forClass(AnnotatedClass.class);
assertEquals("namespace", key.getNamespace());
assertEquals("name", key.getName());
+ assertEquals(Named.class, key.getQualifierType());
assertEquals(42, key.getOrder());
assertEquals(AnnotatedClass.class, key.getType());
assertEquals(AnnotatedClass.class, key.getRawType());
@@ -60,6 +66,7 @@ class KeyTest {
final Key<String> key = assertDoesNotThrow(() -> Key.forMethod(AnnotatedMethod.class.getMethod("string")));
assertEquals("foo", key.getNamespace());
assertEquals("bar", key.getName());
+ assertEquals(Named.class, key.getQualifierType());
assertEquals(10, key.getOrder());
assertEquals(String.class, key.getType());
assertEquals(String.class, key.getRawType());
@@ -75,6 +82,7 @@ class KeyTest {
final Key<String> key = Key.forParameter(method.getParameters()[0]);
assertEquals("foo", key.getNamespace());
assertEquals("bar", key.getName());
+ assertEquals(Named.class, key.getQualifierType());
assertEquals(0, key.getOrder());
assertEquals(String.class, key.getType());
assertEquals(String.class, key.getRawType());
@@ -92,6 +100,75 @@ class KeyTest {
final Key<String> key = Key.forField(field);
assertEquals("foo", key.getNamespace());
assertEquals("bar", key.getName());
+ assertEquals(Named.class, key.getQualifierType());
+ assertEquals(0, key.getOrder());
+ assertEquals(String.class, key.getType());
+ assertEquals(String.class, key.getRawType());
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @QualifierType
+ @NameProvider(CustomQualifierNameProvider.class)
+ @interface CustomQualifier {
+ String value();
+ }
+
+ static class CustomQualifierNameProvider implements AnnotatedElementNameProvider<CustomQualifier> {
+ @Override
+ public Optional<String> getSpecifiedName(final CustomQualifier annotation) {
+ return Optional.of(annotation.value());
+ }
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Namespace("logical")
+ @interface LogicalNamespace {}
+
+ @LogicalNamespace
+ @CustomQualifier("class")
+ static class LogicallyAnnotatedClass {}
+
+ @Test
+ void classWithCustomQualifierAndNamespace() {
+ final Key<LogicallyAnnotatedClass> key = Key.forClass(LogicallyAnnotatedClass.class);
+ assertEquals("logical", key.getNamespace());
+ assertEquals("class", key.getName());
+ assertEquals(CustomQualifier.class, key.getQualifierType());
+ assertEquals(0, key.getOrder());
+ assertEquals(LogicallyAnnotatedClass.class, key.getType());
+ assertEquals(LogicallyAnnotatedClass.class, key.getRawType());
+ }
+
+ interface LogicallyAnnotatedMethod {
+ @LogicalNamespace
+ @CustomQualifier("method")
+ String string();
+ }
+
+ @Test
+ void methodWithCustomQualifierAndNamespace() {
+ final Method method = assertDoesNotThrow(() -> LogicallyAnnotatedMethod.class.getDeclaredMethod("string"));
+ final Key<String> key = Key.forMethod(method);
+ assertEquals("logical", key.getNamespace());
+ assertEquals("method", key.getName());
+ assertEquals(CustomQualifier.class, key.getQualifierType());
+ assertEquals(0, key.getOrder());
+ assertEquals(String.class, key.getType());
+ assertEquals(String.class, key.getRawType());
+ }
+
+ interface LogicallyAnnotatedParameter {
+ void inject(@LogicalNamespace @CustomQualifier("parameter") String argument);
+ }
+
+ @Test
+ void parameterWithCustomQualifierAndNamespace() {
+ final Parameter parameter = assertDoesNotThrow(() ->
+ LogicallyAnnotatedParameter.class.getDeclaredMethod("inject", String.class).getParameters()[0]);
+ final Key<String> key = Key.forParameter(parameter);
+ assertEquals("logical", key.getNamespace());
+ assertEquals("parameter", key.getName());
+ assertEquals(CustomQualifier.class, key.getQualifierType());
assertEquals(0, key.getOrder());
assertEquals(String.class, key.getType());
assertEquals(String.class, key.getRawType());