command_ok_ "$PFXFLAG --merge: missing final newline is added" -- \
grep -q '^##@%:@ final stderr line without newline terminator$' all.log
+
+# Test preserved stdout/stderr ordering. The sleeps between writes are
+# necessary because stdout and stderr are independent and thus inherently race
+# with each other. (The kernel can wake up the two downstream reader threads
+# in the opposite order from the upstream writes. Or, if the TAP driver was
+# changed to use select or poll, the upstream writer can write to both streams
+# before the kernel wakes up the one downstream reader.)
+PFXFLAG='--stderr-prefix "# "'
+desc="$PFXFLAG --merge stdout/stderr ordering"
+cat >all.test <<END || bailout_ "failed to create all.test"
+#!/bin/sh
+echo '1..1'
+sleep 1
+echo 'stderr 1' >&2
+sleep 1
+echo 'ok 1'
+sleep 1
+echo 'stderr 2' >&2
+END
+chmod a+x all.test || bailout_ "failed to make all.test executable"
+
+check_log_line_order() {
+ {
+ grep -xe "$1" all.log
+ grep -xe "$2" all.log
+ sed -n -e '/^\('"$1"'\)$/,${/^\('"$2"'\)$/p}' all.log | grep -xe "$2"
+ } >&2 # Write to stderr in case $1 or $2 looks like a TAP directive.
+}
+
+command_ok_ "$desc: make check passes" -- \
+ run_make -O AM_TEST_LOG_DRIVER_FLAGS="$PFXFLAG --merge" check
+dumpf all.log
+command_ok_ "$desc: result counts are correct" -- \
+ count_test_results total=1 pass=1 fail=0 xpass=0 xfail=0 skip=0 error=0
+command_ok_ "$desc: '1..1' before 'stderr 1'" -- \
+ check_log_line_order '1\.\.1' '# stderr 1'
+command_ok_ "$desc: 'stderr 1' before 'ok 1'" -- \
+ check_log_line_order '# stderr 1' 'ok 1'
+command_ok_ "$desc: 'ok 1' before 'stderr 2'" -- \
+ check_log_line_order 'ok 1' '# stderr 2'
+
+
plan_ now
: