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();
   }