You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@logging.apache.org by vy...@apache.org on 2024/02/21 14:21:28 UTC

(logging-log4j-tools) 08/29: Refactor `DocGenProcessorTest`

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

vy pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/logging-log4j-tools.git

commit 3794610c1d55f37b174abddde8fd6fa38544b43c
Author: Volkan Yazıcı <vo...@yazi.ci>
AuthorDate: Tue Feb 13 13:26:31 2024 +0100

    Refactor `DocGenProcessorTest`
---
 .../log4j/docgen/processor/DocGenProcessor.java    | 18 ++---
 .../docgen/processor/AsciiDocConverterTest.java    |  3 +-
 .../docgen/processor/DocGenProcessorTest.java      | 79 +++++++++++-----------
 .../log4j/plugins.xml => generated-plugins.xml}    |  0
 .../example/AbstractAppender.java                  |  0
 .../example/Appender.java                          |  0
 .../example/BaseAppender.java                      |  0
 .../example/Filter.java                            |  0
 .../example/Layout.java                            |  0
 .../example/MyAppender.java                        |  0
 .../example/MyEnum.java                            |  0
 .../example/MyOldLayout.java                       |  0
 .../example/AbstractAppender.java                  |  0
 .../example/Appender.java                          |  0
 .../example/BaseAppender.java                      |  0
 .../example/Filter.java                            |  0
 .../example/Layout.java                            |  0
 .../example/MyAppender.java                        |  0
 .../example/MyEnum.java                            |  0
 .../example/MyOldLayout.java                       |  0
 20 files changed, 52 insertions(+), 48 deletions(-)

