diff --git a/CHANGELOG.md b/CHANGELOG.md index 60a4e7f..67f5abe 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,19 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +### Added + +- PDF report + +### Changed + +- fj-doc-version 8.17.9 +- report generation engine with [Venus Fugerit Doc](https://github.com/fugerit-org/fj-doc) + +### Fixed + +- security issue + ## [1.0.2] - 2025-11-26 ### Fixed diff --git a/README.md b/README.md index a21c69a..12fd9ea 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ A simple plugin to check the presence of JUnit5 test by tags. | parameter | type | required | notes | |--------------------------|---------|----------|------------------------------------------------------| -| format | string | false | default 'text', accepts 'html', 'json', 'xml' | +| format | string | false | default 'text', accepts 'html', 'json', 'xml', 'pdf' | | outputFile | string | true | path where should be produced the report | | requiredTags.requiredTag | string | true | tag to be checked | | failOnMissingTag | boolean | true | if set to 'true' the build will fail on missing tags | diff --git a/pom.xml b/pom.xml index 9cbb73f..5f29064 100644 --- a/pom.xml +++ b/pom.xml @@ -1,172 +1,190 @@ - - 4.0.0 - - junit5-tag-check-maven-plugin - - - org.fugerit.java - fj-bom - 2.0.5 - - - - 1.0.3-SNAPSHOT - maven-plugin - - junit5-tag-check-maven-plugin - A simple plugin to check the presence of JUnit5 test by tags. - http://www.fugerit.org/ - - - scm:git:git://github.com/fugerit-org/unit5-tag-check-maven-plugin.git - scm:git:ssh://github.com/fugerit-org/unit5-tag-check-maven-plugin.git - http://github.com/fugerit-org/unit5-tag-check-maven-plugin/tree/main - - - - UTF-8 - 1.8 - 1.8 - 3.9.11 - 1.14.1 - 2.2.0 - - https://sonarcloud.io - fugerit-org - fugerit-org_unit5-tag-check-maven-plugin - - - - - Apache License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo - - - - - - Matteo a.k.a. Fugerit - m@fugerit.org - Fugerit - http://www.fugerit.org - - - Daneel - d@fugerit.org - Fugerit - http://www.fugerit.org - - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - - - - - org.apache.maven - maven-plugin-api - provided - - - - org.apache.maven - maven-core - ${maven-core-version} - provided - - - - org.apache.maven.plugin-tools - maven-plugin-annotations - provided - - - - org.slf4j - slf4j-api - compile - - - - org.projectlombok - lombok - provided - - - - org.dom4j - dom4j - ${dom4j-version} - - - - org.junit.platform - junit-platform-launcher - ${junit-platform-launcher-version} - - - - org.junit.jupiter - junit-jupiter-api - compile - - - - org.junit.jupiter - junit-jupiter - compile - - - - org.apache.maven.plugin-testing - maven-plugin-testing-harness - 3.3.0 test - - - - org.apache.maven - maven-compat - 3.9.0 - test - - - - org.slf4j - slf4j-simple - test - - - - - - - - - - org.apache.maven.plugins - maven-plugin-plugin - - - default-descriptor - process-classes - - - - - - - - - - http://www.fugerit.org - Fugerit - - + + + 4.0.0 + + org.fugerit.java + fj-bom + 2.0.5 + + + junit5-tag-check-maven-plugin + 1.0.3-SNAPSHOT + maven-plugin + junit5-tag-check-maven-plugin + A simple plugin to check the presence of JUnit5 test by tags. + http://www.fugerit.org/ + + Fugerit + http://www.fugerit.org + + + + Apache License, Version 2.0 + http://www.apache.org/licenses/LICENSE-2.0.txt + repo + + + + + Matteo a.k.a. Fugerit + m@fugerit.org + Fugerit + http://www.fugerit.org + + + Daneel + d@fugerit.org + Fugerit + http://www.fugerit.org + + + + scm:git:git://github.com/fugerit-org/unit5-tag-check-maven-plugin.git + scm:git:ssh://github.com/fugerit-org/unit5-tag-check-maven-plugin.git + http://github.com/fugerit-org/unit5-tag-check-maven-plugin/tree/main + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + + 1.8 + fugerit-org_unit5-tag-check-maven-plugin + 2.2.0 + 1.8 + 1.14.1 + https://sonarcloud.io + UTF-8 + 3.9.11 + fugerit-org + 8.17.9 + + + + + org.fugerit.java + fj-doc + ${fj-doc-version} + pom + import + + + + + + org.apache.maven + maven-plugin-api + provided + + + org.apache.maven + maven-core + ${maven-core-version} + provided + + + org.apache.maven.plugin-tools + maven-plugin-annotations + provided + + + org.slf4j + slf4j-api + compile + + + org.dom4j + dom4j + ${dom4j-version} + + + org.junit.platform + junit-platform-launcher + ${junit-platform-launcher-version} + + + org.junit.jupiter + junit-jupiter-api + compile + + + org.apache.maven.plugin-testing + maven-plugin-testing-harness + 3.3.0 + test + + + org.apache.maven + maven-compat + 3.9.0 + test + + + org.fugerit.java + fj-doc-base + + + org.fugerit.java + fj-doc-base-json + + + org.fugerit.java + fj-doc-freemarker + + + org.fugerit.java + fj-doc-mod-fop + + + org.junit.jupiter + junit-jupiter + test + + + org.projectlombok + lombok + provided + + + org.slf4j + slf4j-simple + test + + + + + + maven-plugin-plugin + + + default-descriptor + process-classes + + + + + org.fugerit.java + fj-doc-maven-plugin + ${fj-doc-version} + + + freemarker-verify + compile + + verify + + + ${project.basedir}/src/main/resources/junit5-tag-check-maven-plugin/template + true + true + ${project.build.directory}/freemarker-syntax-verify-report + + + + + + diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojo.java b/src/main/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojo.java index bc9f7bc..3b2b33d 100644 --- a/src/main/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojo.java +++ b/src/main/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojo.java @@ -5,19 +5,16 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugins.annotations.*; import org.apache.maven.project.MavenProject; -import org.dom4j.Document; -import org.dom4j.Element; -import org.dom4j.io.SAXReader; -import org.junit.jupiter.api.Tag; +import org.fugerit.java.junit5.tag.check.facade.TagCheckFacade; +import org.fugerit.java.junit5.tag.check.facade.TagReportFacade; +import org.fugerit.java.junit5.tag.check.facade.TagScanFacade; +import org.fugerit.java.junit5.tag.check.facade.TagSurefireFacade; +import org.fugerit.java.junit5.tag.check.model.ExecutedTest; import java.io.File; -import java.io.FileWriter; -import java.io.IOException; -import java.lang.reflect.Method; import java.net.URL; import java.net.URLClassLoader; import java.util.*; -import java.util.stream.Collectors; /** * Reports tags from actually executed tests by parsing Surefire reports @@ -30,27 +27,27 @@ public class ExecutedTestTagReporterMojo extends AbstractMojo { @Parameter(defaultValue = "${project}", readonly = true, required = true) - private MavenProject project; + protected MavenProject project; @Parameter(property = "surefire.reports.directory", defaultValue = "${project.build.directory}/surefire-reports") - private File surefireReportsDirectory; + protected File surefireReportsDirectory; @Parameter(property = "test.tag.reporter.outputFile", defaultValue = "${project.build.directory}/executed-test-tag-report.txt") - private File outputFile; + protected File outputFile; @Parameter(property = "test.tag.reporter.format", defaultValue = "text") - private String format; // text, json, xml, html + protected String format; // text, json, xml, html @Parameter(property = "test.tag.reporter.requiredTags") - private List requiredTags; + protected List requiredTags; @Parameter(property = "test.tag.reporter.failOnMissingTag", defaultValue = "false") - private boolean failOnMissingTag; + protected boolean failOnMissingTag; @Parameter(property = "test.tag.reporter.includeSkipped", defaultValue = "false") - private boolean includeSkipped; + protected boolean includeSkipped; @Override public void execute() throws MojoExecutionException { @@ -67,20 +64,20 @@ public void execute() throws MojoExecutionException { URLClassLoader classLoader = createTestClassLoader(); // Parse Surefire reports to find executed tests - List executedTests = parseSurefireReports(); + List executedTests = TagSurefireFacade.parseSurefireReports( this.surefireReportsDirectory, this.includeSkipped ); getLog().info("Found " + executedTests.size() + " executed tests"); // Extract tags from executed tests Map> testTagMap = - extractTagsFromExecutedTests(executedTests, classLoader); + TagScanFacade.extractTagsFromExecutedTests(executedTests, classLoader); // Generate report - generateReport(testTagMap); + TagReportFacade.generateReport( this.format, this.includeSkipped, this.outputFile, testTagMap); // Check for required tags if (requiredTags != null && !requiredTags.isEmpty()) { - checkRequiredTags(testTagMap); + TagCheckFacade.checkRequiredTags( this.requiredTags, this.failOnMissingTag, testTagMap); } getLog().info("Executed Test Tag Report generated: " + @@ -108,491 +105,4 @@ private URLClassLoader createTestClassLoader() throws DependencyResolutionRequir return new URLClassLoader(urls, Thread.currentThread().getContextClassLoader()); } - private List parseSurefireReports() { - List executedTests = new ArrayList<>(); - SAXReader reader = new SAXReader(); - - // Find all XML report files - File[] reportFiles = surefireReportsDirectory.listFiles( - (dir, name) -> name.startsWith("TEST-") && name.endsWith(".xml")); - - if (reportFiles == null || reportFiles.length == 0) { - getLog().warn("No Surefire XML reports found in: " + - surefireReportsDirectory.getAbsolutePath()); - return executedTests; - } - - for (File reportFile : reportFiles) { - getLog().debug("Parsing report: " + reportFile.getName()); - - try { - Document document = reader.read(reportFile); - Element root = document.getRootElement(); - - String className = root.attributeValue("name"); - - @SuppressWarnings("unchecked") - List testCases = root.elements("testcase"); - - for (Element testCase : testCases) { - String methodName = testCase.attributeValue("name"); - String testClassName = testCase.attributeValue("classname", className); - String time = testCase.attributeValue("time"); - - boolean skipped = testCase.element("skipped") != null; - boolean failed = testCase.element("failure") != null; - boolean error = testCase.element("error") != null; - - ExecutedTest test = new ExecutedTest( - testClassName, - methodName, - skipped, - failed, - error, - time - ); - - if (!skipped || includeSkipped) { - executedTests.add(test); - } - } - } catch (Exception e) { - getLog().warn("Error parsing report file: " + reportFile.getName(), e); - } - } - - return executedTests; - } - - private Map> extractTagsFromExecutedTests( - List executedTests, - URLClassLoader classLoader) { - - Map> testTagMap = new LinkedHashMap<>(); - - for (ExecutedTest test : executedTests) { - try { - Class testClass = classLoader.loadClass(test.getClassName()); - Method testMethod = findTestMethod(testClass, test.getMethodName()); - - if (testMethod != null) { - Set tags = new HashSet<>(); - - // Get tags from method - Tag[] methodTags = testMethod.getAnnotationsByType(Tag.class); - for (Tag tag : methodTags) { - tags.add(tag.value()); - } - - // Get tags from class - Tag[] classTags = testClass.getAnnotationsByType(Tag.class); - for (Tag tag : classTags) { - tags.add(tag.value()); - } - - testTagMap.put(test, tags); - } else { - getLog().warn("Could not find method: " + test.getClassName() + - "#" + test.getMethodName()); - testTagMap.put(test, Collections.emptySet()); - } - } catch (ClassNotFoundException e) { - getLog().warn("Could not load test class: " + test.getClassName()); - testTagMap.put(test, Collections.emptySet()); - } - } - - return testTagMap; - } - - private Method findTestMethod(Class testClass, String methodName) { - // Try exact match first - for (Method method : testClass.getDeclaredMethods()) { - if (method.getName().equals(methodName)) { - return method; - } - } - - // JUnit 5 display names might cause mismatches - try parent classes - Class currentClass = testClass.getSuperclass(); - while (currentClass != null && currentClass != Object.class) { - for (Method method : currentClass.getDeclaredMethods()) { - if (method.getName().equals(methodName)) { - return method; - } - } - currentClass = currentClass.getSuperclass(); - } - - return null; - } - - private void generateReport(Map> testTagMap) - throws IOException { - outputFile.getParentFile().mkdirs(); - - switch (format.toLowerCase()) { - case "json": - generateJsonReport(testTagMap); - break; - case "xml": - generateXmlReport(testTagMap); - break; - case "html": - generateHtmlReport(testTagMap); - break; - default: - generateTextReport(testTagMap); - } - } - - private void generateTextReport(Map> testTagMap) - throws IOException { - // Helper method for String.repeat(80) - String separator = repeatString("=", 80); - String line = repeatString("-", 80); - - try (FileWriter writer = new FileWriter(outputFile)) { - writer.write(separator + "\n"); - writer.write("EXECUTED TEST TAG REPORT\n"); - writer.write(separator + "\n\n"); - - int totalTests = testTagMap.size(); - - // Calcolo delle statistiche con i filter di Java 8 Stream - int passedTests = (int) testTagMap.keySet().stream() - .filter(t -> !t.isFailed() && !t.isError()).count(); - int failedTests = (int) testTagMap.keySet().stream() - .filter(ExecutedTest::isFailed).count(); - int errorTests = (int) testTagMap.keySet().stream() - .filter(ExecutedTest::isError).count(); - int skippedTests = (int) testTagMap.keySet().stream() - .filter(ExecutedTest::isSkipped).count(); - - writer.write("EXECUTION SUMMARY:\n"); - writer.write(line + "\n"); - writer.write(String.format(" Total Tests: %d%n", totalTests)); - writer.write(String.format(" Passed: %d%n", passedTests)); - writer.write(String.format(" Failed: %d%n", failedTests)); - writer.write(String.format(" Errors: %d%n", errorTests)); - if (includeSkipped) { - writer.write(String.format(" Skipped: %d%n", skippedTests)); - } - writer.write("\n"); - - // Summary by tag (Java 8 compatible map operations: computeIfAbsent is fine) - Map> tagToTests = new HashMap<>(); - Map tagStats = new HashMap<>(); - - for (Map.Entry> entry : testTagMap.entrySet()) { - ExecutedTest test = entry.getKey(); - for (String tag : entry.getValue()) { - tagToTests.computeIfAbsent(tag, k -> new ArrayList<>()).add(test); - - TestStats stats = tagStats.computeIfAbsent(tag, k -> new TestStats()); - stats.total++; - if (test.isFailed()) stats.failed++; - if (test.isError()) stats.errors++; - if (test.isSkipped()) stats.skipped++; - } - } - - writer.write("SUMMARY BY TAG:\n"); - writer.write(line + "\n"); - writer.write(String.format("%-20s | %5s | %5s | %5s | %5s%n", - "Tag", "Total", "Pass", "Fail", "Error")); - writer.write(line + "\n"); - - for (Map.Entry entry : tagStats.entrySet()) { - TestStats stats = entry.getValue(); - int passed = stats.total - stats.failed - stats.errors - stats.skipped; - writer.write(String.format("%-20s | %5d | %5d | %5d | %5d%n", - entry.getKey(), stats.total, passed, stats.failed, stats.errors)); - } - - // Tests without tags - long testsWithoutTags = testTagMap.values().stream() - .filter(Set::isEmpty) - .count(); - - if (testsWithoutTags > 0) { - writer.write(String.format("%-20s | %5d | %5s | %5s | %5s%n", - "", testsWithoutTags, "?", "?", "?")); - } - - writer.write("\n" + separator + "\n"); - writer.write("EXECUTED TESTS BY TAG:\n"); - writer.write(separator + "\n\n"); - - for (Map.Entry> entry : tagToTests.entrySet()) { - writer.write(String.format("Tag: %s (%d tests)%n", - entry.getKey(), entry.getValue().size())); - writer.write(line + "\n"); - for (ExecutedTest test : entry.getValue()) { - String status = getStatusIcon(test); - writer.write(String.format(" %s %s#%s (%.3fs)%n", - status, - test.getClassName(), - test.getMethodName(), - Double.parseDouble(test.getTime()))); - } - writer.write("\n"); - } - - writer.write("\n" + separator + "\n"); - writer.write("ALL EXECUTED TESTS WITH TAGS:\n"); - writer.write(separator + "\n\n"); - - for (Map.Entry> entry : testTagMap.entrySet()) { - ExecutedTest test = entry.getKey(); - String status = getStatusIcon(test); - - // Sostituzione di String.join (che è OK per Java 8, ma spesso da errore di compilazione - // se la versione JDK non è impostata correttamente nel POM) con un Joiner da Stream - String tags = entry.getValue().isEmpty() ? - "" : "[" + entry.getValue().stream().collect(Collectors.joining(", ")) + "]"; - - writer.write(String.format("%s %-50s : %s%n", - status, - test.getClassName() + "#" + test.getMethodName(), - tags)); - } - - if (testsWithoutTags > 0) { - writer.write("%n" + separator + "\n"); - writer.write("⚠️ WARNING: " + testsWithoutTags + - " executed tests without tags\n"); - writer.write(separator + "\n"); - } - } - } - - /** - * Helper method to replace String.repeat(int) which is Java 11+. - */ - private String repeatString(String s, int count) { - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < count; i++) { - sb.append(s); - } - return sb.toString(); - } - - private void generateHtmlReport(Map> testTagMap) - throws IOException { - try (FileWriter writer = new FileWriter(outputFile)) { - writer.write("\n\n\n"); - writer.write("\n"); - writer.write("Executed Test Tag Report\n"); - writer.write("\n"); - writer.write("\n\n"); - writer.write("

