Commit | Line | Data |
8d063cd8 |
1 | #!./perl |
2 | |
820475bd |
3 | BEGIN { |
4 | chdir 't' if -d 't'; |
20822f61 |
5 | @INC = '../lib'; |
820475bd |
6 | } |
7 | |
7d932aad |
8 | sub runthis { |
9 | my($prog, $stdin, @files) = @_; |
10 | |
11 | my $cmd = ''; |
12 | if ($^O eq 'MSWin32' || $^O eq 'NetWare' || $^O eq 'VMS' ) { |
13 | $cmd = qq{$^X -e "$prog"}; |
14 | $cmd .= " ". join ' ', map qq{"$_"}, @files if @files; |
15 | $cmd = qq{$^X -le "print '$stdin'" | } . $cmd if defined $stdin; |
16 | } |
17 | else { |
18 | $cmd = qq{$^X -e '$prog' @files}; |
19 | $cmd = qq{$^X -le 'print q{$stdin}' | } . $cmd if defined $stdin; |
20 | } |
21 | |
22 | # The combination of $^X, pipes and STDIN is broken on VMS and |
23 | # will hang. |
24 | if( defined $stdin && $^O eq 'VMS' && $TODO ) { |
25 | return 0; |
26 | } |
27 | |
28 | my $result = `$cmd`; |
29 | $result =~ s/\n\n/\n/ if $^O eq 'VMS'; # pipes sometimes double these |
30 | |
31 | return $result; |
32 | } |
33 | |
34 | |
35 | require "./test.pl"; |
36 | plan(tests => 21); |
820475bd |
37 | |
38 | use File::Spec; |
39 | |
40 | my $devnull = File::Spec->devnull; |
8d063cd8 |
41 | |
7d932aad |
42 | open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!"); |
43 | print TRY "a line\n"; |
44 | close TRY; |
8d063cd8 |
45 | |
7d932aad |
46 | $x = runthis( 'while (<>) { print $., $_; }', undef, ('Io_argv1.tmp') x 2); |
47 | is($x, "1a line\n2a line\n", '<> from two files'); |
8d063cd8 |
48 | |
7d932aad |
49 | { |
50 | local $TODO = 'The combo of STDIN, pipes and $^X is broken on VMS' |
51 | if $^O eq 'VMS'; |
52 | $x = runthis( 'while (<>) { print $_; }', 'foo', 'Io_argv1.tmp', '-' ); |
53 | is($x, "a line\nfoo\n", ' from a file and STDIN'); |
8d063cd8 |
54 | |
7d932aad |
55 | $x = runthis( 'while (<>) {print $_;}', 'foo' ); |
56 | is($x, "foo\n", ' from just STDIN'); |
2986a63f |
57 | } |
8d063cd8 |
58 | |
684bef36 |
59 | @ARGV = ('Io_argv1.tmp', 'Io_argv1.tmp', $devnull, 'Io_argv1.tmp'); |
8d063cd8 |
60 | while (<>) { |
61 | $y .= $. . $_; |
378cc40b |
62 | if (eof()) { |
7d932aad |
63 | is($., 3, '$. counts <>'); |
8d063cd8 |
64 | } |
65 | } |
66 | |
7d932aad |
67 | is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV'); |
68 | |
8d063cd8 |
69 | |
7d932aad |
70 | open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!"; |
71 | close TRY; |
72 | open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!"; |
73 | close TRY; |
684bef36 |
74 | @ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp'); |
7d932aad |
75 | $^I = '_bak'; # not .bak which confuses VMS |
fbad3eb5 |
76 | $/ = undef; |
684bef36 |
77 | my $i = 6; |
fbad3eb5 |
78 | while (<>) { |
684bef36 |
79 | s/^/ok $i\n/; |
80 | ++$i; |
fbad3eb5 |
81 | print; |
7d932aad |
82 | next_test(); |
fbad3eb5 |
83 | } |
7d932aad |
84 | open(TRY, '<Io_argv1.tmp') or die "Can't open temp file: $!"; |
85 | print while <TRY>; |
86 | open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!"; |
87 | print while <TRY>; |
88 | close TRY; |
820475bd |
89 | undef $^I; |
90 | |
7d932aad |
91 | ok( eof TRY ); |
820475bd |
92 | |
7d932aad |
93 | ok( eof NEVEROPENED, 'eof() true on unopened filehandle' ); |
820475bd |
94 | |
684bef36 |
95 | open STDIN, 'Io_argv1.tmp' or die $!; |
820475bd |
96 | @ARGV = (); |
7d932aad |
97 | ok( !eof(), 'STDIN has something' ); |
820475bd |
98 | |
7d932aad |
99 | is( <>, "ok 6\n" ); |
820475bd |
100 | |
101 | open STDIN, $devnull or die $!; |
102 | @ARGV = (); |
7d932aad |
103 | ok( eof(), 'eof() true with empty @ARGV' ); |
820475bd |
104 | |
684bef36 |
105 | @ARGV = ('Io_argv1.tmp'); |
7d932aad |
106 | ok( !eof() ); |
820475bd |
107 | |
108 | @ARGV = ($devnull, $devnull); |
7d932aad |
109 | ok( !eof() ); |
820475bd |
110 | |
111 | close ARGV or die $!; |
7d932aad |
112 | ok( eof(), 'eof() true after closing ARGV' ); |
684bef36 |
113 | |
114 | { |
115 | local $/; |
116 | open F, 'Io_argv1.tmp' or die; |
117 | <F>; # set $. = 1 |
7d932aad |
118 | is( <F>, undef ); |
119 | |
684bef36 |
120 | open F, $devnull or die; |
7d932aad |
121 | ok( defined(<F>) ); |
122 | |
123 | is( <F>, undef ); |
124 | is( <F>, undef ); |
125 | |
684bef36 |
126 | open F, $devnull or die; # restart cycle again |
7d932aad |
127 | ok( defined(<F>) ); |
128 | is( <F>, undef ); |
684bef36 |
129 | close F; |
130 | } |
fbad3eb5 |
131 | |
e9b6bb1c |
132 | END { unlink 'Io_argv1.tmp', 'Io_argv1.tmp_bak', 'Io_argv2.tmp', 'Io_argv2.tmp_bak' } |