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