This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Use a real compile to test for stdbool.h
[perl5.git] / t / io / inplace.t
... / ...
CommitLineData
1#!./perl
2use strict;
3require './test.pl';
4
5$^I = $^O eq 'VMS' ? '_bak' : '.bak';
6
7plan( tests => 6 );
8
9my @tfiles = (tempfile(), tempfile(), tempfile());
10my @tfiles_bak = map "$_$^I", @tfiles;
11
12END { unlink_all(@tfiles_bak); }
13
14for my $file (@tfiles) {
15 runperl( prog => 'print qq(foo\n);',
16 args => ['>', $file] );
17}
18
19@ARGV = @tfiles;
20
21while (<>) {
22 s/foo/bar/;
23}
24continue {
25 print;
26}
27
28is ( runperl( prog => 'print<>;', args => \@tfiles ),
29 "bar\nbar\nbar\n",
30 "file contents properly replaced" );
31
32is ( runperl( prog => 'print<>;', args => \@tfiles_bak ),
33 "foo\nfoo\nfoo\n",
34 "backup file contents stay the same" );
35
36SKIP:
37{
38 # based on code, dosish and epoc systems can't do no-backup inplace
39 # edits
40 $^O =~ /^(MSWin32|cygwin|uwin|dos|epoc|os2)$/
41 and skip("Can't inplace edit without backups on $^O", 4);
42
43 our @ifiles = ( tempfile(), tempfile(), tempfile() );
44
45 {
46 for my $file (@ifiles) {
47 runperl( prog => 'print qq(bar\n);',
48 args => [ '>', $file ] );
49 }
50
51 local $^I = '';
52 local @ARGV = @ifiles;
53
54 while (<>) {
55 print "foo$_";
56 }
57
58 is(scalar(@ARGV), 0, "consumed ARGV");
59
60# runperl may quote its arguments, so don't expect to be able
61# to reuse things you send it.
62
63 my @my_ifiles = @ifiles;
64 is( runperl( prog => 'print<>;', args => \@my_ifiles ),
65 "foobar\nfoobar\nfoobar\n",
66 "normal inplace edit");
67 }
68
69 # test * equivalence RT #70802
70 {
71 for my $file (@ifiles) {
72 runperl( prog => 'print qq(bar\n);',
73 args => [ '>', $file ] );
74 }
75
76 local $^I = '*';
77 local @ARGV = @ifiles;
78
79 while (<>) {
80 print "foo$_";
81 }
82
83 is(scalar(@ARGV), 0, "consumed ARGV");
84
85 my @my_ifiles = @ifiles;
86 is( runperl( prog => 'print<>;', args => \@my_ifiles ),
87 "foobar\nfoobar\nfoobar\n",
88 "normal inplace edit");
89 }
90
91 END { unlink_all(@ifiles); }
92}