Executed Test Tag Report

\n"); - - // Summary - writer.write("

Summary

\n"); - writer.write("\n"); - writer.write("\n"); - writer.write("\n"); - - long passed = testTagMap.keySet().stream() - .filter(t -> !t.isFailed() && !t.isError()).count(); - long failed = testTagMap.keySet().stream().filter(ExecutedTest::isFailed).count(); - long errors = testTagMap.keySet().stream().filter(ExecutedTest::isError).count(); - - writer.write("\n"); - writer.write("\n"); - writer.write("\n"); - writer.write("
MetricCount
Total Tests" + testTagMap.size() + "
Passed" + passed + "
Failed" + failed + "
Errors" + errors + "
\n"); - - // Tags summary - Map> tagToTests = new HashMap<>(); - for (Map.Entry> entry : testTagMap.entrySet()) { - for (String tag : entry.getValue()) { - tagToTests.computeIfAbsent(tag, k -> new ArrayList<>()).add(entry.getKey()); - } - } - - writer.write("

Tags Summary

\n"); - writer.write("\n"); - writer.write("\n"); - for (Map.Entry> entry : tagToTests.entrySet()) { - writer.write("\n"); - } - writer.write("
TagTests
" + entry.getKey() + "" + - entry.getValue().size() + "
\n"); - - // All tests - writer.write("

