X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fio%2Ffflush.t;h=056517fd3e3931ce2667a17908fd4569e7c9f0a6;hb=ff26e4c8efcd1b0f075892dd09118f525b8b8f54;hp=6c22fa663a00a2f516216b737d314291eb1b5f65;hpb=a3d14d6a6e59cea3b2c933b54e6d6babf7210ef8;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/io/fflush.t b/t/io/fflush.t index 6c22fa6..056517fd 100644 --- a/t/io/fflush.t +++ b/t/io/fflush.t @@ -3,6 +3,7 @@ BEGIN { chdir 't' if -d 't'; @INC = '../lib'; + require './test.pl'; } # Script to test auto flush on fork/exec/system/qx. The idea is to @@ -23,24 +24,18 @@ my $fflushall = defined $Config{fflushall} ? $Config{fflushall} eq 'define' ? 1 my $d_fork = defined $Config{d_fork} ? $Config{d_fork} eq 'define' ? 1 : 0 : 0; if ($useperlio || $fflushNULL || $d_sfio) { - print "1..4\n"; + print "1..7\n"; } else { if ($fflushall) { - print "1..4\n"; + print "1..7\n"; } else { print "1..0 # Skip: fflush(NULL) or equivalent not available\n"; exit; } } -my $runperl = qq{$^X "-I../lib"}; -my @delete; - -END { - for (@delete) { - unlink $_ or warn "unlink $_: $!"; - } -} +my $runperl = $^X =~ m/\s/ ? qq{"$^X"} : $^X; +$runperl .= qq{ "-I../lib"}; sub file_eq { my $f = shift; @@ -57,7 +52,8 @@ sub file_eq { # This script will be used as the command to execute from # child processes -open PROG, "> ff-prog" or die "open ff-prog: $!"; +my $ffprog = tempfile(); +open PROG, "> $ffprog" or die "open $ffprog: $!"; print PROG <<'EOF'; my $f = shift; my $str = shift; @@ -66,8 +62,7 @@ print OUT $str; close OUT; EOF ; -close PROG; -push @delete, "ff-prog"; +close PROG or die "close $ffprog: $!";; $| = 0; # we want buffered output @@ -75,7 +70,7 @@ $| = 0; # we want buffered output if (!$d_fork) { print "ok 1 # skipped: no fork\n"; } else { - my $f = "ff-fork-$$"; + my $f = tempfile(); open OUT, "> $f" or die "open $f: $!"; print OUT "Pe"; my $pid = fork; @@ -86,7 +81,7 @@ if (!$d_fork) { } elsif (defined $pid) { # Kid print OUT "r"; - my $command = qq{$runperl "ff-prog" "$f" "l"}; + my $command = qq{$runperl "$ffprog" "$f" "l"}; print "# $command\n"; exec $command or die $!; exit; @@ -96,7 +91,6 @@ if (!$d_fork) { } print file_eq($f, "Perl") ? "ok 1\n" : "not ok 1\n"; - push @delete, $f; } # Test flush on system/qx/pipe open @@ -118,14 +112,26 @@ my %subs = ( my $t = 2; for (qw(system qx popen)) { my $code = $subs{$_}; - my $f = "ff-$_-$$"; - my $command = qq{$runperl "ff-prog" "$f" "rl"}; + my $f = tempfile(); + my $command = qq{$runperl $ffprog "$f" "rl"}; open OUT, "> $f" or die "open $f: $!"; print OUT "Pe"; - close OUT; + close OUT or die "close $f: $!";; print "# $command\n"; $code->($command); print file_eq($f, "Perl") ? "ok $t\n" : "not ok $t\n"; - push @delete, $f; ++$t; } + +my $cmd = _create_runperl( + switches => ['-l'], + prog => + sprintf('print qq[ok $_] for (%d..%d)', $t, $t+2)); +print "# cmd = '$cmd'\n"; +open my $CMD, "$cmd |" or die "Can't open pipe to '$cmd': $!"; +while (<$CMD>) { + system("$runperl -e 0"); + print; +} +close $CMD; +$t += 3;