Let rip with t/op/*.t in parallel too.
[p5sagit/p5-mst-13.2.git] / t / io / argv.t
CommitLineData
8d063cd8 1#!./perl
2
820475bd 3BEGIN {
4 chdir 't' if -d 't';
20822f61 5 @INC = '../lib';
820475bd 6}
7
768fd157 8BEGIN { require "./test.pl"; }
137352a2 9
1e1d4b91 10plan(tests => 23);
820475bd 11
12use File::Spec;
13
14my $devnull = File::Spec->devnull;
8d063cd8 15
7d932aad 16open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!");
17print TRY "a line\n";
d1e4d418 18close TRY or die "Could not close: $!";
8d063cd8 19
137352a2 20$x = runperl(
21 prog => 'while (<>) { print $., $_; }',
22 args => [ 'Io_argv1.tmp', 'Io_argv1.tmp' ],
23);
7d932aad 24is($x, "1a line\n2a line\n", '<> from two files');
8d063cd8 25
7d932aad 26{
137352a2 27 $x = runperl(
28 prog => 'while (<>) { print $_; }',
29 stdin => "foo\n",
30 args => [ 'Io_argv1.tmp', '-' ],
31 );
7d932aad 32 is($x, "a line\nfoo\n", ' from a file and STDIN');
8d063cd8 33
137352a2 34 $x = runperl(
35 prog => 'while (<>) { print $_; }',
36 stdin => "foo\n",
37 );
7d932aad 38 is($x, "foo\n", ' from just STDIN');
2986a63f 39}
8d063cd8 40
1e1d4b91 41{
42 # 5.10 stopped autovivifying scalars in globs leading to a
43 # segfault when $ARGV is written to.
44 runperl( prog => 'eof()', stdin => "nothing\n" );
45 is( 0+$?, 0, q(eof() doesn't segfault) );
46}
47
684bef36 48@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp');
8d063cd8 49while (<>) {
50 $y .= $. . $_;
378cc40b 51 if (eof()) {
7d932aad 52 is($., 3, '$. counts <>');
8d063cd8 53 }
54}
55
7d932aad 56is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV');
57
8d063cd8 58
7d932aad 59open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!";
d1e4d418 60close TRY or die "Could not close: $!";
7d932aad 61open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!";
d1e4d418 62close TRY or die "Could not close: $!";
684bef36 63@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
7d932aad 64$^I = '_bak'; # not .bak which confuses VMS
fbad3eb5 65$/ = undef;
1e1d4b91 66my $i = 7;
fbad3eb5 67while (<>) {
684bef36 68 s/^/ok $i\n/;
69 ++$i;
fbad3eb5 70 print;
7d932aad 71 next_test();
fbad3eb5 72}
7d932aad 73open(TRY, '<Io_argv1.tmp') or die "Can't open temp file: $!";
74print while <TRY>;
75open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!";
76print while <TRY>;
d1e4d418 77close TRY or die "Could not close: $!";
820475bd 78undef $^I;
79
7d932aad 80ok( eof TRY );
820475bd 81
1031ca5c 82{
83 no warnings 'once';
84 ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
85}
820475bd 86
684bef36 87open STDIN, 'Io_argv1.tmp' or die $!;
820475bd 88@ARGV = ();
7d932aad 89ok( !eof(), 'STDIN has something' );
820475bd 90
1e1d4b91 91is( <>, "ok 7\n" );
820475bd 92
93open STDIN, $devnull or die $!;
94@ARGV = ();
7d932aad 95ok( eof(), 'eof() true with empty @ARGV' );
820475bd 96
684bef36 97@ARGV = ('Io_argv1.tmp');
7d932aad 98ok( !eof() );
820475bd 99
100@ARGV = ($devnull, $devnull);
7d932aad 101ok( !eof() );
820475bd 102
103close ARGV or die $!;
7d932aad 104ok( eof(), 'eof() true after closing ARGV' );
684bef36 105
106{
107 local $/;
d1e4d418 108 open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!";
684bef36 109 <F>; # set $. = 1
7d932aad 110 is( <F>, undef );
111
684bef36 112 open F, $devnull or die;
7d932aad 113 ok( defined(<F>) );
114
115 is( <F>, undef );
116 is( <F>, undef );
117
684bef36 118 open F, $devnull or die; # restart cycle again
7d932aad 119 ok( defined(<F>) );
120 is( <F>, undef );
d1e4d418 121 close F or die "Could not close: $!";
684bef36 122}
fbad3eb5 123
ed2c6b9b 124# This used to dump core
125fresh_perl_is( <<'**PROG**', "foobar", {}, "ARGV aliasing and eof()" );
126open OUT, ">Io_argv3.tmp" or die "Can't open temp file: $!";
127print OUT "foo";
128close OUT;
129open IN, "Io_argv3.tmp" or die "Can't open temp file: $!";
130*ARGV = *IN;
131while (<>) {
132 print;
133 print "bar" if eof();
134}
135close IN;
136unlink "Io_argv3.tmp";
137**PROG**
138
139END {
98a392ec 140 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak',
ed2c6b9b 141 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp';
142}