Account for IPC::Run::result() Windows behavior change.

This restores compatibility with the not-yet-released successor of
version 20220807.0.  Back-patch to 9.4, which introduced this code.

Reviewed by Andrew Dunstan.

Discussion: https://postgr.es/m/20221117061805.GA4020280@rfd.leadboat.com
This commit is contained in:
Noah Misch 2022-11-17 07:35:06 -08:00
parent 40064e103b
commit 877cfeb4fb
1 changed files with 7 additions and 9 deletions

View File

@ -365,15 +365,13 @@ sub command_exit_is
my $h = start $cmd;
$h->finish();
# On Windows, the exit status of the process is returned directly as the
# process's exit code, while on Unix, it's returned in the high bits
# of the exit code (see WEXITSTATUS macro in the standard <sys/wait.h>
# header file). IPC::Run's result function always returns exit code >> 8,
# assuming the Unix convention, which will always return 0 on Windows as
# long as the process was not terminated by an exception. To work around
# that, use $h->full_result on Windows instead.
my $result = ($Config{osname} eq "MSWin32") ?
($h->full_results)[0] : $h->result(0);
# Normally, if the child called exit(N), IPC::Run::result() returns N. On
# Windows, with IPC::Run v20220807.0 and earlier, full_results() is the
# method that returns N (https://github.com/toddr/IPC-Run/issues/161).
my $result =
($Config{osname} eq "MSWin32" && $IPC::Run::VERSION <= 20220807.0)
? ($h->full_results)[0]
: $h->result(0);
is($result, $expected, $test_name);
}