xref: /openbsd-src/gnu/usr.bin/perl/t/io/errno.t (revision 56d68f1e19ff848c889ecfa71d3a06340ff64892)
1#!./perl
2# vim: ts=4 sts=4 sw=4:
3
4# $! may not be set if EOF was reached without any error.
5# https://github.com/Perl/perl5/issues/8431
6
7use strict;
8use Config;
9
10chdir 't' if -d 't';
11require './test.pl';
12
13plan( tests => 16 );
14
15my $test_prog = 'undef $!;while(<>){print}; print $!';
16my $saved_perlio;
17
18BEGIN {
19    $saved_perlio = $ENV{PERLIO};
20}
21END {
22    delete $ENV{PERLIO};
23    $ENV{PERLIO} = $saved_perlio if defined $saved_perlio;
24}
25
26for my $perlio ('perlio', 'stdio') {
27    $ENV{PERLIO} = $perlio;
28SKIP:
29    for my $test_in ("test\n", "test") {
30		skip("Guaranteed newline at EOF on VMS", 4) if $^O eq 'VMS' && $test_in eq 'test';
31                # perl #71504 added skip in openbsd+threads+stdio;
32                # then commit 23705063 made -lpthread the default.
33                skip("[perl #71504] OpenBSD test failures in errno.t with ithreads and perlio]; [perl #126306: openbsd t/io/errno.t tests fail randomly]", 8)
34                    if $^O eq 'openbsd' && $perlio eq 'stdio';
35		my $test_in_esc = $test_in;
36		$test_in_esc =~ s/\n/\\n/g;
37		for my $rs_code ('', '$/=undef', '$/=\2', '$/=\1024') {
38		    TODO:
39		    {
40			is( runperl( prog => "$rs_code; $test_prog",
41						 stdin => $test_in, stderr => 1),
42				$test_in,
43				"Wrong errno, PERLIO=$ENV{PERLIO} stdin='$test_in_esc', $rs_code");
44		    }
45		}
46    }
47}
48