From 3474322fbc611569d0e2ca1f79454ca5cb1c5e20 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Mon, 25 Nov 2024 19:52:11 +0100 Subject: [PATCH 1/6] Enable auto-flushing of output to fix `testfeed` details mode --- .../junitbuild/exec/RunConsoleLauncher.kt | 18 ++++++++++++++++-- .../platform/console/ConsoleLauncher.java | 12 +++++++----- .../platform/console/options/MainCommand.java | 12 ++++++++---- 3 files changed, 31 insertions(+), 11 deletions(-) diff --git a/gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt b/gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt index a92f31195ad2..896e76090c6f 100644 --- a/gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt +++ b/gradle/plugins/common/src/main/kotlin/junitbuild/exec/RunConsoleLauncher.kt @@ -6,7 +6,13 @@ import org.gradle.api.file.ConfigurableFileCollection import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.provider.ListProperty import org.gradle.api.provider.Property -import org.gradle.api.tasks.* +import org.gradle.api.tasks.CacheableTask +import org.gradle.api.tasks.Classpath +import org.gradle.api.tasks.Input +import org.gradle.api.tasks.Internal +import org.gradle.api.tasks.Nested +import org.gradle.api.tasks.SourceSetContainer +import org.gradle.api.tasks.TaskAction import org.gradle.api.tasks.options.Option import org.gradle.jvm.toolchain.JavaLauncher import org.gradle.jvm.toolchain.JavaToolchainService @@ -16,7 +22,6 @@ import org.gradle.process.CommandLineArgumentProvider import org.gradle.process.ExecOperations import trackOperationSystemAsInput import java.io.ByteArrayOutputStream -import java.util.* import javax.inject.Inject @CacheableTask @@ -97,4 +102,13 @@ abstract class RunConsoleLauncher @Inject constructor(private val execOperations debugging.set(enabled) } + @Suppress("unused") + @Option( + option = "show-output", + description = "Show output" + ) + fun setShowOutput(showOutput: Boolean) { + hideOutput.set(!showOutput) + } + } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java index 6ffd9ebefa5d..07d51de012e2 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java @@ -30,9 +30,7 @@ public class ConsoleLauncher { public static void main(String... args) { - PrintWriter out = new PrintWriter(System.out); - PrintWriter err = new PrintWriter(System.err); - CommandResult result = run(out, err, args); + CommandResult result = run(null, null, args); System.exit(result.getExitCode()); } @@ -57,8 +55,12 @@ CommandResult run(String... args) { return new CommandFacade(consoleTestExecutorFactory).run(out, err, args); } finally { - out.flush(); - err.flush(); + if (out != null) { + out.flush(); + } + if (err != null) { + err.flush(); + } } } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java index d4a86e807785..637e7ab0a7c5 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java @@ -144,10 +144,14 @@ private static CommandResult runCommand(PrintWriter out, PrintWriter err, Str private static CommandResult runCommand(PrintWriter out, PrintWriter err, String[] args, CommandLine commandLine) { - int exitCode = BaseCommand.initialize(commandLine) // - .setOut(out) // - .setErr(err) // - .execute(args); + commandLine = BaseCommand.initialize(commandLine); + if (out != null) { + commandLine = commandLine.setOut(out); + } + if (err != null) { + commandLine = commandLine.setErr(err); + } + int exitCode = commandLine.execute(args); return CommandResult.create(exitCode, getLikelyExecutedCommand(commandLine).getExecutionResult()); } From 20d81ace87aa057cb062019606e385e6320b9ac1 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Mon, 25 Nov 2024 20:40:26 +0100 Subject: [PATCH 2/6] Avoid passing around `null` --- .../platform/console/ConsoleLauncher.java | 31 +++++------------ .../console/options/CommandFacade.java | 12 +++++-- .../platform/console/options/MainCommand.java | 28 ++++++--------- .../console/options/OutputConfig.java | 34 +++++++++++++++++++ 4 files changed, 62 insertions(+), 43 deletions(-) create mode 100644 junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java index 07d51de012e2..eeaff9b6c2fa 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java @@ -30,38 +30,23 @@ public class ConsoleLauncher { public static void main(String... args) { - CommandResult result = run(null, null, args); + CommandResult result = newCommandFacade().run(args); System.exit(result.getExitCode()); } @API(status = INTERNAL, since = "1.0") public static CommandResult run(PrintWriter out, PrintWriter err, String... args) { - ConsoleLauncher consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, out, err); - return consoleLauncher.run(args); - } - - private final ConsoleTestExecutor.Factory consoleTestExecutorFactory; - private final PrintWriter out; - private final PrintWriter err; - - ConsoleLauncher(ConsoleTestExecutor.Factory consoleTestExecutorFactory, PrintWriter out, PrintWriter err) { - this.consoleTestExecutorFactory = consoleTestExecutorFactory; - this.out = out; - this.err = err; - } - - CommandResult run(String... args) { try { - return new CommandFacade(consoleTestExecutorFactory).run(out, err, args); + return newCommandFacade().run(args, out, err); } finally { - if (out != null) { - out.flush(); - } - if (err != null) { - err.flush(); - } + out.flush(); + err.flush(); } } + private static CommandFacade newCommandFacade() { + return new CommandFacade(ConsoleTestExecutor::new); + } + } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java index a591a59abb70..719765a3ecd3 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java @@ -33,10 +33,18 @@ public CommandFacade(ConsoleTestExecutor.Factory consoleTestExecutorFactory) { this.consoleTestExecutorFactory = consoleTestExecutorFactory; } - public CommandResult run(PrintWriter out, PrintWriter err, String[] args) { + public CommandResult run(String[] args) { + return run(args, Optional.empty()); + } + + public CommandResult run(String[] args, PrintWriter out, PrintWriter err) { + return run(args, Optional.of(new OutputConfig(out, err))); + } + + private CommandResult run(String[] args, Optional outputConfig) { Optional version = ManifestVersionProvider.getImplementationVersion(); System.setProperty("junit.docs.version", version.map(it -> it.endsWith("-SNAPSHOT") ? "snapshot" : it).orElse("current")); - return new MainCommand(consoleTestExecutorFactory).run(out, err, args); + return new MainCommand(consoleTestExecutorFactory).run(args, outputConfig); } } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java index 637e7ab0a7c5..c47f2d78d712 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java @@ -103,10 +103,11 @@ private Object runCommand(String subcommand, Optional triggeringOption) List args = new ArrayList<>(commandLine.getParseResult().expandedArgs()); triggeringOption.ifPresent(args::remove); - CommandResult result = runCommand(commandLine.getOut(), // - commandLine.getErr(), // + CommandResult result = runCommand( // + new CommandLine(command), // args.toArray(new String[0]), // - command); + Optional.of(new OutputConfig(commandLine)) // + ); this.commandResult = result; printDeprecationWarning(subcommand, triggeringOption, commandLine); @@ -130,27 +131,18 @@ private static void printDeprecationWarning(String subcommand, Optional err.flush(); } - CommandResult run(PrintWriter out, PrintWriter err, String[] args) { + CommandResult run(String[] args, Optional outputConfig) { CommandLine commandLine = new CommandLine(this) // .addSubcommand(new DiscoverTestsCommand(consoleTestExecutorFactory)) // .addSubcommand(new ExecuteTestsCommand(consoleTestExecutorFactory)) // .addSubcommand(new ListTestEnginesCommand()); - return runCommand(out, err, args, commandLine); + return runCommand(commandLine, args, outputConfig); } - private static CommandResult runCommand(PrintWriter out, PrintWriter err, String[] args, Object command) { - return runCommand(out, err, args, new CommandLine(command)); - } - - private static CommandResult runCommand(PrintWriter out, PrintWriter err, String[] args, - CommandLine commandLine) { - commandLine = BaseCommand.initialize(commandLine); - if (out != null) { - commandLine = commandLine.setOut(out); - } - if (err != null) { - commandLine = commandLine.setErr(err); - } + private static CommandResult runCommand(CommandLine commandLine, String[] args, + Optional outputConfig) { + BaseCommand.initialize(commandLine); + outputConfig.ifPresent(it -> it.applyTo(commandLine)); int exitCode = commandLine.execute(args); return CommandResult.create(exitCode, getLikelyExecutedCommand(commandLine).getExecutionResult()); } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java new file mode 100644 index 000000000000..f19edf4066ec --- /dev/null +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java @@ -0,0 +1,34 @@ +/* + * Copyright 2015-2024 the original author or authors. + * + * All rights reserved. This program and the accompanying materials are + * made available under the terms of the Eclipse Public License v2.0 which + * accompanies this distribution and is available at + * + * https://www.eclipse.org/legal/epl-v20.html + */ + +package org.junit.platform.console.options; + +import java.io.PrintWriter; + +import picocli.CommandLine; + +class OutputConfig { + + private final PrintWriter out; + private final PrintWriter err; + + OutputConfig(CommandLine commandLine) { + this(commandLine.getOut(), commandLine.getErr()); + } + + OutputConfig(PrintWriter out, PrintWriter err) { + this.out = out; + this.err = err; + } + + void applyTo(CommandLine commandLine) { + commandLine.setOut(out).setErr(err); + } +} From 2de4d9523a59cc9e0d9b1657ec978246e2e4a397 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Mon, 25 Nov 2024 20:48:15 +0100 Subject: [PATCH 3/6] Rename to `OutputStreamConfig` --- .../junit/platform/console/options/CommandFacade.java | 6 +++--- .../junit/platform/console/options/MainCommand.java | 10 +++++----- .../{OutputConfig.java => OutputStreamConfig.java} | 6 +++--- 3 files changed, 11 insertions(+), 11 deletions(-) rename junit-platform-console/src/main/java/org/junit/platform/console/options/{OutputConfig.java => OutputStreamConfig.java} (83%) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java index 719765a3ecd3..215295a69bd4 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java @@ -38,13 +38,13 @@ public CommandResult run(String[] args) { } public CommandResult run(String[] args, PrintWriter out, PrintWriter err) { - return run(args, Optional.of(new OutputConfig(out, err))); + return run(args, Optional.of(new OutputStreamConfig(out, err))); } - private CommandResult run(String[] args, Optional outputConfig) { + private CommandResult run(String[] args, Optional outputStreamConfig) { Optional version = ManifestVersionProvider.getImplementationVersion(); System.setProperty("junit.docs.version", version.map(it -> it.endsWith("-SNAPSHOT") ? "snapshot" : it).orElse("current")); - return new MainCommand(consoleTestExecutorFactory).run(args, outputConfig); + return new MainCommand(consoleTestExecutorFactory).run(args, outputStreamConfig); } } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java index c47f2d78d712..2b3da4e356b3 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java @@ -106,7 +106,7 @@ private Object runCommand(String subcommand, Optional triggeringOption) CommandResult result = runCommand( // new CommandLine(command), // args.toArray(new String[0]), // - Optional.of(new OutputConfig(commandLine)) // + Optional.of(new OutputStreamConfig(commandLine)) // ); this.commandResult = result; @@ -131,18 +131,18 @@ private static void printDeprecationWarning(String subcommand, Optional err.flush(); } - CommandResult run(String[] args, Optional outputConfig) { + CommandResult run(String[] args, Optional outputStreamConfig) { CommandLine commandLine = new CommandLine(this) // .addSubcommand(new DiscoverTestsCommand(consoleTestExecutorFactory)) // .addSubcommand(new ExecuteTestsCommand(consoleTestExecutorFactory)) // .addSubcommand(new ListTestEnginesCommand()); - return runCommand(commandLine, args, outputConfig); + return runCommand(commandLine, args, outputStreamConfig); } private static CommandResult runCommand(CommandLine commandLine, String[] args, - Optional outputConfig) { + Optional outputStreamConfig) { BaseCommand.initialize(commandLine); - outputConfig.ifPresent(it -> it.applyTo(commandLine)); + outputStreamConfig.ifPresent(it -> it.applyTo(commandLine)); int exitCode = commandLine.execute(args); return CommandResult.create(exitCode, getLikelyExecutedCommand(commandLine).getExecutionResult()); } diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputStreamConfig.java similarity index 83% rename from junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java rename to junit-platform-console/src/main/java/org/junit/platform/console/options/OutputStreamConfig.java index f19edf4066ec..dd72ed9e9f0b 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputConfig.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/OutputStreamConfig.java @@ -14,16 +14,16 @@ import picocli.CommandLine; -class OutputConfig { +class OutputStreamConfig { private final PrintWriter out; private final PrintWriter err; - OutputConfig(CommandLine commandLine) { + OutputStreamConfig(CommandLine commandLine) { this(commandLine.getOut(), commandLine.getErr()); } - OutputConfig(PrintWriter out, PrintWriter err) { + OutputStreamConfig(PrintWriter out, PrintWriter err) { this.out = out; this.err = err; } From 905fafd1df5370dde263e788710d75c07f7be4cc Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Mon, 25 Nov 2024 20:51:21 +0100 Subject: [PATCH 4/6] Polishing --- .../java/org/junit/platform/console/options/MainCommand.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java index 2b3da4e356b3..941a4976ea3e 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/MainCommand.java @@ -139,7 +139,7 @@ CommandResult run(String[] args, Optional outputStreamCon return runCommand(commandLine, args, outputStreamConfig); } - private static CommandResult runCommand(CommandLine commandLine, String[] args, + private static CommandResult runCommand(CommandLine commandLine, String[] args, Optional outputStreamConfig) { BaseCommand.initialize(commandLine); outputStreamConfig.ifPresent(it -> it.applyTo(commandLine)); From 168984647e0b22795095d869b230c6d9886cee4a Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Mon, 25 Nov 2024 20:59:29 +0100 Subject: [PATCH 5/6] Fix tests --- .../platform/console/ConsoleLauncher.java | 8 +------- .../console/options/CommandFacade.java | 8 +++++++- .../console/ConsoleLauncherTests.java | 19 ++++++------------- .../console/ConsoleLauncherWrapper.java | 11 ++++++----- 4 files changed, 20 insertions(+), 26 deletions(-) diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java index eeaff9b6c2fa..54345f061e2e 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/ConsoleLauncher.java @@ -36,13 +36,7 @@ public static void main(String... args) { @API(status = INTERNAL, since = "1.0") public static CommandResult run(PrintWriter out, PrintWriter err, String... args) { - try { - return newCommandFacade().run(args, out, err); - } - finally { - out.flush(); - err.flush(); - } + return newCommandFacade().run(args, out, err); } private static CommandFacade newCommandFacade() { diff --git a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java index 215295a69bd4..b1690e279c96 100644 --- a/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java +++ b/junit-platform-console/src/main/java/org/junit/platform/console/options/CommandFacade.java @@ -38,7 +38,13 @@ public CommandResult run(String[] args) { } public CommandResult run(String[] args, PrintWriter out, PrintWriter err) { - return run(args, Optional.of(new OutputStreamConfig(out, err))); + try { + return run(args, Optional.of(new OutputStreamConfig(out, err))); + } + finally { + out.flush(); + err.flush(); + } } private CommandResult run(String[] args, Optional outputStreamConfig) { diff --git a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherTests.java b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherTests.java index ef30a6d3db59..f4fb02f4a935 100644 --- a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherTests.java +++ b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherTests.java @@ -22,7 +22,6 @@ import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.EmptySource; import org.junit.jupiter.params.provider.MethodSource; -import org.junit.platform.console.tasks.ConsoleTestExecutor; /** * @since 1.0 @@ -36,8 +35,7 @@ class ConsoleLauncherTests { @EmptySource @MethodSource("commandsWithEmptyOptionExitCodes") void displayHelp(String command) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - var exitCode = consoleLauncher.run(command, "--help").getExitCode(); + var exitCode = ConsoleLauncher.run(printSink, printSink, command, "--help").getExitCode(); assertEquals(0, exitCode); assertThat(output()).contains("--help"); @@ -47,8 +45,7 @@ void displayHelp(String command) { @EmptySource @MethodSource("commandsWithEmptyOptionExitCodes") void displayVersion(String command) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - var exitCode = consoleLauncher.run(command, "--version").getExitCode(); + var exitCode = ConsoleLauncher.run(printSink, printSink, command, "--version").getExitCode(); assertEquals(0, exitCode); assertThat(output()).contains("JUnit Platform Console Launcher"); @@ -57,8 +54,7 @@ void displayVersion(String command) { @ParameterizedTest(name = "{0}") @MethodSource("commandsWithEmptyOptionExitCodes") void displayBanner(String command) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - consoleLauncher.run(command); + ConsoleLauncher.run(printSink, printSink, command); assertThat(output()).contains("Thanks for using JUnit!"); } @@ -66,8 +62,7 @@ void displayBanner(String command) { @ParameterizedTest(name = "{0}") @MethodSource("commandsWithEmptyOptionExitCodes") void disableBanner(String command, int expectedExitCode) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - var exitCode = consoleLauncher.run(command, "--disable-banner").getExitCode(); + var exitCode = ConsoleLauncher.run(printSink, printSink, command, "--disable-banner").getExitCode(); assertEquals(expectedExitCode, exitCode); assertThat(output()).doesNotContain("Thanks for using JUnit!"); @@ -76,8 +71,7 @@ void disableBanner(String command, int expectedExitCode) { @ParameterizedTest(name = "{0}") @MethodSource("commandsWithEmptyOptionExitCodes") void executeWithUnknownCommandLineOption(String command) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - var exitCode = consoleLauncher.run(command, "--all").getExitCode(); + var exitCode = ConsoleLauncher.run(printSink, printSink, command, "--all").getExitCode(); assertEquals(-1, exitCode); assertThat(output()).contains("Unknown option: '--all'").contains("Usage:"); @@ -90,8 +84,7 @@ private String output() { @ParameterizedTest(name = "{0}") @MethodSource("commandsWithEmptyOptionExitCodes") void executeWithoutCommandLineOptions(String command, int expectedExitCode) { - var consoleLauncher = new ConsoleLauncher(ConsoleTestExecutor::new, printSink, printSink); - var actualExitCode = consoleLauncher.run(command).getExitCode(); + var actualExitCode = ConsoleLauncher.run(printSink, printSink, command).getExitCode(); assertEquals(expectedExitCode, actualExitCode); } diff --git a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapper.java b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapper.java index 7ae6ba8fd921..0d2c240d8ea3 100644 --- a/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapper.java +++ b/platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherWrapper.java @@ -17,6 +17,7 @@ import java.io.StringWriter; import java.util.Optional; +import org.junit.platform.console.options.CommandFacade; import org.junit.platform.console.tasks.ConsoleTestExecutor; /** @@ -26,16 +27,14 @@ class ConsoleLauncherWrapper { private final StringWriter out = new StringWriter(); private final StringWriter err = new StringWriter(); - private final ConsoleLauncher consoleLauncher; + private final ConsoleTestExecutor.Factory consoleTestExecutorFactory; ConsoleLauncherWrapper() { this(ConsoleTestExecutor::new); } private ConsoleLauncherWrapper(ConsoleTestExecutor.Factory consoleTestExecutorFactory) { - var outWriter = new PrintWriter(out, false); - var errWriter = new PrintWriter(err, false); - this.consoleLauncher = new ConsoleLauncher(consoleTestExecutorFactory, outWriter, errWriter); + this.consoleTestExecutorFactory = consoleTestExecutorFactory; } public ConsoleLauncherWrapperResult execute(String... args) { @@ -47,7 +46,9 @@ public ConsoleLauncherWrapperResult execute(int expectedExitCode, String... args } public ConsoleLauncherWrapperResult execute(Optional expectedCode, String... args) { - var result = consoleLauncher.run(args); + var outWriter = new PrintWriter(out, false); + var errWriter = new PrintWriter(err, false); + var result = new CommandFacade(consoleTestExecutorFactory).run(args, outWriter, errWriter); var code = result.getExitCode(); var outText = out.toString(); var errText = err.toString(); From c8ec869c9ed2de666eb23240c8b022e27e7e5f28 Mon Sep 17 00:00:00 2001 From: Marc Philipp Date: Tue, 26 Nov 2024 08:26:35 +0100 Subject: [PATCH 6/6] Add to release notes --- .../docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc b/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc index e3802369cccc..f5b6fda0ff31 100644 --- a/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc +++ b/documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-M1.adoc @@ -18,6 +18,8 @@ JUnit repository on GitHub. * Fix support for disabling ANSI colors on the console when the `NO_COLOR` environment variable is available. +* Enable auto-flushing of output in the `ConsoleLauncher` to fix issues with buffering, + in particular when using the `--details=testfeed` option. [[release-notes-5.12.0-M1-junit-platform-deprecations-and-breaking-changes]] ==== Deprecations and Breaking Changes