diff --git a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DocGenProcessor.java b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DocGenProcessor.java
index 57eb55c..96cbd25 100644
--- a/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DocGenProcessor.java
+++ b/log4j-docgen/src/main/java/org/apache/logging/log4j/docgen/processor/DocGenProcessor.java
@@ -86,6 +86,11 @@ import org.jspecify.annotations.Nullable;
 @NullMarked
 public class DocGenProcessor extends AbstractProcessor {
 
+    /**
+     * The file path generated descriptor will be written to.
+     */
+    public static final String DESCRIPTOR_FILE_PATH = "META-INF/log4j/plugins.xml";
+
     private static final String MULTIPLICITY_UNBOUNDED = "*";
     private static final CharSequence[] GETTER_SETTER_PREFIXES = {"get", "is", "set"};
     /**
@@ -126,7 +131,6 @@ public class DocGenProcessor extends AbstractProcessor {
         this(new PluginSet());
     }
 
-    @SuppressWarnings("DataFlowIssue")
     public DocGenProcessor(final PluginSet pluginSet) {
         this.pluginSet = pluginSet;
         // Will be initialized later
@@ -207,17 +211,15 @@ public class DocGenProcessor extends AbstractProcessor {
 
     private void writePluginDescriptor() {
         try {
-            final FileObject output = processingEnv
-                    .getFiler()
-                    .createResource(StandardLocation.CLASS_OUTPUT, "", "META-INF/log4j/plugins.xml");
+            final FileObject output =
+                    processingEnv.getFiler().createResource(StandardLocation.CLASS_OUTPUT, "", DESCRIPTOR_FILE_PATH);
 
             try (final Writer writer = output.openWriter()) {
                 new PluginBundleStaxWriter().write(writer, pluginSet);
             }
-        } catch (final IOException | XMLStreamException e) {
-            messager.printMessage(
-                    Diagnostic.Kind.ERROR,
-                    "An error occurred while writing to `META-INF/log4j/plugins.xml`: " + e.getMessage());
+        } catch (final IOException | XMLStreamException error) {
+            final String message = String.format("An error occurred while writing to `%s`", DESCRIPTOR_FILE_PATH);
+            throw new RuntimeException(message, error);
         }
     }
 
diff --git a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/AsciiDocConverterTest.java b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/AsciiDocConverterTest.java
index d70358c..90be680 100644
--- a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/AsciiDocConverterTest.java
+++ b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/AsciiDocConverterTest.java
@@ -66,8 +66,7 @@ public class AsciiDocConverterTest {
         final StandardJavaFileManager fileManager = tool.getStandardFileManager(null, Locale.ROOT, CHARSET);
 
         // Populate sources (aka. compilation units)
-        final Path sourcePath =
-                Paths.get("src/test/resources/javadoc-input/example/" + TEST_CLASS_NAME + ".java");
+        final Path sourcePath = Paths.get("src/test/resources/javadoc-input/example/" + TEST_CLASS_NAME + ".java");
         final Iterable<? extends JavaFileObject> sources = fileManager.getJavaFileObjects(sourcePath);
 
         // Set the target path used by `Javadoc2AsciiDocDoclet` to dump the generated files
diff --git a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/DocGenProcessorTest.java b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/DocGenProcessorTest.java
index e2b6af3..9cd1faa 100644
--- a/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/DocGenProcessorTest.java
+++ b/log4j-docgen/src/test/java/org/apache/logging/log4j/docgen/processor/DocGenProcessorTest.java
@@ -16,18 +16,16 @@
  */
 package org.apache.logging.log4j.docgen.processor;
 
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Arrays.asList;
 import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.jupiter.api.Assertions.assertDoesNotThrow;
 
-import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Arrays;
 import java.util.List;
 import java.util.Locale;
 import java.util.Set;
-import java.util.stream.Collectors;
 import java.util.stream.Stream;
 import javax.tools.Diagnostic;
 import javax.tools.DiagnosticCollector;
@@ -37,65 +35,70 @@ import javax.tools.JavaFileObject;
 import javax.tools.StandardJavaFileManager;
 import javax.tools.StandardLocation;
 import javax.tools.ToolProvider;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.MethodSource;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.io.CleanupMode;
+import org.junit.jupiter.api.io.TempDir;
 import org.xmlunit.assertj3.XmlAssert;
 
 public class DocGenProcessorTest {
 
-    static Stream<String> descriptorGenerationSucceeds() {
-        return Stream.of("v2", "v3");
+    @Test
+    void log4j2_plugins_should_be_extracted(@TempDir(cleanup = CleanupMode.ON_SUCCESS) final Path outputDir)
+            throws Exception {
+        test(outputDir, Paths.get("src/test/resources/plugins-using-log4j2"));
     }
 
-    @ParameterizedTest
-    @MethodSource
-    void descriptorGenerationSucceeds(final String version) {
-        final Path basePath = Paths.get(System.getProperty("basedir", "."));
-        final Path schema = basePath.resolve("target/generated-site/resources/xsd/plugins-0.1.0.xsd");
-        final Path expected = Paths.get("src/test/resources/expected/processor/META-INF/log4j/plugins.xml");
-        final Path actual = assertDoesNotThrow(() -> generateDescriptor(version));
-        XmlAssert.assertThat(actual)
-                .isValidAgainst(schema)
-                .and(expected)
+    @Test
+    void log4j3_plugins_should_be_extracted(@TempDir(cleanup = CleanupMode.ON_SUCCESS) final Path outputDir)
+            throws Exception {
+        test(outputDir, Paths.get("src/test/resources/plugins-using-log4j3"));
+    }
+
+    private static void test(final Path outputDir, final Path sourceDir) throws Exception {
+        final Path modelloGeneratedSchema = Paths.get("target/generated-site/resources/xsd/plugins-0.1.0.xsd");
+        final Path expectedDescriptor = Paths.get("src/test/resources/generated-plugins.xml");
+        final Path actualDescriptor = generateDescriptor(outputDir, sourceDir);
+        XmlAssert.assertThat(actualDescriptor)
+                .isValidAgainst(modelloGeneratedSchema)
+                .and(expectedDescriptor)
                 .ignoreComments()
                 .ignoreWhitespace()
                 .areIdentical();
     }
 
-    private static Path generateDescriptor(final String version) throws Exception {
+    private static Path generateDescriptor(final Path outputDir, final Path sourceDir) throws Exception {
+
+        // Instantiate the tooling
         final JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
-        final DiagnosticCollector<JavaFileObject> ds = new DiagnosticCollector<>();
-        final StandardJavaFileManager fileManager =
-                compiler.getStandardFileManager(null, Locale.ROOT, StandardCharsets.UTF_8);
+        final StandardJavaFileManager fileManager = compiler.getStandardFileManager(null, Locale.ROOT, UTF_8);
 
-        final Path basePath = Paths.get(System.getProperty("basedir", "."));
-        final Path sourcePath = Paths.get("src/test/resources/processor/" + version);
+        // Populate sources
         final Iterable<? extends JavaFileObject> sources;
-        try (final Stream<Path> files = Files.walk(sourcePath)) {
-            sources = fileManager.getJavaFileObjects(
-                    files.filter(Files::isRegularFile).toArray(Path[]::new));
+        try (final Stream<Path> files = Files.walk(sourceDir)) {
+            Path[] sourceFiles = files.filter(Files::isRegularFile).toArray(Path[]::new);
+            sources = fileManager.getJavaFileObjects(sourceFiles);
         }
 
-        final Path destPath = basePath.resolve("target/test-site/processor/" + version);
-        Files.createDirectories(destPath);
-        fileManager.setLocationFromPaths(StandardLocation.CLASS_OUTPUT, Set.of(destPath));
+        // Set the target path used by `DocGenProcessor` to dump the generated files
+        fileManager.setLocationFromPaths(StandardLocation.CLASS_OUTPUT, Set.of(outputDir));
 
+        // Compile the sources
+        final DiagnosticCollector<JavaFileObject> diagnosticCollector = new DiagnosticCollector<>();
         final CompilationTask task = compiler.getTask(
                 null,
                 fileManager,
-                ds,
-                Arrays.asList("-proc:only", "-processor", DocGenProcessor.class.getName()),
+                diagnosticCollector,
+                asList("-proc:only", "-processor", DocGenProcessor.class.getName()),
                 null,
                 sources);
         task.call();
 
-        final List<String> warnings = ds.getDiagnostics().stream()
-                .filter(d -> d.getKind() != Diagnostic.Kind.NOTE)
-                .map(d -> d.getMessage(Locale.ROOT))
-                .collect(Collectors.toList());
-        assertThat(warnings).isEmpty();
+        // Verify successful compilation
+        List<Diagnostic<? extends JavaFileObject>> diagnostics = diagnosticCollector.getDiagnostics();
+        assertThat(diagnostics).noneMatch(diagnostic -> diagnostic.getKind() != Diagnostic.Kind.NOTE);
 
-        final Path descriptor = destPath.resolve("META-INF/log4j/plugins.xml");
+        // Resolve the descriptor file
+        final Path descriptor = outputDir.resolve(DocGenProcessor.DESCRIPTOR_FILE_PATH);
         assertThat(descriptor).isNotEmptyFile();
         return descriptor;
     }
diff --git a/log4j-docgen/src/test/resources/expected/processor/META-INF/log4j/plugins.xml b/log4j-docgen/src/test/resources/generated-plugins.xml
similarity index 100%
rename from log4j-docgen/src/test/resources/expected/processor/META-INF/log4j/plugins.xml
rename to log4j-docgen/src/test/resources/generated-plugins.xml
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/AbstractAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/AbstractAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/AbstractAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/AbstractAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/Appender.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/Appender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/Appender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/Appender.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/BaseAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/BaseAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/BaseAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/BaseAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/Filter.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/Filter.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/Filter.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/Filter.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/Layout.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/Layout.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/Layout.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/Layout.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/MyAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/MyAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/MyEnum.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyEnum.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/MyEnum.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyEnum.java
diff --git a/log4j-docgen/src/test/resources/processor/v2/example/MyOldLayout.java b/log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyOldLayout.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v2/example/MyOldLayout.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j2/example/MyOldLayout.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/AbstractAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/AbstractAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/AbstractAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/AbstractAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/Appender.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/Appender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/Appender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/Appender.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/BaseAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/BaseAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/BaseAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/BaseAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/Filter.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/Filter.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/Filter.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/Filter.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/Layout.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/Layout.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/Layout.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/Layout.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/MyAppender.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyAppender.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/MyAppender.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyAppender.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/MyEnum.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyEnum.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/MyEnum.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyEnum.java
diff --git a/log4j-docgen/src/test/resources/processor/v3/example/MyOldLayout.java b/log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyOldLayout.java
similarity index 100%
rename from log4j-docgen/src/test/resources/processor/v3/example/MyOldLayout.java
rename to log4j-docgen/src/test/resources/plugins-using-log4j3/example/MyOldLayout.java