X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fio%2Fargv.t;h=d6c895d6cc9fa806ebfc61a1d9934b9cab7c5734;hb=7de9d14ea5825e7555ec8154a1b3731aa00948b6;hp=d6093f90ef542c03f2495e41087d00a9233e1e3a;hpb=146174a91a192983720a158796dc066226ad0e55;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 d6093f9..d6c895d --- a/t/io/argv.t +++ b/t/io/argv.t @@ -2,124 +2,141 @@ BEGIN { chdir 't' if -d 't'; - unshift @INC, '../lib'; + @INC = '../lib'; } -print "1..20\n"; +BEGIN { require "./test.pl"; } + +plan(tests => 23); 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; +open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!"); +print TRY "a line\n"; +close TRY or die "Could not close: $!"; -if ($^O eq 'MSWin32') { - $x = `.\\perl -e "while (<>) {print \$.,\$_;}" Io_argv1.tmp Io_argv1.tmp`; -} -else { - $x = `./perl -e 'while (<>) {print \$.,\$_;}' Io_argv1.tmp Io_argv1.tmp`; -} -if ($x eq "1a line\n2a line\n") {print "ok 1\n";} else {print "not ok 1\n";} +$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 \$_;}" Io_argv1.tmp -`; -} -else { - $x = `echo foo|./perl -e 'while (<>) {print $_;}' Io_argv1.tmp -`; +{ + $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'); } -if ($x eq "a line\nfoo\n") {print "ok 2\n";} else {print "not ok 2\n";} -if ($^O eq 'MSWin32') { - $x = `.\\perl -le "print 'foo'" |.\\perl -e "while (<>) {print \$_;}"`; -} -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_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_argv1.tmp') or die "Can't open temp file: $!"; -close try; -open(try, '>Io_argv2.tmp') or die "Can't open temp file: $!"; -close try; + +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'; +$^I = '_bak'; # not .bak which confuses VMS $/ = undef; -my $i = 6; +my $i = 7; while (<>) { s/^/ok $i\n/; ++$i; print; + next_test(); } -open(try, '; -open(try, '; -close try; +open(TRY, '; +open(TRY, '; +close TRY or die "Could not close: $!"; undef $^I; -eof try or print 'not '; -print "ok 8\n"; +ok( eof TRY ); -eof NEVEROPENED or print 'not '; -print "ok 9\n"; +{ + no warnings 'once'; + ok( eof NEVEROPENED, 'eof() true on unopened filehandle' ); +} open STDIN, 'Io_argv1.tmp' or die $!; @ARGV = (); -!eof() or print 'not '; -print "ok 10\n"; +ok( !eof(), 'STDIN has something' ); -<> eq "ok 6\n" or print 'not '; -print "ok 11\n"; +is( <>, "ok 7\n" ); open STDIN, $devnull or die $!; @ARGV = (); -eof() or print 'not '; -print "ok 12\n"; +ok( eof(), 'eof() true with empty @ARGV' ); @ARGV = ('Io_argv1.tmp'); -!eof() or print 'not '; -print "ok 13\n"; +ok( !eof() ); @ARGV = ($devnull, $devnull); -!eof() or print 'not '; -print "ok 14\n"; +ok( !eof() ); close ARGV or die $!; -eof() or print 'not '; -print "ok 15\n"; +ok( eof(), 'eof() true after closing ARGV' ); { local $/; - open F, 'Io_argv1.tmp' or die; + open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!"; ; # set $. = 1 + is( , undef ); + open F, $devnull or die; - print "not " unless defined(); - print "ok 16\n"; - print "not " if defined(); - print "ok 17\n"; - print "not " if defined(); - print "ok 18\n"; + ok( defined() ); + + is( , undef ); + is( , undef ); + open F, $devnull or die; # restart cycle again - print "not " unless defined(); - print "ok 19\n"; - print "not " if defined(); - print "ok 20\n"; - close F; + ok( defined() ); + is( , undef ); + close F or die "Could not close: $!"; } -END { unlink 'Io_argv1.tmp', 'Io_argv1.tmp.bak', 'Io_argv2.tmp', 'Io_argv2.tmp.bak' } +# 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 (<>) { + print; + print "bar" if eof(); +} +close IN; +unlink "Io_argv3.tmp"; +**PROG** + +END { + 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak', + 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp'; +}