All Executed Tests

\n"); - writer.write("\n"); - writer.write("\n"); - for (Map.Entry> entry : testTagMap.entrySet()) { - ExecutedTest test = entry.getKey(); - String statusClass = test.isFailed() ? "fail" : - test.isError() ? "error" : "pass"; - String status = getStatusIcon(test); - - writer.write(""); - writer.write(""); - writer.write(""); - writer.write(""); - writer.write(""); - writer.write("\n"); - } - writer.write("
StatusTestTagsTime
" + status + "" + test.getClassName() + "#" + test.getMethodName() + ""); - for (String tag : entry.getValue()) { - writer.write("" + tag + " "); - } - writer.write("" + test.getTime() + "s
\n"); - - writer.write("\n"); - } - } - - private void generateJsonReport(Map> testTagMap) - throws IOException { - try (FileWriter writer = new FileWriter(outputFile)) { - writer.write("{\n"); - writer.write(" \"executedTests\": [\n"); - - int count = 0; - for (Map.Entry> entry : testTagMap.entrySet()) { - if (count++ > 0) writer.write(",\n"); - ExecutedTest test = entry.getKey(); - writer.write(" {\n"); - writer.write(" \"class\": \"" + escapeJson(test.getClassName()) + "\",\n"); - writer.write(" \"method\": \"" + escapeJson(test.getMethodName()) + "\",\n"); - writer.write(" \"time\": " + test.getTime() + ",\n"); - writer.write(" \"skipped\": " + test.isSkipped() + ",\n"); - writer.write(" \"failed\": " + test.isFailed() + ",\n"); - writer.write(" \"error\": " + test.isError() + ",\n"); - writer.write(" \"tags\": ["); - writer.write(entry.getValue().stream() - .map(tag -> "\"" + escapeJson(tag) + "\"") - .collect(Collectors.joining(", "))); - writer.write("]\n"); - writer.write(" }"); - } - - writer.write("\n ]\n"); - writer.write("}"); - } - } - - private void generateXmlReport(Map> testTagMap) - throws IOException { - try (FileWriter writer = new FileWriter(outputFile)) { - writer.write("\n"); - writer.write("\n"); - - for (Map.Entry> entry : testTagMap.entrySet()) { - ExecutedTest test = entry.getKey(); - writer.write(" \n"); - for (String tag : entry.getValue()) { - writer.write(" " + escapeXml(tag) + "\n"); - } - writer.write(" \n"); - } - - writer.write("\n"); - } - } - - private void checkRequiredTags(Map> testTagMap) - throws MojoExecutionException { - Set foundTags = testTagMap.values().stream() - .flatMap(Set::stream) - .collect(Collectors.toSet()); - - List missingTags = new ArrayList<>(); - for (String requiredTag : requiredTags) { - if (!foundTags.contains(requiredTag)) { - missingTags.add(requiredTag); - } - } - - if (!missingTags.isEmpty()) { - String message = "Missing required tags in executed tests: " + - String.join(", ", missingTags); - if (failOnMissingTag) { - throw new MojoExecutionException(message); - } else { - getLog().warn(message); - } - } else { - getLog().info("All required tags found in executed tests: " + - String.join(", ", requiredTags)); - } - } - - private String getStatusIcon(ExecutedTest test) { - if (test.isFailed()) return "❌"; - if (test.isError()) return "⚠️"; - if (test.isSkipped()) return "⊘"; - return "✅"; - } - - private String escapeJson(String str) { - return str.replace("\\", "\\\\") - .replace("\"", "\\\"") - .replace("\n", "\\n"); - } - - private String escapeXml(String str) { - return str.replace("&", "&") - .replace("<", "<") - .replace(">", ">") - .replace("\"", """) - .replace("'", "'"); - } - - // Helper classes - static class ExecutedTest { - private final String className; - private final String methodName; - private final boolean skipped; - private final boolean failed; - private final boolean error; - private final String time; - - public ExecutedTest(String className, String methodName, - boolean skipped, boolean failed, boolean error, String time) { - this.className = className; - this.methodName = methodName; - this.skipped = skipped; - this.failed = failed; - this.error = error; - this.time = time; - } - - public String getClassName() { return className; } - public String getMethodName() { return methodName; } - public boolean isSkipped() { return skipped; } - public boolean isFailed() { return failed; } - public boolean isError() { return error; } - public String getTime() { return time; } - } - - static class TestStats { - int total = 0; - int failed = 0; - int errors = 0; - int skipped = 0; - } } \ No newline at end of file diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/facade/DocHelper.java b/src/main/java/org/fugerit/java/junit5/tag/check/facade/DocHelper.java new file mode 100644 index 0000000..7d5c313 --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/facade/DocHelper.java @@ -0,0 +1,32 @@ +package org.fugerit.java.junit5.tag.check.facade; + +import org.fugerit.java.core.function.SafeFunction; +import org.fugerit.java.doc.base.process.DocProcessContext; +import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig; +import org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade; +import org.fugerit.java.junit5.tag.check.model.ReportHelper; + +import java.io.OutputStream; + +/** + * DocHelper, version : auto generated on 2025-11-26 21:15:51.279 + */ +public class DocHelper { + + /* + * FreemarkerDocProcessConfig is thread-safe and should be initialized once for each config file. + * + * Consider using a @ApplicationScoped or Singleton approach. + */ + private final FreemarkerDocProcessConfig docProcessConfig = FreemarkerDocProcessConfigFacade + .loadConfigSafe("cl://junit5-tag-check-maven-plugin/fm-doc-process-config.xml"); + + public void generateReport(String handlerId, ReportHelper reportHelper, OutputStream os ) { + SafeFunction.apply( () -> docProcessConfig. + fullProcess( "report", + DocProcessContext.newContext( "report", reportHelper ) + .withDocType( handlerId ), handlerId, os ) ); + } + + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagCheckFacade.java b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagCheckFacade.java new file mode 100644 index 0000000..4984fc2 --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagCheckFacade.java @@ -0,0 +1,42 @@ +package org.fugerit.java.junit5.tag.check.facade; + +import lombok.extern.slf4j.Slf4j; +import org.apache.maven.plugin.MojoExecutionException; +import org.fugerit.java.junit5.tag.check.model.ExecutedTest; + +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class TagCheckFacade { + + private TagCheckFacade() {} + + public static void checkRequiredTags(Collection requiredTags, boolean failOnMissingTag, Map> testTagMap) + throws MojoExecutionException { + Set foundTags = testTagMap.values().stream() + .flatMap(Set::stream) + .collect(Collectors.toSet()); + + List missingTags = new ArrayList<>(); + for (String requiredTag : requiredTags) { + if (!foundTags.contains(requiredTag)) { + missingTags.add(requiredTag); + } + } + + if (!missingTags.isEmpty()) { + String message = "Missing required tags in executed tests: " + + String.join(", ", missingTags); + if (failOnMissingTag) { + throw new MojoExecutionException(message); + } else { + log.warn(message); + } + } else { + log.info("All required tags found in executed tests: {}", + String.join(", ", requiredTags)); + } + } + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagReportFacade.java b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagReportFacade.java new file mode 100644 index 0000000..b88cef1 --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagReportFacade.java @@ -0,0 +1,231 @@ +package org.fugerit.java.junit5.tag.check.facade; + +import com.fasterxml.jackson.databind.ObjectMapper; +import lombok.extern.slf4j.Slf4j; +import org.fugerit.java.core.io.helper.HelperIOException; +import org.fugerit.java.core.xml.dom.DOMIO; +import org.fugerit.java.doc.base.config.DocConfig; +import org.fugerit.java.junit5.tag.check.model.ExecutedTest; +import org.fugerit.java.junit5.tag.check.model.ReportHelper; +import org.fugerit.java.junit5.tag.check.model.ReportModel; +import org.fugerit.java.junit5.tag.check.model.TestStats; +import org.w3c.dom.Document; +import org.w3c.dom.Element; + +import java.io.*; +import java.util.*; +import java.util.stream.Collectors; + +@Slf4j +public class TagReportFacade { + + public static void generateReport(String format, boolean includeSkipped, File outputFile, Map> testTagMap) + throws IOException { + TagReportFacade facade = new TagReportFacade(format, includeSkipped, outputFile); + facade.generateReport(testTagMap); + } + + private File outputFile; + + private String format; + + private boolean includeSkipped; + + private TagReportFacade(String format, boolean includeSkipped, File outputFile) { + this.format = format; + this.includeSkipped = includeSkipped; + this.outputFile = outputFile; + } + + private void generateReport(Map> testTagMap) + throws IOException { + outputFile.getParentFile().mkdirs(); + + ReportHelper helper = new ReportHelper( testTagMap ); + + switch (format.toLowerCase()) { + case DocConfig.TYPE_JSON: + generateJsonReport( helper.getReportModel() ); + break; + case DocConfig.TYPE_XML: + generateXmlReport( testTagMap ); + break; + case DocConfig.TYPE_HTML: + case DocConfig.TYPE_PDF: + generateFjDocReport( helper, format.toLowerCase() ); + break; + default: + generateTextReport(helper); + } + } + + private void generateTextReport(ReportHelper helper) throws IOException { + + Map> testTagMap = helper.getTestTagMap(); + + // Helper method for String.repeat(80) + String separator = repeatString("=", 80); + String line = repeatString("-", 80); + + try (FileWriter writer = new FileWriter(outputFile)) { + writer.write(separator + "\n"); + writer.write("EXECUTED TEST TAG REPORT\n"); + writer.write(separator + "\n\n"); + + int totalTests = testTagMap.size(); + + // Calcolo delle statistiche con i filter di Java 8 Stream + int passedTests = (int) testTagMap.keySet().stream() + .filter(t -> !t.isFailed() && !t.isError()).count(); + int failedTests = (int) testTagMap.keySet().stream() + .filter(ExecutedTest::isFailed).count(); + int errorTests = (int) testTagMap.keySet().stream() + .filter(ExecutedTest::isError).count(); + int skippedTests = (int) testTagMap.keySet().stream() + .filter(ExecutedTest::isSkipped).count(); + + writer.write("EXECUTION SUMMARY:\n"); + writer.write(line + "\n"); + writer.write(String.format(" Total Tests: %d%n", totalTests)); + writer.write(String.format(" Passed: %d%n", passedTests)); + writer.write(String.format(" Failed: %d%n", failedTests)); + writer.write(String.format(" Errors: %d%n", errorTests)); + if (includeSkipped) { + writer.write(String.format(" Skipped: %d%n", skippedTests)); + } + writer.write("\n"); + + // Summary by tag (Java 8 compatible map operations: computeIfAbsent is fine) + Map> tagToTests = helper.getTagsToTests(); + Map tagStats = helper.getTagsStats(); + + writer.write("SUMMARY BY TAG:\n"); + writer.write(line + "\n"); + writer.write(String.format("%-20s | %5s | %5s | %5s | %5s%n", + "Tag", "Total", "Pass", "Fail", "Error")); + writer.write(line + "\n"); + + for (Map.Entry entry : tagStats.entrySet()) { + TestStats stats = entry.getValue(); + int passed = stats.getTotal() - stats.getFailed() - stats.getErrors() - stats.getSkipped(); + writer.write(String.format("%-20s | %5d | %5d | %5d | %5d%n", + entry.getKey(), stats.getTotal(), passed, stats.getFailed(), stats.getErrors())); + } + + // Tests without tags + long testsWithoutTags = testTagMap.values().stream() + .filter(Set::isEmpty) + .count(); + + if (testsWithoutTags > 0) { + writer.write(String.format("%-20s | %5d | %5s | %5s | %5s%n", + "", testsWithoutTags, "?", "?", "?")); + } + + writer.write("\n" + separator + "\n"); + writer.write("EXECUTED TESTS BY TAG:\n"); + writer.write(separator + "\n\n"); + + for (Map.Entry> entry : tagToTests.entrySet()) { + writer.write(String.format("Tag: %s (%d tests)%n", + entry.getKey(), entry.getValue().size())); + writer.write(line + "\n"); + for (ExecutedTest test : entry.getValue()) { + String status = getStatusIcon(test); + writer.write(String.format(" %s %s#%s (%.3fs)%n", + status, + test.getClassName(), + test.getMethodName(), + Double.parseDouble(test.getTime().toString()))); + } + writer.write("\n"); + } + + writer.write("\n" + separator + "\n"); + writer.write("ALL EXECUTED TESTS WITH TAGS:\n"); + writer.write(separator + "\n\n"); + + for (Map.Entry> entry : testTagMap.entrySet()) { + ExecutedTest test = entry.getKey(); + String status = getStatusIcon(test); + + // Sostituzione di String.join (che è OK per Java 8, ma spesso da errore di compilazione + // se la versione JDK non è impostata correttamente nel POM) con un Joiner da Stream + String tags = entry.getValue().isEmpty() ? + "" : "[" + entry.getValue().stream().collect(Collectors.joining(", ")) + "]"; + + writer.write(String.format("%s %-50s : %s%n", + status, + test.getClassName() + "#" + test.getMethodName(), + tags)); + } + + if (testsWithoutTags > 0) { + writer.write("%n" + separator + "\n"); + writer.write("⚠️ WARNING: " + testsWithoutTags + + " executed tests without tags\n"); + writer.write(separator + "\n"); + } + } + } + + /** + * Helper method to replace String.repeat(int) which is Java 11+. + */ + private String repeatString(String s, int count) { + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < count; i++) { + sb.append(s); + } + return sb.toString(); + } + + private void generateFjDocReport(ReportHelper reportHelper, String handlerId) throws IOException { + try (OutputStream os = new FileOutputStream(outputFile)) { + new DocHelper().generateReport( handlerId, reportHelper, os ); + } + } + + private void generateJsonReport(ReportModel report) + throws IOException { + try (FileWriter writer = new FileWriter(outputFile)) { + new ObjectMapper().writerWithDefaultPrettyPrinter().writeValue(writer, report); + } + } + + private void generateXmlReport(Map> testTagMap) + throws IOException { + HelperIOException.apply( () -> { + try (FileWriter writer = new FileWriter(outputFile)) { + Document document = DOMIO.newSafeDocumentBuilderFactory().newDocumentBuilder().newDocument(); + Element root = document.createElement("executedTestTagReport"); + for (Map.Entry> entry : testTagMap.entrySet()) { + ExecutedTest test = entry.getKey(); + Element current = document.createElement("test"); + current.setAttribute("class", test.getClassName()); + current.setAttribute("method", test.getMethodName()); + current.setAttribute("time", test.getTime().toString()); + current.setAttribute("skipped", String.valueOf( test.isSkipped() ) ); + current.setAttribute("failed", String.valueOf( test.isFailed() ) ); + current.setAttribute("error", String.valueOf( test.isError() ) ); + for (String tag : entry.getValue()) { + Element tagElement = document.createElement( "tag" ); + tagElement.appendChild( document.createTextNode(tag) ); + current.appendChild(tagElement); + } + root.appendChild(current); + } + writer.write("\n"); + DOMIO.writeDOMIndent( root, writer ); + } + } ); + } + + private String getStatusIcon(ExecutedTest test) { + if (test.isFailed()) return "❌"; + if (test.isError()) return "⚠️"; + if (test.isSkipped()) return "⊘"; + return "✅"; + } + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagScanFacade.java b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagScanFacade.java new file mode 100644 index 0000000..9911b68 --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagScanFacade.java @@ -0,0 +1,78 @@ +package org.fugerit.java.junit5.tag.check.facade; + +import lombok.extern.slf4j.Slf4j; +import org.fugerit.java.junit5.tag.check.model.ExecutedTest; +import org.junit.jupiter.api.Tag; + +import java.lang.reflect.Method; +import java.net.URLClassLoader; +import java.util.*; + +@Slf4j +public class TagScanFacade { + + private TagScanFacade() {} + + public static Map> extractTagsFromExecutedTests( + List executedTests, + URLClassLoader classLoader) { + + Map> testTagMap = new LinkedHashMap<>(); + + for (ExecutedTest test : executedTests) { + try { + Class testClass = classLoader.loadClass(test.getClassName()); + Method testMethod = findTestMethod(testClass, test.getMethodName()); + + if (testMethod != null) { + Set tags = new HashSet<>(); + + // Get tags from method + Tag[] methodTags = testMethod.getAnnotationsByType(Tag.class); + for (Tag tag : methodTags) { + tags.add(tag.value()); + } + + // Get tags from class + Tag[] classTags = testClass.getAnnotationsByType(Tag.class); + for (Tag tag : classTags) { + tags.add(tag.value()); + } + + testTagMap.put(test, tags); + } else { + log.warn("Could not find method: {} #{}", test.getClassName(), test.getMethodName()); + testTagMap.put(test, Collections.emptySet()); + } + } catch (ClassNotFoundException e) { + log.warn("Could not load test class: {}", test.getClassName()); + testTagMap.put(test, Collections.emptySet()); + } + } + + return testTagMap; + } + + private static Method findTestMethod(Class testClass, String methodName) { + // Try exact match first + for (Method method : testClass.getDeclaredMethods()) { + if (method.getName().equals(methodName)) { + return method; + } + } + + // JUnit 5 display names might cause mismatches - try parent classes + Class currentClass = testClass.getSuperclass(); + while (currentClass != null && currentClass != Object.class) { + for (Method method : currentClass.getDeclaredMethods()) { + if (method.getName().equals(methodName)) { + return method; + } + } + currentClass = currentClass.getSuperclass(); + } + + return null; + } + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagSurefireFacade.java b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagSurefireFacade.java new file mode 100644 index 0000000..ef018a2 --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/facade/TagSurefireFacade.java @@ -0,0 +1,77 @@ +package org.fugerit.java.junit5.tag.check.facade; + +import lombok.extern.slf4j.Slf4j; +import org.dom4j.Document; +import org.dom4j.Element; +import org.dom4j.io.SAXReader; +import org.fugerit.java.core.function.SafeFunction; +import org.fugerit.java.junit5.tag.check.model.ExecutedTest; + +import java.io.File; +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@Slf4j +public class TagSurefireFacade { + + private TagSurefireFacade() {} + + public static List parseSurefireReports( File surefireReportsDirectory, boolean includeSkipped ) { + List executedTests = new ArrayList<>(); + SAXReader reader = new SAXReader(); + SafeFunction.apply( () -> reader.setFeature("http://apache.org/xml/features/disallow-doctype-decl", Boolean.TRUE ) ); + + // Find all XML report files + File[] reportFiles = surefireReportsDirectory.listFiles( + (dir, name) -> name.startsWith("TEST-") && name.endsWith(".xml")); + + if (reportFiles == null || reportFiles.length == 0) { + log.warn("No Surefire XML reports found in: {}", + surefireReportsDirectory.getAbsolutePath()); + return executedTests; + } + + for (File reportFile : reportFiles) { + log.debug("Parsing report: {}", reportFile.getName()); + + try { + Document document = reader.read(reportFile); + Element root = document.getRootElement(); + + String className = root.attributeValue("name"); + + @SuppressWarnings("unchecked") + List testCases = root.elements("testcase"); + + for (Element testCase : testCases) { + String methodName = testCase.attributeValue("name"); + String testClassName = testCase.attributeValue("classname", className); + String time = testCase.attributeValue("time"); + + boolean skipped = testCase.element("skipped") != null; + boolean failed = testCase.element("failure") != null; + boolean error = testCase.element("error") != null; + + ExecutedTest test = new ExecutedTest( + testClassName, + methodName, + skipped, + failed, + error, + new BigDecimal(time) + ); + + if (!skipped || includeSkipped) { + executedTests.add(test); + } + } + } catch (Exception e) { + log.warn("Error parsing report file: {}", reportFile.getName(), e); + } + } + + return executedTests; + } + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/model/ExecutedTest.java b/src/main/java/org/fugerit/java/junit5/tag/check/model/ExecutedTest.java new file mode 100644 index 0000000..f6f1adb --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/model/ExecutedTest.java @@ -0,0 +1,49 @@ +package org.fugerit.java.junit5.tag.check.model; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.fasterxml.jackson.annotation.JsonPropertyOrder; + +import java.math.BigDecimal; +import java.util.ArrayList; +import java.util.List; + +@JsonPropertyOrder({"class", "method", "time", "skipped", "failed", "error","tags"}) +public class ExecutedTest { + + private final String className; + private final String methodName; + private final boolean skipped; + private final boolean failed; + private final boolean error; + private final BigDecimal time; + + private List tags; + + public ExecutedTest(String className, String methodName, + boolean skipped, boolean failed, boolean error, BigDecimal time) { + this.className = className; + this.methodName = methodName; + this.skipped = skipped; + this.failed = failed; + this.error = error; + this.time = time; + this.tags = new ArrayList<>(); + } + + @JsonProperty( "class" ) + public String getClassName() { return className; } + + @JsonProperty( "method" ) + public String getMethodName() { return methodName; } + + public boolean isSkipped() { return skipped; } + + public boolean isFailed() { return failed; } + + public boolean isError() { return error; } + + public BigDecimal getTime() { return time; } + + public List getTags() { return tags; } + +} \ No newline at end of file diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportHelper.java b/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportHelper.java new file mode 100644 index 0000000..9f9a0ae --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportHelper.java @@ -0,0 +1,84 @@ +package org.fugerit.java.junit5.tag.check.model; + +import lombok.extern.slf4j.Slf4j; + +import java.util.*; + +@Slf4j +public class ReportHelper { + + private Map> testTagMap; + + private ReportModel reportModel; + + private Map> tagToTests; + + private Map tagStats; + + public ReportHelper(Map> testTagMap) { + this.testTagMap = testTagMap; + // report model + this.reportModel = new ReportModel(); + for (Map.Entry> entry : this.getTestTagMap().entrySet()) { + ExecutedTest current = entry.getKey(); + current.getTags().addAll(entry.getValue()); + reportModel.getExecutedTests().add( current ); + } + // tag to test + this.tagToTests = new HashMap<>(); + this.tagStats = new HashMap<>(); + + for (Map.Entry> entry : testTagMap.entrySet()) { + ExecutedTest test = entry.getKey(); + for (String tag : entry.getValue()) { + tagToTests.computeIfAbsent(tag, k -> new ArrayList<>()).add(test); + + TestStats stats = tagStats.computeIfAbsent(tag, k -> new TestStats()); + stats.increaseTotal(); + if (test.isFailed()) stats.increaseFailed(); + if (test.isError()) stats.increaseErrors(); + if (test.isSkipped()) stats.increaseSkipped(); + } + } + } + + public Map> getTestTagMap() { + return this.testTagMap; + } + + public ReportModel getReportModel() { + return this.reportModel; + } + + public long getSummaryPass() { + return this.getTestTagMap().keySet().stream().filter(t -> !t.isFailed() && !t.isError()).count(); + } + + public long getSummaryFail() { + return this.getTestTagMap().keySet().stream().filter(ExecutedTest::isFailed).count(); + } + + public long getSummaryError() { + return this.getTestTagMap().keySet().stream().filter(ExecutedTest::isError).count(); + } + + public Map> getTagsSummary() { + Map> tagsSummary = new LinkedHashMap<>(); + for (Map.Entry> entry : this.getTestTagMap().entrySet()) { + for (String tag : entry.getValue()) { + tagsSummary.computeIfAbsent(tag, k -> new ArrayList<>()).add(entry.getKey()); + } + } + log.debug( "getTagsSummary() : {}", tagsSummary ); + return tagsSummary; + } + + public Map> getTagsToTests() { + return this.tagToTests; + } + + public Map getTagsStats() { + return this.tagStats; + } + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportModel.java b/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportModel.java new file mode 100644 index 0000000..57d571a --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/model/ReportModel.java @@ -0,0 +1,20 @@ +package org.fugerit.java.junit5.tag.check.model; + +import java.util.ArrayList; +import java.util.List; + +public class ReportModel { + + public ReportModel() { + this.executedTests = new ArrayList<>(); + } + + private List executedTests; + + public List getExecutedTests() { + return this.executedTests; + } + + + +} diff --git a/src/main/java/org/fugerit/java/junit5/tag/check/model/TestStats.java b/src/main/java/org/fugerit/java/junit5/tag/check/model/TestStats.java new file mode 100644 index 0000000..6c03d6d --- /dev/null +++ b/src/main/java/org/fugerit/java/junit5/tag/check/model/TestStats.java @@ -0,0 +1,41 @@ +package org.fugerit.java.junit5.tag.check.model; + +public class TestStats { + + private int total = 0; + private int failed = 0; + private int errors = 0; + private int skipped = 0; + + public void increaseTotal() { + this.total++; + } + + public void increaseFailed() { + this.failed++; + } + + public void increaseErrors() { + this.errors++; + } + + public void increaseSkipped() { + this.skipped++; + } + + public int getErrors() { + return errors; + } + + public int getFailed() { + return failed; + } + + public int getSkipped() { + return skipped; + } + + public int getTotal() { + return total; + } +} \ No newline at end of file diff --git a/src/main/resources/font/Symbola.ttf b/src/main/resources/font/Symbola.ttf new file mode 100644 index 0000000..d1bddac Binary files /dev/null and b/src/main/resources/font/Symbola.ttf differ diff --git a/src/main/resources/junit5-tag-check-maven-plugin/fm-doc-process-config.xml b/src/main/resources/junit5-tag-check-maven-plugin/fm-doc-process-config.xml new file mode 100644 index 0000000..3c237d8 --- /dev/null +++ b/src/main/resources/junit5-tag-check-maven-plugin/fm-doc-process-config.xml @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/junit5-tag-check-maven-plugin/fop-config.xml b/src/main/resources/junit5-tag-check-maven-plugin/fop-config.xml new file mode 100644 index 0000000..4bc2f21 --- /dev/null +++ b/src/main/resources/junit5-tag-check-maven-plugin/fop-config.xml @@ -0,0 +1,36 @@ + + + + true + + + true + + + . + + + . + + + + 1.4 + + + + + + + + + + + 72 + + 72 + + + + + \ No newline at end of file diff --git a/src/main/resources/junit5-tag-check-maven-plugin/template/report.ftl b/src/main/resources/junit5-tag-check-maven-plugin/template/report.ftl new file mode 100644 index 0000000..396601d --- /dev/null +++ b/src/main/resources/junit5-tag-check-maven-plugin/template/report.ftl @@ -0,0 +1,110 @@ + + + + <#assign docTitle="Executed Test Tag Report"> + <#assign passForeColor="#00aa00"> + <#assign failForeColor="#aa0000"> + <#assign errorForeColor="#aa6060"> + <#assign skipForeColor="#909090"> + <#assign defaultTableBorderSize="0"> + + <#assign testTagMap=report.testTagMap/> + <#assign tagsSummary=report.tagsSummary/> + + + + 10;10;10;10 + + ${docTitle} + Report + fugerit79 + en + 29.7cm + 21cm + + body { font-family: Arial, sans-serif; margin: 20px; } + table { border-collapse: collapse; width: 100%; margin: 20px 0; } + th, td { border: 1px solid #ddd; padding: 8px; text-align: left; } + th { background-color: #4CAF50; color: white; } + tr:nth-child(even) { background-color: #f2f2f2; } + .pass { color: green; } + .fail { color: red; } + .error { color: orange; } + .skip { color: gray; } + .tag { background-color: #e7f3ff; padding: 2px 8px; border-radius: 3px; margin: 2px; display: inline-block; } + + + + ${docTitle} + + Summary + + + + Metric + Count + + + Total Tests + ${testTagMap?size} + + + Passed + class="pass"<#else>fore-color="${passForeColor}">${report.summaryPass} + + + Failed + class="fail"<#else>fore-color="${failForeColor}">${report.summaryFail} + + + Errors + class="error"<#else>fore-color="${errorForeColor}">${report.summaryError} + +
+ + Tags Summary + + <#if tagsSummary?size > 0> + + + Tag + Tests + + <#list tagsSummary?keys as currentTag > + + ${currentTag} + ${tagsSummary[currentTag]?size} + + +
+ + + All Executed Tests + + <#if testTagMap?size > 0> + + + Status + Test + Tags + Time + + <#list testTagMap?keys as currentTest> + <#assign currentClassName><#if currentTest.failed>class="fail"<#elseif currentTest.error>class="error"<#else>class="pass" + <#assign currentStatusIcon><#if currentTest.failed>❌<#elseif currentTest.error>⚠️<#elseif currentTest.skipped>⊘<#else>✅ + + font-name="Symbola">${currentStatusIcon} + ${currentTest.className}​#${currentTest.methodName} + <#list currentTest.tags as currentTag>${currentTag} + ${currentTest.time}s + + +
+ + + + +
\ No newline at end of file diff --git a/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoExtendedTest.java b/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoExtendedTest.java new file mode 100644 index 0000000..d88b628 --- /dev/null +++ b/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoExtendedTest.java @@ -0,0 +1,46 @@ +package org.fugerit.java.junit5.tag.check; + +import lombok.extern.slf4j.Slf4j; +import org.apache.maven.model.Build; +import org.apache.maven.plugin.MojoExecutionException; +import org.apache.maven.project.MavenProject; +import org.fugerit.java.doc.base.config.DocConfig; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Test; + +import java.io.File; +import java.util.Arrays; + +import static org.junit.jupiter.api.Assertions.*; + +@Slf4j +@Order( 2 ) // must run after ExecutedTestTagReporterMojoTest +class ExecutedTestTagReporterMojoExtendedTest { + + @Test + void testExtended() throws MojoExecutionException { + String outputFormat = DocConfig.TYPE_HTML; + File reportFile = new File( String.format( "target/test-extended.%s", outputFormat ) ); + log.info( "output file delete : {}", reportFile.delete() ); + ExecutedTestTagReporterMojo mojo = new ExecutedTestTagReporterMojo() { + @Override + public void execute() throws MojoExecutionException { + this.format = outputFormat; + this.includeSkipped = Boolean.TRUE; + this.failOnMissingTag = Boolean.FALSE; + this.surefireReportsDirectory = new File( "src/test/sample-surefire-reports" ); + this.outputFile = reportFile; + this.project = new MavenProject(); + this.requiredTags = Arrays.asList( "helper", "not-found" ); + Build build = new Build(); + File testClassesDir = new File( "target/test-classes" ); + build.setTestOutputDirectory(testClassesDir.getAbsolutePath()); + project.setBuild(build); + super.execute(); + } + }; + mojo.execute(); + assertTrue(reportFile.exists()); + } + +} \ No newline at end of file diff --git a/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoTest.java b/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoTest.java index 1f3b3de..2eb802d 100644 --- a/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoTest.java +++ b/src/test/java/org/fugerit/java/junit5/tag/check/ExecutedTestTagReporterMojoTest.java @@ -5,12 +5,15 @@ import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.project.MavenProject; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Order; +import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.io.TempDir; import java.io.File; import java.io.FileWriter; import java.io.IOException; +import java.io.StringWriter; import java.nio.file.Files; import java.nio.file.Path; import java.util.Arrays; @@ -19,6 +22,7 @@ import static org.junit.jupiter.api.Assertions.*; @Slf4j +@Order( 1 ) class ExecutedTestTagReporterMojoTest { @TempDir @@ -68,6 +72,32 @@ void testExecuteWithNoReports() throws MojoExecutionException { assertFalse(outputFile.exists()); } + @Test + @Tag("helper") + void testHelperMethods() throws Exception { + // Given: a sample Surefire report + createSampleSurefireReport("TEST-SampleHelperMethodsTest.xml", + "com.example.helper.SampleTest", + Arrays.asList( + new TestCase("testMethodA", "0.111", false, false, false), + new TestCase("testMethodB", "0.222", false, false, false) + ) + ); + + setField(mojo, "format", "pdf"); + outputFile = tempDir.resolve("test-tag-report.pdf").toFile(); + setField(mojo, "outputFile", outputFile); + + // When: execute + mojo.execute(); + // Then: output file should be created + assertTrue(outputFile.exists()); + + String content = new String(Files.readAllBytes(outputFile.toPath())); + assertTrue(content.contains("PDF")); + } + + @Test void testExecuteGeneratesTextReport() throws Exception { // Given: a sample Surefire report @@ -136,6 +166,7 @@ void testExecuteGeneratesXmlReport() throws Exception { // Then: XML file should be created assertTrue(outputFile.exists()); String content = new String(Files.readAllBytes(outputFile.toPath())); + log.info( "xml content : {}", content ); assertTrue(content.contains("")); assertTrue(content.contains("")); } @@ -160,9 +191,9 @@ void testExecuteGeneratesHtmlReport() throws Exception { // Then: HTML file should be created assertTrue(outputFile.exists()); String content = new String(Files.readAllBytes(outputFile.toPath())); - assertTrue(content.contains("")); + assertTrue(content.contains("")); assertTrue(content.contains("Executed Test Tag Report")); - assertTrue(content.contains("

Executed Test Tag Report

")); + assertTrue(content.contains("Executed Test Tag Report")); } @Test @@ -461,8 +492,8 @@ void testXmlReportStructure() throws Exception { private void createSampleSurefireReport(String filename, String className, List testCases) throws IOException { File reportFile = new File(surefireReportsDir, filename); - - try (FileWriter writer = new FileWriter(reportFile)) { + try (StringWriter writer = new StringWriter(); + FileWriter fileWriter = new FileWriter(reportFile)) { writer.write("\n"); writer.write("\n"); } } - writer.write("\n"); + log.info( "report, file : {}, content : {}", outputFile.getAbsolutePath(), writer ); + fileWriter.write(writer.toString()); } } diff --git a/src/test/java/org/fugerit/java/junit5/tag/check/PrepareTest.java b/src/test/java/org/fugerit/java/junit5/tag/check/PrepareTest.java deleted file mode 100644 index 3d55b1d..0000000 --- a/src/test/java/org/fugerit/java/junit5/tag/check/PrepareTest.java +++ /dev/null @@ -1,12 +0,0 @@ -package org.fugerit.java.junit5.tag.check; - -import org.junit.jupiter.api.Order; - -@Order(1) -class PrepareTest { - - void test1() { - - } - -} diff --git a/src/test/sample-surefire-reports/TEST-org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.xml b/src/test/sample-surefire-reports/TEST-org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.xml new file mode 100644 index 0000000..181f3c9 --- /dev/null +++ b/src/test/sample-surefire-reports/TEST-org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.xml @@ -0,0 +1,765 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +]]> + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +]]> + + + + + + + + + +[main] INFO org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest - report, file : /tmp/junit-18134802494762859681/test-tag-report.txt, content : + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.Test2 +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.Test1 +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.Test1 +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfigSafe config path : cl://junit5-tag-check-maven-plugin/fm-doc-process-config.xml +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : validating value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : failOnValidate value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : cleanSource value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : table-check-integrity value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - docHandlerList -> 8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : md-ext +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id md-ext, handler SimpleMarkdownExtTypeHandler{customId='e80e88be-e89f-43b0-ba82-9f9747a04462', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md-markdown : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> SimpleMarkdownExtTypeHandler{customId='e80e88be-e89f-43b0-ba82-9f9747a04462', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} : list [md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : xml-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id xml-doc, handler DocTypeHandlerCoreXMLUTF8{customId='fad6418d-92d5-47b3-a70a-e528eeb4c381', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml-doc-core : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreXMLUTF8{customId='fad6418d-92d5-47b3-a70a-e528eeb4c381', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, xml, md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : json-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id json-doc, handler DocTypeHandlerCoreJSONUTF8{customId='4013518c-1082-4b87-be28-ae6e109d35f8', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json-doc-core : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreJSONUTF8{customId='4013518c-1082-4b87-be28-ae6e109d35f8', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, xml, json-doc-core, md, json, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fm, handler FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='7c4f9236-1b46-4fee-a1ca-f927ae11124e', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='7c4f9236-1b46-4fee-a1ca-f927ae11124e', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, html-fm, xml, json-doc-core, md, json, md-markdown, html, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fragment-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fragment-fm, handler FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='cbe22225-7a54-4d8d-8f8b-1bcbe77585ab', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='cbe22225-7a54-4d8d-8f8b-1bcbe77585ab', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, json, html, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : asciidoc-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id asciidoc-fm, handler FreeMarkerAsciidocTypeHandlerUTF8{customId='01aa1abd-3845-4953-9ef2-c83d422dbee5', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc-fm : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerAsciidocTypeHandlerUTF8{customId='01aa1abd-3845-4953-9ef2-c83d422dbee5', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfigSafe config path : cl://fj_doc_mod_fop_config/fm-fop-process-config.xml +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : validating value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : failOnValidate value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : cleanSource value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : table-check-integrity value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfig ok : org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig@1ec9bd38 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : fo-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id fo-fop, handler FreeMarkerFopTypeHandlerUTF8{customId='941a23fc-0767-4736-bc14-63ca23f29ebc', type='fo', module='fop', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo-fop : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerFopTypeHandlerUTF8{customId='941a23fc-0767-4736-bc14-63ca23f29ebc', type='fo', module='fop', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : pdf-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id pdf-fop, handler PdfFopTypeHandler{customId='cd6b3d40-84f8-4569-87b2-94ba21eda380', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf-fop : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> PdfFopTypeHandler{customId='cd6b3d40-84f8-4569-87b2-94ba21eda380', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, pdf, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, pdf-fop, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfig ok : org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig@50313382 +[main] INFO org.fugerit.java.core.util.filterchain.MiniFilterBase - FreeMarkerConfigStep INIT - config = {mode=class, path=/junit5-tag-check-maven-plugin/template/, load-bundled-functions=true, exception-handler=RETHROW_HANDLER, fallback-on-null-loop-variable=false, wrap-unchecked-exceptions=true, log-exception=false, version=2.3.34, class=org.fugerit.java.junit5.tag.check.facade.DocHelper} +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfigSafe config path : cl://junit5-tag-check-maven-plugin/fm-doc-process-config.xml +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : validating value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : failOnValidate value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : cleanSource value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : table-check-integrity value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - docHandlerList -> 8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : md-ext +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id md-ext, handler SimpleMarkdownExtTypeHandler{customId='60cf525f-64a5-4a8e-934c-192e3c4fba7c', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md-markdown : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> SimpleMarkdownExtTypeHandler{customId='60cf525f-64a5-4a8e-934c-192e3c4fba7c', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} : list [md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : xml-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id xml-doc, handler DocTypeHandlerCoreXMLUTF8{customId='4752b1af-0637-4171-a88c-3b80705152cd', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml-doc-core : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreXMLUTF8{customId='4752b1af-0637-4171-a88c-3b80705152cd', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, xml, md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : json-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id json-doc, handler DocTypeHandlerCoreJSONUTF8{customId='595ffbef-11f8-40d2-b46a-58f6248b668f', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json-doc-core : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreJSONUTF8{customId='595ffbef-11f8-40d2-b46a-58f6248b668f', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, xml, json-doc-core, md, json, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fm, handler FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='cf6f3660-5fb7-4f6b-a2a4-47b302821752', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='cf6f3660-5fb7-4f6b-a2a4-47b302821752', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, html-fm, xml, json-doc-core, md, json, md-markdown, html, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fragment-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fragment-fm, handler FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='06a98e0d-608c-4cd4-843f-e5f415111484', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='06a98e0d-608c-4cd4-843f-e5f415111484', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, json, html, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : asciidoc-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id asciidoc-fm, handler FreeMarkerAsciidocTypeHandlerUTF8{customId='2ceffc00-0d06-4ca0-9429-bae2aa9ea4cf', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc-fm : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerAsciidocTypeHandlerUTF8{customId='2ceffc00-0d06-4ca0-9429-bae2aa9ea4cf', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : fo-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id fo-fop, handler FreeMarkerFopTypeHandlerUTF8{customId='0cf63e52-de84-4df3-b72e-1ac17b0b9d6a', type='fo', module='fop', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo-fop : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerFopTypeHandlerUTF8{customId='0cf63e52-de84-4df3-b72e-1ac17b0b9d6a', type='fo', module='fop', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : pdf-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id pdf-fop, handler PdfFopTypeHandler{customId='9ae72dc9-d180-4443-a263-5b2ea6005b41', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf-fop : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> PdfFopTypeHandler{customId='9ae72dc9-d180-4443-a263-5b2ea6005b41', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, pdf, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, pdf-fop, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfig ok : org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig@64a40280 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfigSafe config path : cl://fj_doc_freemarker_config/fm-freemarker-doc-process-config.xml +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : validating value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : failOnValidate value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : cleanSource value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : table-check-integrity value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - docHandlerList -> 8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : md-ext +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id md-ext, handler SimpleMarkdownExtTypeHandler{customId='a9a945e6-7ded-427d-8349-9efadff5b94f', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md-markdown : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> SimpleMarkdownExtTypeHandler{customId='a9a945e6-7ded-427d-8349-9efadff5b94f', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} : list [md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.config.DocTypeHandlerXMLUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : xml-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id xml-doc, handler DocTypeHandlerXMLUTF8{customId='0dbfbf49-015b-456e-bfa5-96e2336b0a6a', type='xml', module='doc', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml-doc : org.fugerit.java.doc.base.config.DocTypeHandlerXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml : org.fugerit.java.doc.base.config.DocTypeHandlerXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerXMLUTF8{customId='0dbfbf49-015b-456e-bfa5-96e2336b0a6a', type='xml', module='doc', format='null', mime='null', charset=UTF-8} : list [xml-doc, xml, md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fm, handler FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='9618f9c7-eba3-4dab-9a10-c2921d32370b', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='9618f9c7-eba3-4dab-9a10-c2921d32370b', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc, html-fm, xml, md, md-markdown, html, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fragment-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fragment-fm, handler FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='fa940c14-b192-4b5d-ad2e-3d0d03bbc4c8', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='fa940c14-b192-4b5d-ad2e-3d0d03bbc4c8', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} : list [fhtml-fm, xml-doc, html-fm, xml, md, md-markdown, html, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : asoc-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id asoc-fm, handler FreeMarkerAsciidocTypeHandlerUTF8{customId='3f880981-4d46-4655-a1ad-be77d291bc94', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc-fm : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerAsciidocTypeHandlerUTF8{customId='3f880981-4d46-4655-a1ad-be77d291bc94', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} : list [fhtml-fm, html-fm, md-markdown, asoc-fm, xml-doc, xml, md, adoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : pdf-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id pdf-fop, handler PdfFopTypeHandler{customId='133b305e-5089-4e50-9b61-12101a996827', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf-fop : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> PdfFopTypeHandler{customId='133b305e-5089-4e50-9b61-12101a996827', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] : list [fhtml-fm, html-fm, md-markdown, asoc-fm, xml-doc, pdf, xml, md, adoc-fm, html, adoc, md-ext, pdf-fop, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.poi.XlsxPoiTypeHandler +[main] WARN org.fugerit.java.core.cfg.helpers.UnsafeHelper - Error handling unsafe section org.fugerit.java.core.cfg.ConfigException: Type cannot be loaded : java.lang.ClassNotFoundException: org.fugerit.java.doc.mod.poi.XlsxPoiTypeHandler [trace suppressed, set unsafe-mode='log-trace' to show] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.opencsv.OpenCSVTypeHandler +[main] WARN org.fugerit.java.core.cfg.helpers.UnsafeHelper - Error handling unsafe section org.fugerit.java.core.cfg.ConfigException: Type cannot be loaded : java.lang.ClassNotFoundException: org.fugerit.java.doc.mod.opencsv.OpenCSVTypeHandler [trace suppressed, set unsafe-mode='log-trace' to show] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfig ok : org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig@7db82169 +[main] INFO org.fugerit.java.core.util.filterchain.MiniFilterBase - FreeMarkerConfigStep INIT - config = {mode=class, path=/fj_doc_freemarker_config/template/, load-bundled-functions=false, exception-handler=RETHROW_HANDLER, fallback-on-null-loop-variable=false, wrap-unchecked-exceptions=true, log-exception=false, version=2.3.29, class=org.fugerit.java.doc.freemarker.process.DocChainModel} +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagCheckFacade - Missing required tags in executed tests: integration, smoke +]]> + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] INFO org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest - xml content : + + + + +]]> + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.JsonTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.JsonTest +[main] INFO org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest - outputFile json : /tmp/junit-8410272546839247211/report.json +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagCheckFacade - Missing required tags in executed tests: missing-tag +]]> + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +]]> + + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +]]> + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.XmlTest +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.SampleTest +[main] INFO org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest - Error logging : Error generating executed test tag report +org.apache.maven.plugin.MojoExecutionException: Error generating executed test tag report + at org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojo.execute(ExecutedTestTagReporterMojo.java:87) + at org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.lambda$testExecuteWithRequiredTagsMissing_Fail$0(ExecutedTestTagReporterMojoTest.java:315) + at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:53) + at org.junit.jupiter.api.AssertThrows.assertThrows(AssertThrows.java:35) + at org.junit.jupiter.api.Assertions.assertThrows(Assertions.java:3128) + at org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.testExecuteWithRequiredTagsMissing_Fail(ExecutedTestTagReporterMojoTest.java:313) + at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) + at java.base/java.lang.reflect.Method.invoke(Method.java:580) + at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:787) + at org.junit.platform.commons.support.ReflectionSupport.invokeMethod(ReflectionSupport.java:478) + at org.junit.jupiter.engine.execution.MethodInvocation.proceed(MethodInvocation.java:60) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$ValidatingInvocation.proceed(InvocationInterceptorChain.java:131) + at org.junit.jupiter.engine.extension.TimeoutExtension.intercept(TimeoutExtension.java:161) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestableMethod(TimeoutExtension.java:152) + at org.junit.jupiter.engine.extension.TimeoutExtension.interceptTestMethod(TimeoutExtension.java:91) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker$ReflectiveInterceptorCall.lambda$ofVoidMethod$0(InterceptingExecutableInvoker.java:112) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:94) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45) + at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:93) + at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:87) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$4(TestMethodTestDescriptor.java:221) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:217) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:159) + at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:70) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:157) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:147) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:145) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:101) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:161) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:147) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:145) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:101) + at java.base/java.util.ArrayList.forEach(ArrayList.java:1596) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:161) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:147) + at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:145) + at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:144) + at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:101) + at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57) + at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.executeEngine(EngineExecutionOrchestrator.java:230) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.failOrExecuteEngine(EngineExecutionOrchestrator.java:204) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:172) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:101) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:64) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:150) + at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:63) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:109) + at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:91) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.junit.platform.launcher.core.InterceptingLauncher.lambda$execute$1(InterceptingLauncher.java:39) + at org.junit.platform.launcher.core.ClasspathAlignmentCheckingLauncherInterceptor.intercept(ClasspathAlignmentCheckingLauncherInterceptor.java:25) + at org.junit.platform.launcher.core.InterceptingLauncher.execute(InterceptingLauncher.java:38) + at org.junit.platform.launcher.core.DelegatingLauncher.execute(DelegatingLauncher.java:47) + at org.apache.maven.surefire.junitplatform.LazyLauncher.execute(LazyLauncher.java:56) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.execute(JUnitPlatformProvider.java:194) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invokeAllTests(JUnitPlatformProvider.java:150) + at org.apache.maven.surefire.junitplatform.JUnitPlatformProvider.invoke(JUnitPlatformProvider.java:124) + at org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:385) + at org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:162) + at org.apache.maven.surefire.booter.ForkedBooter.run(ForkedBooter.java:507) + at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:495) +Caused by: org.apache.maven.plugin.MojoExecutionException: Missing required tags in executed tests: missing-tag + at org.fugerit.java.junit5.tag.check.facade.TagCheckFacade.checkRequiredTags(TagCheckFacade.java:32) + at org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojo.execute(ExecutedTestTagReporterMojo.java:80) + ... 80 more +]]> + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.Test +]]> + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.helper.SampleTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.helper.SampleTest +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfigSafe config path : cl://junit5-tag-check-maven-plugin/fm-doc-process-config.xml +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : validating value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : failOnValidate value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : cleanSource value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - setupGeneralAttribute : name : table-check-integrity value : +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - docHandlerList -> 8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : md-ext +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id md-ext, handler SimpleMarkdownExtTypeHandler{customId='661067aa-7db7-4108-a910-2514c5e4e8bb', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md-markdown : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id md : org.fugerit.java.doc.base.typehandler.markdown.SimpleMarkdownExtTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> SimpleMarkdownExtTypeHandler{customId='661067aa-7db7-4108-a910-2514c5e4e8bb', type='md', module='markdown', format='null', mime='text/x-markdown', charset=UTF-8} : list [md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : xml-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id xml-doc, handler DocTypeHandlerCoreXMLUTF8{customId='d324ee4d-168c-41f2-b3f5-bb55e361ff82', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml-doc-core : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id xml : org.fugerit.java.doc.base.typehandler.core.DocTypeHandlerCoreXMLUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreXMLUTF8{customId='d324ee4d-168c-41f2-b3f5-bb55e361ff82', type='xml', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, xml, md, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : json-doc +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id json-doc, handler DocTypeHandlerCoreJSONUTF8{customId='cfc483b0-cbfb-4e0d-94f9-f75fe1db71df', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json-doc-core : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id json : org.fugerit.java.doc.json.typehandler.DocTypeHandlerCoreJSONUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> DocTypeHandlerCoreJSONUTF8{customId='cfc483b0-cbfb-4e0d-94f9-f75fe1db71df', type='json', module='doc-core', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, xml, json-doc-core, md, json, md-markdown, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fm, handler FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='33ccadcb-0689-4045-8d59-552cdd5e87be', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id html : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlTypeHandlerEscapeUTF8{customId='33ccadcb-0689-4045-8d59-552cdd5e87be', type='html', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, xml-doc, json-doc, html-fm, xml, json-doc-core, md, json, md-markdown, html, md-ext] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : html-fragment-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id html-fragment-fm, handler FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='f670dc9e-b490-437b-8b72-ed40000c17cf', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml-fm : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fhtml : org.fugerit.java.doc.freemarker.html.FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerHtmlFragmentTypeHandlerEscapeUTF8{customId='f670dc9e-b490-437b-8b72-ed40000c17cf', type='fhtml', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, json, html, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : asciidoc-fm +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id asciidoc-fm, handler FreeMarkerAsciidocTypeHandlerUTF8{customId='f8007d77-1b54-4f92-a099-c0c0ec74e6b2', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc-fm : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id adoc : org.fugerit.java.doc.freemarker.asciidoc.FreeMarkerAsciidocTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerAsciidocTypeHandlerUTF8{customId='f8007d77-1b54-4f92-a099-c0c0ec74e6b2', type='adoc', module='fm', format='null', mime='text/html', charset=UTF-8} : list [xml-doc-core, fhtml-fm, json-doc, html-fm, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : fo-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id fo-fop, handler FreeMarkerFopTypeHandlerUTF8{customId='2adcb963-1424-4b69-9791-190eebd67eac', type='fo', module='fop', format='null', mime='null', charset=UTF-8} +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo-fop : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id fo : org.fugerit.java.doc.mod.fop.FreeMarkerFopTypeHandlerUTF8 +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> FreeMarkerFopTypeHandlerUTF8{customId='2adcb963-1424-4b69-9791-190eebd67eac', type='fo', module='fop', format='null', mime='null', charset=UTF-8} : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - factoryType : [docHandler: null] , resultType : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - ConfigurableObject -> try configure() +[main] INFO org.fugerit.java.doc.base.config.DocTypeHandlerDefault - configure : pdf-fop +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - register handler id pdf-fop, handler PdfFopTypeHandler{customId='e19035ac-b38b-457f-ae03-4e0f97c70af6', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf-fop : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - Registering handler with id pdf : org.fugerit.java.doc.mod.fop.PdfFopTypeHandler +[main] INFO org.fugerit.java.doc.base.facade.DocHandlerFacade - list keys current -> PdfFopTypeHandler{customId='e19035ac-b38b-457f-ae03-4e0f97c70af6', type='pdf', module='fop', format='null', mime='null', charset=UTF-8}[pdfAmode=null,pdfUAmode=,null,poolMin=0,poolMax=0] : list [xml-doc-core, fhtml-fm, fo-fop, json-doc, html-fm, fo, md-markdown, xml-doc, pdf, xml, json-doc-core, md, adoc-fm, json, asciidoc-fm, html, adoc, md-ext, pdf-fop, html-fragment-fm, fhtml] +[main] INFO org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfigFacade - loadConfig ok : org.fugerit.java.doc.freemarker.process.FreemarkerDocProcessConfig@42f22995 +[main] INFO org.fugerit.java.core.util.filterchain.MiniFilterBase - FreeMarkerConfigStep INIT - config = {mode=class, path=/fj_doc_mod_fop_config/template/, load-bundled-functions=false, exception-handler=RETHROW_HANDLER, fallback-on-null-loop-variable=false, wrap-unchecked-exceptions=true, log-exception=false, version=2.3.29, class=org.fugerit.java.doc.mod.fop.FopConfigDefault} +[main] INFO org.apache.fop.apps.FopConfParser - COMMONS-LOGGING Default page-height set to: 11in +[main] INFO org.apache.fop.apps.FopConfParser - COMMONS-LOGGING Default page-width set to: 8.26in +]]> + + + + + + + + + + + + + + +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.FormatTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.FormatTest +[main] WARN org.fugerit.java.junit5.tag.check.facade.TagScanFacade - Could not load test class: com.example.FormatTest +]]> + + \ No newline at end of file diff --git a/src/test/sample-surefire-reports/org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.txt b/src/test/sample-surefire-reports/org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.txt new file mode 100644 index 0000000..c68585a --- /dev/null +++ b/src/test/sample-surefire-reports/org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest.txt @@ -0,0 +1,4 @@ +------------------------------------------------------------------------------- +Test set: org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest +------------------------------------------------------------------------------- +Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.169 s -- in org.fugerit.java.junit5.tag.check.ExecutedTestTagReporterMojoTest