On 28.11.2021 15:38, Junio C Hamano wrote:
Fabian Stelzer <fs@xxxxxxxxxxxx> writes:
I was expecting something along the lines of ...
# What is written by tests to their FD #1 and #2 are sent to
# different places depending on the test mode (e.g. /dev/null in
# non-verbose mode, piped to tee with --tee option, etc.) Original
# FD #1 and #2 are saved away to #5 and #7, so that test framework
# can use them to send the output to these low FDs before the
# mode-specific redirection.
... but this only talks about the output side. The final version
needs to mention the input side, too.
I like to use the term stdin/err/out since that is what i would grep for
when trying to find out more about the test i/o behaviour.
I do not mind phrasing "original FD #1" as "original standard
output" at all. I just wanted to make sure it is clear to readers
whose FD #1 and FD #5 we are talking about. In other words, the
readers should get a clear understanding of where they are writing
to, when the code they write in test_expect_success block outputs to
FD #1, and what the code needs to do if it wants to always show
something to the original standard output stream.
The current version in my branch is now:
What is written by tests to stdout and stderr is sent so different places
depending on the test mode (e.g. /dev/null in non-verbose mode, piped to tee
with --tee option, etc.). We save the original stdin to FD #6 and stdout and
stderr to #5 and #7, so that the test framework can use them (e.g. for
printing errors within the test framework) independently of the test mode.
which I think should make this sufficiently clear.
I'm wondering now though if we should write to #7 instead of #5 in
BAIL_OUT(). The current use in test-lib/test-lib-functions seems a bit
inconsistent.
For example:
error >&7 "bug in the test script: $*"
echo >&7 "test_must_fail: only 'git' is allowed: $*"
but:
echo >&5 "FATAL: Cannot prepare test area"
echo >&5 "FATAL: Unexpected exit with code $code"
Sometimes these errors result in immediate exit 1, but not always.
I'm not sure if the TAP framework that BAIL_OUT() references expects the
bail out error on a specific fd.