Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
Fix places in TestLib.pm in need of adaptation to the output of Msys perl
authorMichael Paquier <michael@paquier.xyz>
Tue, 21 Sep 2021 23:43:00 +0000 (08:43 +0900)
committerMichael Paquier <michael@paquier.xyz>
Tue, 21 Sep 2021 23:43:00 +0000 (08:43 +0900)
Contrary to the output of native perl, Msys perl generates outputs with
CRLFs characters.  There are already places in the TAP code where CRLFs
(\r\n) are automatically converted to LF (\n) on Msys, but we missed a
couple of places when running commands and using their output for
comparison, that would lead to failures.

This problem has been found thanks to the test added in 5adb067 using
TestLib::command_checks_all(), but after a closer look more code paths
were missing a filter.

This is backpatched all the way down to prevent any surprises if a new
test is introduced in stable branches.

Reviewed-by: Andrew Dunstan, Álvaro Herrera
Discussion: https://postgr.es/m/1252480.1631829409@sss.pgh.pa.us
Backpatch-through: 9.6

src/test/perl/TestLib.pm

index 108f393774e6cab9fc6a4adda8e65394bf6aaf96..8c533453b41cbebc6f530adc7b4d6ed41908a605 100644 (file)
@@ -414,6 +414,7 @@ sub run_command
    my ($cmd) = @_;
    my ($stdout, $stderr);
    my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
+   foreach ($stderr, $stdout) { s/\r\n/\n/g if $Config{osname} eq 'msys'; }
    chomp($stdout);
    chomp($stderr);
    return ($stdout, $stderr);
@@ -858,6 +859,7 @@ sub command_like
    my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
    ok($result, "$test_name: exit code 0");
    is($stderr, '', "$test_name: no stderr");
+   $stdout =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
    like($stdout, $expected_stdout, "$test_name: matches");
    return;
 }
@@ -910,6 +912,7 @@ sub command_fails_like
    print("# Running: " . join(" ", @{$cmd}) . "\n");
    my $result = IPC::Run::run $cmd, '>', \$stdout, '2>', \$stderr;
    ok(!$result, "$test_name: exit code not 0");
+   $stderr =~ s/\r\n/\n/g if $Config{osname} eq 'msys';
    like($stderr, $expected_stderr, "$test_name: matches");
    return;
 }
@@ -954,6 +957,8 @@ sub command_checks_all
      if $ret & 127;
    $ret = $ret >> 8;
 
+   foreach ($stderr, $stdout) { s/\r\n/\n/g if $Config{osname} eq 'msys'; }
+
    # check status
    ok($ret == $expected_ret,
        "$test_name status (got $ret vs expected $expected_ret)");