1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
|
#!./perl
use strict;
chdir 't' if -d 't';
require './test.pl';
$^I = $^O eq 'VMS' ? '_bak' : '.bak';
plan( tests => 8 );
my @tfiles = (tempfile(), tempfile(), tempfile());
my @tfiles_bak = map "$_$^I", @tfiles;
END { unlink_all(@tfiles_bak); }
for my $file (@tfiles) {
runperl( prog => 'print qq(foo\n);',
args => ['>', $file] );
}
@ARGV = @tfiles;
while (<>) {
s/foo/bar/;
}
continue {
print;
}
is ( runperl( prog => 'print<>;', args => \@tfiles ),
"bar\nbar\nbar\n",
"file contents properly replaced" );
is ( runperl( prog => 'print<>;', args => \@tfiles_bak ),
"foo\nfoo\nfoo\n",
"backup file contents stay the same" );
our @ifiles = ( tempfile(), tempfile(), tempfile() );
{
for my $file (@ifiles) {
runperl( prog => 'print qq(bar\n);',
args => [ '>', $file ] );
}
local $^I = '';
local @ARGV = @ifiles;
while (<>) {
print "foo$_";
}
is(scalar(@ARGV), 0, "consumed ARGV");
# runperl may quote its arguments, so don't expect to be able
# to reuse things you send it.
my @my_ifiles = @ifiles;
is( runperl( prog => 'print<>;', args => \@my_ifiles ),
"foobar\nfoobar\nfoobar\n",
"normal inplace edit");
}
# test * equivalence RT #70802
{
for my $file (@ifiles) {
runperl( prog => 'print qq(bar\n);',
args => [ '>', $file ] );
}
local $^I = '*';
local @ARGV = @ifiles;
while (<>) {
print "foo$_";
}
is(scalar(@ARGV), 0, "consumed ARGV");
my @my_ifiles = @ifiles;
is( runperl( prog => 'print<>;', args => \@my_ifiles ),
"foobar\nfoobar\nfoobar\n",
"normal inplace edit");
}
END { unlink_all(@ifiles); }
{
my @tests =
( # opts, code, result, name, $TODO
[ "-n", "die", "bar\n", "die shouldn't touch file" ],
[ "-n", "last", "", "last should update file" ],
);
our $file = tempfile() ;
for my $test (@tests) {
(my ($opts, $code, $result, $name), our $TODO) = @$test;
open my $fh, ">", $file or die;
print $fh "bar\n";
close $fh;
runperl( prog => $code,
switches => [ grep length, "-i", $opts ],
args => [ $file ],
stderr => 1, # discarded
);
open $fh, "<", $file or die;
my $data = do { local $/; <$fh>; };
close $fh;
is($data, $result, $name);
}
}
|