1*5759b3d2Safresh1#!./perl 2*5759b3d2Safresh1 3*5759b3d2Safresh1BEGIN { 4*5759b3d2Safresh1 chdir 't' if -d 't'; 5*5759b3d2Safresh1 require './test.pl'; 6*5759b3d2Safresh1 set_up_inc('../lib'); 7*5759b3d2Safresh1 skip_all_if_miniperl("miniperl can't load PerlIO::scalar"); 8*5759b3d2Safresh1} 9*5759b3d2Safresh1 10*5759b3d2Safresh1plan(tests => 2*11*29); 11*5759b3d2Safresh1 12*5759b3d2Safresh1use Errno qw(EBADF ENOENT); 13*5759b3d2Safresh1 14*5759b3d2Safresh1open(SCALARFILE, "<", \"wibble") or die $!; # needs PerlIO::scalar 15*5759b3d2Safresh1open(CLOSEDFILE, "<", "./test.pl") or die $!; 16*5759b3d2Safresh1close(CLOSEDFILE) or die $!; 17*5759b3d2Safresh1opendir(CLOSEDDIR, "../lib") or die $!; 18*5759b3d2Safresh1closedir(CLOSEDDIR) or die $!; 19*5759b3d2Safresh1 20*5759b3d2Safresh1foreach my $op ( 21*5759b3d2Safresh1 qw(stat lstat), 22*5759b3d2Safresh1 (map { "-$_" } qw(r w x o R W X O e z s f d l p S b c t u g k T B M A C)), 23*5759b3d2Safresh1) { 24*5759b3d2Safresh1 foreach my $arg ( 25*5759b3d2Safresh1 (map { ($_, "\\*$_") } 26*5759b3d2Safresh1 qw(NEVEROPENED SCALARFILE CLOSEDFILE CLOSEDDIR _)), 27*5759b3d2Safresh1 "\"tmpnotexist\"", 28*5759b3d2Safresh1 ) { 29*5759b3d2Safresh1 my $argdesc = $arg; 30*5759b3d2Safresh1 if ($arg eq "_") { 31*5759b3d2Safresh1 my @z = lstat "tmpnotexist"; 32*5759b3d2Safresh1 $argdesc .= " with prior stat fail"; 33*5759b3d2Safresh1 } 34*5759b3d2Safresh1 SKIP: { 35*5759b3d2Safresh1 if ($op eq "-l" && $arg =~ /\A\\/) { 36*5759b3d2Safresh1 # The op weirdly stringifies the globref and uses it as 37*5759b3d2Safresh1 # a filename, rather than treating it as a file handle. 38*5759b3d2Safresh1 # That might be a bug, but while that behaviour exists it 39*5759b3d2Safresh1 # needs to be exempted from these tests. 40*5759b3d2Safresh1 skip "-l on globref", 2; 41*5759b3d2Safresh1 } 42*5759b3d2Safresh1 if ($op eq "-t" && $arg eq "\"tmpnotexist\"") { 43*5759b3d2Safresh1 # The op doesn't operate on filenames. 44*5759b3d2Safresh1 skip "-t on filename", 2; 45*5759b3d2Safresh1 } 46*5759b3d2Safresh1 $! = 0; 47*5759b3d2Safresh1 my $res = eval "$op $arg"; 48*5759b3d2Safresh1 my $err = $!; 49*5759b3d2Safresh1 is $res, $op =~ /\A-/ ? undef : !!0, "result of $op $arg"; 50*5759b3d2Safresh1 is 0+$err, 51*5759b3d2Safresh1 $arg eq "\"tmpnotexist\"" || 52*5759b3d2Safresh1 ($op =~ /\A-[TB]\z/ && $arg =~ /_\z/) ? ENOENT : EBADF, 53*5759b3d2Safresh1 "error from $op $arg"; 54*5759b3d2Safresh1 } 55*5759b3d2Safresh1 } 56*5759b3d2Safresh1} 57*5759b3d2Safresh1 58*5759b3d2Safresh11; 59