Skip to content

Commit 91e353e

Browse files
committed
Issue #3166: STDOUT and STDERR are reset after consolele test execution
1 parent 7559ea2 commit 91e353e

File tree

5 files changed

+65
-77
lines changed

5 files changed

+65
-77
lines changed

documentation/src/docs/asciidoc/release-notes/release-notes-5.12.0-RC2.adoc

Lines changed: 0 additions & 71 deletions
This file was deleted.

documentation/src/docs/asciidoc/release-notes/release-notes-5.13.0-M1.adoc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,8 @@ repository on GitHub.
2626
[[release-notes-5.13.0-M1-junit-platform-new-features-and-improvements]]
2727
==== New Features and Improvements
2828

29-
* ❓
29+
* New optional CLI options `--redirect-stdout` and `--redirect-stderr` to redirect stdout
30+
and stderr outputs to a file.
3031

3132

3233
[[release-notes-5.13.0-M1-junit-jupiter]]

junit-platform-console/src/main/java/org/junit/platform/console/tasks/ConsoleTestExecutor.java

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -104,12 +104,20 @@ private TestExecutionSummary executeTests(PrintWriter out, Optional<Path> report
104104
Launcher launcher = launcherSupplier.get();
105105
SummaryGeneratingListener summaryListener = registerListeners(out, reportsDir, launcher);
106106

107-
redirectStdStreams(outputOptions.getStdoutPath(), outputOptions.getStderrPath());
107+
PrintStream originalOut = System.out;
108+
PrintStream originalErr = System.err;
109+
try {
110+
redirectStdStreams(outputOptions.getStdoutPath(), outputOptions.getStderrPath());
108111

109-
LauncherDiscoveryRequestBuilder discoveryRequestBuilder = toDiscoveryRequestBuilder(discoveryOptions);
110-
reportsDir.ifPresent(dir -> discoveryRequestBuilder.configurationParameter(OUTPUT_DIR_PROPERTY_NAME,
111-
dir.toAbsolutePath().toString()));
112-
launcher.execute(discoveryRequestBuilder.build());
112+
LauncherDiscoveryRequestBuilder discoveryRequestBuilder = toDiscoveryRequestBuilder(discoveryOptions);
113+
reportsDir.ifPresent(dir -> discoveryRequestBuilder.configurationParameter(OUTPUT_DIR_PROPERTY_NAME,
114+
dir.toAbsolutePath().toString()));
115+
launcher.execute(discoveryRequestBuilder.build());
116+
}
117+
finally {
118+
System.setOut(originalOut);
119+
System.setErr(originalErr);
120+
}
113121

114122
TestExecutionSummary summary = summaryListener.getSummary();
115123
if (summary.getTotalFailureCount() > 0 || outputOptions.getDetails() != Details.NONE) {

platform-tests/src/test/java/org/junit/platform/console/ConsoleLauncherIntegrationTests.java

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,17 @@
1010

1111
package org.junit.platform.console;
1212

13+
import static java.nio.file.Files.deleteIfExists;
1314
import static org.assertj.core.api.Assertions.assertThat;
1415
import static org.junit.jupiter.api.Assertions.assertAll;
1516
import static org.junit.jupiter.api.Assertions.assertArrayEquals;
1617
import static org.junit.jupiter.api.Assertions.assertEquals;
18+
import static org.junit.jupiter.api.Assertions.assertTrue;
19+
20+
import java.io.File;
21+
import java.io.IOException;
22+
import java.nio.file.Files;
23+
import java.nio.file.Path;
1724

1825
import org.junit.jupiter.api.Test;
1926
import org.junit.jupiter.params.ParameterizedTest;
@@ -92,4 +99,36 @@ void executeScanModules(final String line) {
9299
assertEquals(0, new ConsoleLauncherWrapper().execute(args1).getTestsFoundCount());
93100
}
94101

102+
@ParameterizedTest
103+
@ValueSource(strings = { "--redirect-stdout", "--redirect-stderr" })
104+
void executeWithRedirectedStdStream(String redirectedStream) throws IOException {
105+
Path outputFile = Path.of("foo.txt");
106+
var line = String.format(
107+
"execute -e junit-jupiter --select-method org.junit.platform.console.options.StdStreamTest#printTest "
108+
+ "%s %s",
109+
redirectedStream, outputFile);
110+
var args = line.split(" ");
111+
new ConsoleLauncherWrapper().execute(args);
112+
113+
assertTrue(Files.exists(outputFile), "File does not exist.");
114+
assertEquals(Files.size(outputFile), 22, "Invalid file size.");
115+
deleteIfExists(outputFile);
116+
}
117+
118+
@Test
119+
void executeWithRedirectedStdStreamsToSameFile() throws IOException {
120+
Path outputFile = Path.of("foo.txt");
121+
var line = String.format(
122+
"execute -e junit-jupiter " +
123+
"--select-method org.junit.platform.console.options.StdStreamTest#printTest " +
124+
"--redirect-stdout %s " +
125+
"--redirect-stderr %s",
126+
outputFile, outputFile);
127+
var args = line.split(" ");
128+
new ConsoleLauncherWrapper().execute(args);
129+
130+
assertTrue(Files.exists(outputFile), "File does not exist.");
131+
assertEquals(Files.size(outputFile), 44, "Invalid file size.");
132+
deleteIfExists(outputFile);
133+
}
95134
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package org.junit.platform.console.options;
2+
import org.junit.jupiter.api.Test;
3+
4+
public class StdStreamTest {
5+
6+
@Test
7+
void printTest() {
8+
System.out.println("Writing to STDOUT...");
9+
System.err.println("Writing to STDERR...");
10+
}
11+
}

0 commit comments

Comments
 (0)