source: trunk/essentials/dev-lang/perl/t/io/argv.t

Last change on this file was 3181, checked in by bird, 18 years ago

perl 5.8.8

File size: 2.8 KB
Line 
1#!./perl
2
3BEGIN {
4 chdir 't' if -d 't';
5 @INC = '../lib';
6}
7
8require "./test.pl";
9
10plan(tests => 22);
11
12use File::Spec;
13
14my $devnull = File::Spec->devnull;
15
16open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!");
17print TRY "a line\n";
18close TRY or die "Could not close: $!";
19
20$x = runperl(
21 prog => 'while (<>) { print $., $_; }',
22 args => [ 'Io_argv1.tmp', 'Io_argv1.tmp' ],
23);
24is($x, "1a line\n2a line\n", '<> from two files');
25
26{
27 $x = runperl(
28 prog => 'while (<>) { print $_; }',
29 stdin => "foo\n",
30 args => [ 'Io_argv1.tmp', '-' ],
31 );
32 is($x, "a line\nfoo\n", ' from a file and STDIN');
33
34 $x = runperl(
35 prog => 'while (<>) { print $_; }',
36 stdin => "foo\n",
37 );
38 is($x, "foo\n", ' from just STDIN');
39}
40
41@ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp');
42while (<>) {
43 $y .= $. . $_;
44 if (eof()) {
45 is($., 3, '$. counts <>');
46 }
47}
48
49is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV');
50
51
52open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!";
53close TRY or die "Could not close: $!";
54open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!";
55close TRY or die "Could not close: $!";
56@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
57$^I = '_bak'; # not .bak which confuses VMS
58$/ = undef;
59my $i = 6;
60while (<>) {
61 s/^/ok $i\n/;
62 ++$i;
63 print;
64 next_test();
65}
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>;
70close TRY or die "Could not close: $!";
71undef $^I;
72
73ok( eof TRY );
74
75{
76 no warnings 'once';
77 ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
78}
79
80open STDIN, 'Io_argv1.tmp' or die $!;
81@ARGV = ();
82ok( !eof(), 'STDIN has something' );
83
84is( <>, "ok 6\n" );
85
86open STDIN, $devnull or die $!;
87@ARGV = ();
88ok( eof(), 'eof() true with empty @ARGV' );
89
90@ARGV = ('Io_argv1.tmp');
91ok( !eof() );
92
93@ARGV = ($devnull, $devnull);
94ok( !eof() );
95
96close ARGV or die $!;
97ok( eof(), 'eof() true after closing ARGV' );
98
99{
100 local $/;
101 open F, 'Io_argv1.tmp' or die "Could not open Io_argv1.tmp: $!";
102 <F>; # set $. = 1
103 is( <F>, undef );
104
105 open F, $devnull or die;
106 ok( defined(<F>) );
107
108 is( <F>, undef );
109 is( <F>, undef );
110
111 open F, $devnull or die; # restart cycle again
112 ok( defined(<F>) );
113 is( <F>, undef );
114 close F or die "Could not close: $!";
115}
116
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 {
133 1 while unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak',
134 'Io_argv2.tmp', 'Io_argv2.tmp_bak', 'Io_argv3.tmp';
135}
Note: See TracBrowser for help on using the repository browser.