X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fio%2Fargv.t;h=d6c895d6cc9fa806ebfc61a1d9934b9cab7c5734;hb=7de9d14ea5825e7555ec8154a1b3731aa00948b6;hp=c6565dc9c78f084aa5893adf83e9228c955645b0;hpb=181ea953f5037d8eebef8af5f5ba67f9ff02a565;p=p5sagit%2Fp5-mst-13.2.git diff --git a/t/io/argv.t b/t/io/argv.t old mode 100755 new mode 100644 index c6565dc..d6c895d --- a/t/io/argv.t +++ b/t/io/argv.t @@ -1,59 +1,142 @@ #!./perl -print "1..6\n"; +BEGIN { + chdir 't' if -d 't'; + @INC = '../lib'; +} -open(try, '>Io.argv.tmp') || (die "Can't open temp file: $!"); -print try "a line\n"; -close try; +BEGIN { require "./test.pl"; } -if ($^O eq 'MSWin32') { - $x = `.\\perl -e "while (<>) {print \$.,\$_;}" Io.argv.tmp Io.argv.tmp`; -} -else { - $x = `./perl -e 'while (<>) {print \$.,\$_;}' Io.argv.tmp Io.argv.tmp`; -} -if ($x eq "1a line\n2a line\n") {print "ok 1\n";} else {print "not ok 1\n";} +plan(tests => 23); -if ($^O eq 'MSWin32') { - $x = `.\\perl -le "print 'foo'" | .\\perl -e "while (<>) {print \$_;}" Io.argv.tmp -`; -} -else { - $x = `echo foo|./perl -e 'while (<>) {print $_;}' Io.argv.tmp -`; -} -if ($x eq "a line\nfoo\n") {print "ok 2\n";} else {print "not ok 2\n";} +use File::Spec; + +my $devnull = File::Spec->devnull; + +open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!"); +print TRY "a line\n"; +close TRY or die "Could not close: $!"; + +$x = runperl( + prog => 'while (<>) { print $., $_; }', + args => [ 'Io_argv1.tmp', 'Io_argv1.tmp' ], +); +is($x, "1a line\n2a line\n", '<> from two files'); -if ($^O eq 'MSWin32') { - $x = `.\\perl -le "print 'foo'" |.\\perl -e "while (<>) {print \$_;}"`; +{ + $x = runperl( + prog => 'while (<>) { print $_; }', + stdin => "foo\n", + args => [ 'Io_argv1.tmp', '-' ], + ); + is($x, "a line\nfoo\n", ' from a file and STDIN'); + + $x = runperl( + prog => 'while (<>) { print $_; }', + stdin => "foo\n", + ); + is($x, "foo\n", ' from just STDIN'); } -else { - $x = `echo foo|./perl -e 'while (<>) {print $_;}'`; + +{ + # 5.10 stopped autovivifying scalars in globs leading to a + # segfault when $ARGV is written to. + runperl( prog => 'eof()', stdin => "nothing\n" ); + is( 0+$?, 0, q(eof() doesn't segfault) ); } -if ($x eq "foo\n") {print "ok 3\n";} else {print "not ok 3 :$x:\n";} -@ARGV = ('Io.argv.tmp', 'Io.argv.tmp', '/dev/null', 'Io.argv.tmp'); +@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp'); while (<>) { $y .= $. . $_; if (eof()) { - if ($. == 3) {print "ok 4\n";} else {print "not ok 4\n";} + is($., 3, '$. counts <>'); } } -if ($y eq "1a line\n2a line\n3a line\n") - {print "ok 5\n";} -else - {print "not ok 5\n";} +is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV'); -open(try, '>Io.argv.tmp') or die "Can't open temp file: $!"; -close try; -@ARGV = 'Io.argv.tmp'; -$^I = '.bak'; + +open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!"; +close TRY or die "Could not close: $!"; +open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!"; +close TRY or die "Could not close: $!"; +@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp'); +$^I = '_bak'; # not .bak which confuses VMS $/ = undef; +my $i = 7; +while (<>) { + s/^/ok $i\n/; + ++$i; + print; + next_test(); +} +open(TRY, '; +open(TRY, '; +close TRY or die "Could not close: $!"; +undef $^I; + +ok( eof TRY ); + +{ + no warnings 'once'; + ok( eof NEVEROPENED, 'eof() true on unopened filehandle' ); +} + +open STDIN, 'Io_argv1.tmp' or die $!; +@ARGV = (); +ok( !eof(), 'STDIN has something' ); + +is( <>, "ok 7\n" ); + +open STDIN, $devnull or die $!; +@ARGV = (); +ok( eof(), 'eof() true with empty @ARGV' ); + +@ARGV = ('Io_argv1.tmp'); +ok( !eof() ); + +@ARGV = ($devnull, $devnull); +ok( !eof() ); + +close ARGV or die $!; +ok( eof(), 'eof() true after closing ARGV' ); + +{ + local $/; + open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!"; + ; # set $. = 1 + is( , undef ); + + open F, $devnull or die; + ok( defined() ); + + is( , undef ); + is( , undef ); + + open F, $devnull or die; # restart cycle again + ok( defined() ); + is( , undef ); + close F or die "Could not close: $!"; +} + +# This used to dump core +fresh_perl_is( <<'**PROG**', "foobar", {}, "ARGV aliasing and eof()" ); +open OUT, ">Io_argv3.tmp" or die "Can't open temp file: $!"; +print OUT "foo"; +close OUT; +open IN, "Io_argv3.tmp" or die "Can't open temp file: $!"; +*ARGV = *IN; while (<>) { - s/^/ok 6\n/; print; + print "bar" if eof(); } -open(try, '; -close try; +close IN; +unlink "Io_argv3.tmp"; +**PROG** -END { unlink 'Io.argv.tmp', 'Io.argv.tmp.bak' } +END { + 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak', + 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp'; +}