112 lines
2.4 KiB
Perl
112 lines
2.4 KiB
Perl
#!./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);
|
|
}
|
|
}
|