s/Nick Clark/Nicholas Clark/
[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
7d932aad 8require "./test.pl";
137352a2 9
ed2c6b9b 10plan(tests => 22);
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
684bef36 41@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp');
8d063cd8 42while (<>) {
43 $y .= $. . $_;
378cc40b 44 if (eof()) {
7d932aad 45 is($., 3, '$. counts <>');
8d063cd8 46 }
47}
48
7d932aad 49is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV');
50
8d063cd8 51
7d932aad 52open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!";
d1e4d418 53close TRY or die "Could not close: $!";
7d932aad 54open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!";
d1e4d418 55close TRY or die "Could not close: $!";
684bef36 56@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
7d932aad 57$^I = '_bak'; # not .bak which confuses VMS
fbad3eb5 58$/ = undef;
684bef36 59my $i = 6;
fbad3eb5 60while (<>) {
684bef36 61 s/^/ok $i\n/;
62 ++$i;
fbad3eb5 63 print;
7d932aad 64 next_test();
fbad3eb5 65}
7d932aad 66open(TRY, '<Io_argv1.tmp') or die "Can't open temp file: $!";
67print while <TRY>;
68open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!";
69print while <TRY>;
d1e4d418 70close TRY or die "Could not close: $!";
820475bd 71undef $^I;
72
7d932aad 73ok( eof TRY );
820475bd 74
1031ca5c 75{
76 no warnings 'once';
77 ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
78}
820475bd 79
684bef36 80open STDIN, 'Io_argv1.tmp' or die $!;
820475bd 81@ARGV = ();
7d932aad 82ok( !eof(), 'STDIN has something' );
820475bd 83
7d932aad 84is( <>, "ok 6\n" );
820475bd 85
86open STDIN, $devnull or die $!;
87@ARGV = ();
7d932aad 88ok( eof(), 'eof() true with empty @ARGV' );
820475bd 89
684bef36 90@ARGV = ('Io_argv1.tmp');
7d932aad 91ok( !eof() );
820475bd 92
93@ARGV = ($devnull, $devnull);
7d932aad 94ok( !eof() );
820475bd 95
96close ARGV or die $!;
7d932aad 97ok( eof(), 'eof() true after closing ARGV' );
684bef36 98
99{
100 local $/;
d1e4d418 101 open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!";
684bef36 102 <F>; # set $. = 1
7d932aad 103 is( <F>, undef );
104
684bef36 105 open F, $devnull or die;
7d932aad 106 ok( defined(<F>) );
107
108 is( <F>, undef );
109 is( <F>, undef );
110
684bef36 111 open F, $devnull or die; # restart cycle again
7d932aad 112 ok( defined(<F>) );
113 is( <F>, undef );
d1e4d418 114 close F or die "Could not close: $!";
684bef36 115}
fbad3eb5 116
ed2c6b9b 117# This used to dump core
118fresh_perl_is( <<'**PROG**', "foobar", {}, "ARGV aliasing and eof()" );
119open OUT, ">Io_argv3.tmp" or die "Can't open temp file: $!";
120print OUT "foo";
121close OUT;
122open IN, "Io_argv3.tmp" or die "Can't open temp file: $!";
123*ARGV = *IN;
124while (<>) {
125 print;
126 print "bar" if eof();
127}
128close IN;
129unlink "Io_argv3.tmp";
130**PROG**
131
132END {
98a392ec 133 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak',
ed2c6b9b 134 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp';
135}