diff --git a/asciidoctor-maven-plugin/src/main/java/org/asciidoctor/maven/AsciidoctorMojo.java b/asciidoctor-maven-plugin/src/main/java/org/asciidoctor/maven/AsciidoctorMojo.java index a0ddb9c4..208ead00 100644 --- a/asciidoctor-maven-plugin/src/main/java/org/asciidoctor/maven/AsciidoctorMojo.java +++ b/asciidoctor-maven-plugin/src/main/java/org/asciidoctor/maven/AsciidoctorMojo.java @@ -13,6 +13,8 @@ import java.util.Set; import java.util.logging.Logger; +import static org.asciidoctor.maven.process.SourceDirectoryFinder.DEFAULT_SOURCE_DIR; + import org.apache.commons.io.FilenameUtils; import org.apache.maven.plugin.AbstractMojo; import org.apache.maven.plugin.MojoExecutionException; @@ -35,8 +37,6 @@ import org.asciidoctor.maven.process.SourceDirectoryFinder; import org.asciidoctor.maven.process.SourceDocumentFinder; -import static org.asciidoctor.maven.process.SourceDirectoryFinder.DEFAULT_SOURCE_DIR; - /** * Basic maven plugin goal to convert AsciiDoc files using AsciidoctorJ. @@ -241,7 +241,9 @@ public void processSources(List sourceFiles, ResourcesProcessor resourcesP Logger.getLogger("asciidoctor").setUseParentHandlers(false); final Set uniquePaths = new HashSet<>(); - for (final File source : sourceFiles) { + for (int i = 0; i < sourceFiles.size(); i++) { +// for (final File source : sourceFiles) { + final File source = sourceFiles.get(i); final Destination destination = setDestinationPaths(source, optionsBuilder, sourceDir, this); final File destinationPath = destination.path; if (!uniquePaths.add(destinationPath)) { @@ -253,14 +255,9 @@ public void processSources(List sourceFiles, ResourcesProcessor resourcesP getLog().warn("Duplicated destination found: overwriting file: " + destinationFile); } - convertFile(asciidoctor, optionsBuilder.build(), source); - - if (logHandler.getFailFast()) { - processLogRecords(sourceDir, memoryLogHandler); - } + boolean lastFile = i == (sourceFiles.size() - 1); + convertFile(asciidoctor, optionsBuilder.build(), source, sourceDir, memoryLogHandler, lastFile); } - -// processLogRecords(sourceDir, memoryLogHandler); } private void processLogRecords(File sourceDir, MemoryLogHandler memoryLogHandler) throws MojoExecutionException { @@ -357,9 +354,12 @@ protected List findSourceFiles(File sourceDirectory) { finder.find(sourceDirectoryPath, sourceDocumentExtensions); } - protected void convertFile(Asciidoctor asciidoctor, Options options, File f) { + private void convertFile(Asciidoctor asciidoctor, Options options, File f, File sourceDir, MemoryLogHandler memoryLogHandler, boolean lastFile) throws MojoExecutionException { asciidoctor.convertFile(f, options); logConvertedFile(f); + if (logHandler.getFailFast() || lastFile) { + processLogRecords(sourceDir, memoryLogHandler); + } } protected void logConvertedFile(File f) { diff --git a/asciidoctor-maven-plugin/src/test/java/org/asciidoctor/maven/AsciidoctorMojoLogHandlerTest.java b/asciidoctor-maven-plugin/src/test/java/org/asciidoctor/maven/AsciidoctorMojoLogHandlerTest.java index 6a9c3ae9..1a2ab457 100644 --- a/asciidoctor-maven-plugin/src/test/java/org/asciidoctor/maven/AsciidoctorMojoLogHandlerTest.java +++ b/asciidoctor-maven-plugin/src/test/java/org/asciidoctor/maven/AsciidoctorMojoLogHandlerTest.java @@ -12,6 +12,7 @@ import org.asciidoctor.maven.log.FailIf; import org.asciidoctor.maven.log.LogHandler; import org.junit.jupiter.api.Disabled; +import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import static org.asciidoctor.log.Severity.ERROR; @@ -393,6 +394,48 @@ void should_not_print_default_AsciidoctorJ_messages() throws MojoFailureExceptio consoleHolder.release(); } + @Nested + class WithFailOn { + + @Test + void should_print_messages_for_all_sources_when_failFast_is_false() throws MojoFailureException, MojoExecutionException { + // setup + final ConsoleHolder consoleHolder = ConsoleHolder.start(); + + File srcDir = new File(DEFAULT_SOURCE_DIRECTORY, "errors"); + File outputDir = newOutputTestDirectory("logHandler"); + LogHandler logHandler = new LogHandler(); + logHandler.setOutputToConsole(true); + + // when + AsciidoctorMojo mojo = mockAsciidoctorMojo(logHandler); + mojo.backend = "html"; + mojo.sourceDirectory = srcDir; + mojo.outputDirectory = outputDir; + mojo.execute(); + + // then + List asciidoctorMessages = Arrays.stream(consoleHolder.getOutput().split("\n")) + .filter(line -> line.contains("asciidoctor:")) + .collect(Collectors.toList()); + + assertThat(asciidoctorMessages) + .hasSize(6); + assertThat(asciidoctorMessages.get(0)) + .contains(fixOsSeparator("[info] asciidoctor: ERROR: errors/document-with-missing-include.adoc: line 3: include file not found:")); + assertThat(asciidoctorMessages.get(1)) + .contains(fixOsSeparator("[info] asciidoctor: ERROR: errors/document-with-missing-include.adoc: line 5: include file not found:")); + assertThat(asciidoctorMessages.get(2)) + .contains(fixOsSeparator("[info] asciidoctor: ERROR: errors/document-with-missing-include.adoc: line 9: include file not found:")); + assertThat(asciidoctorMessages.get(3)) + .contains(fixOsSeparator("[info] asciidoctor: WARN: errors/document-with-missing-include.adoc: line 25: no callout found for <1>")); + + // cleanup + consoleHolder.release(); + } + + } + private List getOutputInfoLines(ConsoleHolder consoleHolder) { final String lineSeparator = lineSeparator(); return Arrays.stream(consoleHolder.getOutput().split(lineSeparator)) diff --git a/asciidoctor-maven-plugin/src/test/resources/src/asciidoctor/errors/valid.adoc b/asciidoctor-maven-plugin/src/test/resources/src/asciidoctor/errors/valid.adoc new file mode 100644 index 00000000..51bf399f --- /dev/null +++ b/asciidoctor-maven-plugin/src/test/resources/src/asciidoctor/errors/valid.adoc @@ -0,0 +1,7 @@ += Document Title + +This a valid document. + +== Section A + +No errors to be seen.