X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fio%2Fargv.t;h=d6c895d6cc9fa806ebfc61a1d9934b9cab7c5734;hb=7de9d14ea5825e7555ec8154a1b3731aa00948b6;hp=3695e8abdac90716c3fbef117781641d8a59970a;hpb=820475bd7227fcbc2178bb45a4d501c4ccc2133b;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 3695e8a..d6c895d --- a/t/io/argv.t +++ b/t/io/argv.t @@ -2,99 +2,141 @@ BEGIN { chdir 't' if -d 't'; - unshift @INC, '../lib'; + @INC = '../lib'; } -print "1..14\n"; +BEGIN { require "./test.pl"; } + +plan(tests => 23); use File::Spec; my $devnull = File::Spec->devnull; -open(try, '>Io.argv.tmp') || (die "Can't open temp file: $!"); -print try "a line\n"; -close try; - -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";} - -if ($^O eq 'MSWin32') { - $x = `.\\perl -le "print 'foo'" | .\\perl -e "while (<>) {print \$_;}" Io.argv.tmp -`; +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'); + +{ + $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 $_;}' Io.argv.tmp -`; -} -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.argv.tmp', 'Io.argv.tmp', $devnull, '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 6\n/; + s/^/ok $i\n/; + ++$i; print; + next_test(); } -open(try, '; -close try; +open(TRY, '; +open(TRY, '; +close TRY or die "Could not close: $!"; undef $^I; -eof try or print 'not '; -print "ok 7\n"; +ok( eof TRY ); -eof NEVEROPENED or print 'not '; -print "ok 8\n"; +{ + no warnings 'once'; + ok( eof NEVEROPENED, 'eof() true on unopened filehandle' ); +} -open STDIN, 'Io.argv.tmp' or die $!; +open STDIN, 'Io_argv1.tmp' or die $!; @ARGV = (); -!eof() or print 'not '; -print "ok 9\n"; +ok( !eof(), 'STDIN has something' ); -<> eq "ok 6\n" or print 'not '; -print "ok 10\n"; +is( <>, "ok 7\n" ); open STDIN, $devnull or die $!; @ARGV = (); -eof() or print 'not '; -print "ok 11\n"; +ok( eof(), 'eof() true with empty @ARGV' ); -@ARGV = ('Io.argv.tmp'); -!eof() or print 'not '; -print "ok 12\n"; +@ARGV = ('Io_argv1.tmp'); +ok( !eof() ); @ARGV = ($devnull, $devnull); -!eof() or print 'not '; -print "ok 13\n"; +ok( !eof() ); close ARGV or die $!; -eof() or print 'not '; -print "ok 14\n"; +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 ); -END { unlink 'Io.argv.tmp', 'Io.argv.tmp.bak' } + 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 (<>) { + 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'; +}