Make FilterTestHeaderOutputStream respect line separator on Windows Fixes https://github.com/bazelbuild/bazel/issues/10931 Closes #10935. PiperOrigin-RevId: 300112038
diff --git a/src/main/java/com/google/devtools/build/lib/exec/TestLogHelper.java b/src/main/java/com/google/devtools/build/lib/exec/TestLogHelper.java index 409c10d..589c85c 100644 --- a/src/main/java/com/google/devtools/build/lib/exec/TestLogHelper.java +++ b/src/main/java/com/google/devtools/build/lib/exec/TestLogHelper.java
@@ -15,6 +15,7 @@ import com.google.common.io.ByteStreams; import com.google.devtools.build.lib.exec.TestStrategy.TestOutputFormat; +import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.vfs.Path; import java.io.BufferedOutputStream; import java.io.FilterOutputStream; @@ -105,7 +106,10 @@ } else if (b == NEWLINE) { String line = lineBuilder.toString(); lineBuilder = new StringBuilder(); - if (line.equals(TestLogHelper.HEADER_DELIMITER)) { + if (line.equals(TestLogHelper.HEADER_DELIMITER) + || + // On Windows, the line break could be \r\n, we want this case to work as well. + (OS.getCurrent() == OS.WINDOWS && line.equals(TestLogHelper.HEADER_DELIMITER + "\r"))) { seenDelimiter = true; } } else if (lineBuilder.length() <= TestLogHelper.HEADER_DELIMITER.length()) {
diff --git a/src/test/java/com/google/devtools/build/lib/exec/StreamedTestOutputTest.java b/src/test/java/com/google/devtools/build/lib/exec/StreamedTestOutputTest.java index cc04ead..66ee73a 100644 --- a/src/test/java/com/google/devtools/build/lib/exec/StreamedTestOutputTest.java +++ b/src/test/java/com/google/devtools/build/lib/exec/StreamedTestOutputTest.java
@@ -18,7 +18,6 @@ import com.google.common.base.Strings; import com.google.common.io.ByteStreams; -import com.google.devtools.build.lib.util.OS; import com.google.devtools.build.lib.util.io.OutErr; import com.google.devtools.build.lib.vfs.FileSystemUtils; import com.google.devtools.build.lib.vfs.Path; @@ -66,11 +65,6 @@ @Test public void testOnlyOutputsContentsAfterHeaderWhenPresent() throws IOException { - if (OS.getCurrent() == OS.WINDOWS) { - // TODO(b/151095783): Disabled because underlying code doesn't respect system line separator. - return; - } - Path watchedPath = fileSystem.getPath("/myfile"); FileSystemUtils.writeLinesAs( watchedPath, @@ -86,7 +80,8 @@ try (StreamedTestOutput underTest = new StreamedTestOutput(OutErr.create(out, err), fileSystem.getPath("/myfile"))) {} - assertThat(out.toString(StandardCharsets.UTF_8.name())).isEqualTo("included\nlines\n"); + assertThat(out.toString(StandardCharsets.UTF_8.name())) + .isEqualTo(String.format("included%nlines%n")); assertThat(err.toString(StandardCharsets.UTF_8.name())).isEmpty(); }