mirror of
https://github.com/postgres/postgres.git
synced 2026-06-10 17:20:31 -04:00
perl tap: Show die reason in TAP output
Install a $SIG{__DIE__} handler in the INIT block of Utils.pm that emits
the die message as a TAP diagnostic. Previously, an unexpected die
(e.g. from safe_psql) produced only "no plan was declared" with no
indication of the actual error. The handler also calls done_testing()
to suppress that confusing message.
Dies during compilation ($^S undefined) and inside eval ($^S == 1) are
left alone.
Author: Jelte Fennema-Nio <postgres@jeltef.nl>
Reviewed-by: Andrew Dunstan <andrew@dunslane.net>
Reviewed-by: Corey Huinker <corey.huinker@gmail.com>
Reviewed-by: Zsolt Parragi <zsolt.parragi@percona.com>
Reviewed-by: Nazir Bilal Yavuz <byavuz81@gmail.com>
Reviewed-by: Andres Freund <andres@anarazel.de>
Discussion: https://postgr.es/m/DFYFWM053WHS.10K8ZPJ605UFK@jeltef.nl
Discussion: https://postgr.es/m/20220222181924.eehi7o4pmneeb4hm%40alap3.anarazel.de
This commit is contained in:
parent
1402b8d2fc
commit
76540fdedf
1 changed files with 18 additions and 0 deletions
|
|
@ -244,6 +244,24 @@ INIT
|
|||
autoflush STDOUT 1;
|
||||
autoflush STDERR 1;
|
||||
autoflush $testlog 1;
|
||||
|
||||
# Because of the above redirection the tap output wouldn't contain
|
||||
# information about tests failing due to die etc. Fix that by also
|
||||
# printing the failure to the original stderr.
|
||||
$SIG{__DIE__} = sub {
|
||||
# Ignore dies because of syntax errors, those will be displayed
|
||||
# correctly anyway.
|
||||
return if !defined $^S;
|
||||
|
||||
# Ignore dies inside evals
|
||||
return if $^S == 1;
|
||||
|
||||
diag("die: $_[0]");
|
||||
# Also call done_testing() to avoid the confusing "no plan was declared"
|
||||
# message in TAP output when a test dies.
|
||||
eval { done_testing(); }
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
END
|
||||
|
|
|
|||
Loading…
Reference in a new issue