[Patch Perl@12892] a *real* Embed test for VMS
[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 8sub 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
35require "./test.pl";
36plan(tests => 21);
820475bd 37
38use File::Spec;
39
40my $devnull = File::Spec->devnull;
8d063cd8 41
7d932aad 42open(TRY, '>Io_argv1.tmp') || (die "Can't open temp file: $!");
43print TRY "a line\n";
44close TRY;
8d063cd8 45
7d932aad 46$x = runthis( 'while (<>) { print $., $_; }', undef, ('Io_argv1.tmp') x 2);
47is($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 60while (<>) {
61 $y .= $. . $_;
378cc40b 62 if (eof()) {
7d932aad 63 is($., 3, '$. counts <>');
8d063cd8 64 }
65}
66
7d932aad 67is($y, "1a line\n2a line\n3a line\n", '<> from @ARGV');
68
8d063cd8 69
7d932aad 70open(TRY, '>Io_argv1.tmp') or die "Can't open temp file: $!";
71close TRY;
72open(TRY, '>Io_argv2.tmp') or die "Can't open temp file: $!";
73close TRY;
684bef36 74@ARGV = ('Io_argv1.tmp', 'Io_argv2.tmp');
7d932aad 75$^I = '_bak'; # not .bak which confuses VMS
fbad3eb5 76$/ = undef;
684bef36 77my $i = 6;
fbad3eb5 78while (<>) {
684bef36 79 s/^/ok $i\n/;
80 ++$i;
fbad3eb5 81 print;
7d932aad 82 next_test();
fbad3eb5 83}
7d932aad 84open(TRY, '<Io_argv1.tmp') or die "Can't open temp file: $!";
85print while <TRY>;
86open(TRY, '<Io_argv2.tmp') or die "Can't open temp file: $!";
87print while <TRY>;
88close TRY;
820475bd 89undef $^I;
90
7d932aad 91ok( eof TRY );
820475bd 92
7d932aad 93ok( eof NEVEROPENED, 'eof() true on unopened filehandle' );
820475bd 94
684bef36 95open STDIN, 'Io_argv1.tmp' or die $!;
820475bd 96@ARGV = ();
7d932aad 97ok( !eof(), 'STDIN has something' );
820475bd 98
7d932aad 99is( <>, "ok 6\n" );
820475bd 100
101open STDIN, $devnull or die $!;
102@ARGV = ();
7d932aad 103ok( eof(), 'eof() true with empty @ARGV' );
820475bd 104
684bef36 105@ARGV = ('Io_argv1.tmp');
7d932aad 106ok( !eof() );
820475bd 107
108@ARGV = ($devnull, $devnull);
7d932aad 109ok( !eof() );
820475bd 110
111close ARGV or die $!;
7d932aad 112ok( 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
684bef36 132END { unlink 'Io_argv1.tmp', 'Io_argv1.tmp.bak', 'Io_argv2.tmp', 'Io_argv2.tmp.bak' }