aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/main/scala/org/perl8/test/ExternalTest.scala9
1 files changed, 9 insertions, 0 deletions
diff --git a/src/main/scala/org/perl8/test/ExternalTest.scala b/src/main/scala/org/perl8/test/ExternalTest.scala
index 5c3be81..533570c 100644
--- a/src/main/scala/org/perl8/test/ExternalTest.scala
+++ b/src/main/scala/org/perl8/test/ExternalTest.scala
@@ -10,12 +10,21 @@ import scala.annotation.tailrec
class ExternalTest (cmdLine: Seq[String]) extends Test {
def run: Int = {
val processBuilder = new ProcessBuilder(cmdLine: _*)
+
+ // Ensure that if stdout and stderr are both pointing to the same place (a
+ // terminal or file or something) that they remain synchronized. This is
+ // only possible if the endpoint they are streaming to is the same place
+ // underneath, with no extra processing in between. (This is safe because
+ // stdout is typically line-buffered, and we only ever output a line at a
+ // time when writing TAP, so in theory, buffering of the underlying file
+ // descriptor shouldn't make a difference here)
if (Console.out eq System.out) {
processBuilder.redirectOutput(ProcessBuilder.Redirect.INHERIT)
}
if (Console.err eq System.err) {
processBuilder.redirectError(ProcessBuilder.Redirect.INHERIT)
}
+
val process = processBuilder.start
val streams = Seq(