open.t revision 1.1
1#!./perl
2
3BEGIN {
4    chdir 't' if -d 't';
5    unshift @INC, '../lib';
6}    
7
8# $RCSfile$    
9$|  = 1;
10use warnings;
11$Is_VMS = $^O eq 'VMS';
12
13print "1..66\n";
14
15my $test = 1;
16
17sub ok { print "ok $test\n"; $test++ }
18
19# my $file tests
20
21# 1..9
22{
23    unlink("afile") if -f "afile";     
24    print "$!\nnot " unless open(my $f,"+>afile");
25    ok;
26    binmode $f;
27    print "not " unless -f "afile";     
28    ok;
29    print "not " unless print $f "SomeData\n";
30    ok;
31    print "not " unless tell($f) == 9;
32    ok;
33    print "not " unless seek($f,0,0);
34    ok;
35    $b = <$f>;
36    print "not " unless $b eq "SomeData\n";
37    ok;
38    print "not " unless -f $f;     
39    ok;
40    eval  { die "Message" };   
41    # warn $@;
42    print "not " unless $@ =~ /<\$f> line 1/;
43    ok;
44    print "not " unless close($f);
45    ok;
46    unlink("afile");     
47}
48
49# 10..12
50{
51    print "# \$!='$!'\nnot " unless open(my $f,'>', 'afile');
52    ok;
53    print $f "a row\n";
54    print "not " unless close($f);
55    ok;
56    print "not " unless -s 'afile' < 10;
57    ok;
58}
59
60# 13..15
61{
62    print "# \$!='$!'\nnot " unless open(my $f,'>>', 'afile');
63    ok;
64    print $f "a row\n";
65    print "not " unless close($f);
66    ok;
67    print "not " unless -s 'afile' > 10;
68    ok;
69}
70
71# 16..18
72{
73    print "# \$!='$!'\nnot " unless open(my $f, '<', 'afile');
74    ok;
75    @rows = <$f>;
76    print "not " unless @rows == 2;
77    ok;
78    print "not " unless close($f);
79    ok;
80}
81
82# 19..23
83{
84    print "not " unless -s 'afile' < 20;
85    ok;
86    print "# \$!='$!'\nnot " unless open(my $f, '+<', 'afile');
87    ok;
88    @rows = <$f>;
89    print "not " unless @rows == 2;
90    ok;
91    seek $f, 0, 1;
92    print $f "yet another row\n";
93    print "not " unless close($f);
94    ok;
95    print "not " unless -s 'afile' > 20;
96    ok;
97
98    unlink("afile");     
99}
100
101# 24..26
102if ($Is_VMS) {
103    for (24..26) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
104}
105else {
106    print "# \$!='$!'\nnot " unless open(my $f, '-|', <<'EOC');
107    ./perl -e "print qq(a row\n); print qq(another row\n)"
108EOC
109    ok;
110    @rows = <$f>;
111    print "not " unless @rows == 2;
112    ok;
113    print "not " unless close($f);
114    ok;
115}
116
117# 27..30
118if ($Is_VMS) {
119    for (27..30) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
120}
121else {
122    print "# \$!='$!'\nnot " unless open(my $f, '|-', <<'EOC');
123    ./perl -pe "s/^not //"
124EOC
125    ok;
126    @rows = <$f>;
127    print $f "not ok $test\n"; $test++;
128    print $f "not ok $test\n"; $test++;
129    print "#\nnot " unless close($f);
130    sleep 1;
131    ok;
132}
133
134# 31..32
135eval <<'EOE' and print "not ";
136open my $f, '<&', 'afile';
1371;
138EOE
139ok;
140$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
141ok;
142
143# local $file tests
144
145# 33..41
146{
147    unlink("afile") if -f "afile";     
148    print "$!\nnot " unless open(local $f,"+>afile");
149    ok;
150    binmode $f;
151    print "not " unless -f "afile";     
152    ok;
153    print "not " unless print $f "SomeData\n";
154    ok;
155    print "not " unless tell($f) == 9;
156    ok;
157    print "not " unless seek($f,0,0);
158    ok;
159    $b = <$f>;
160    print "not " unless $b eq "SomeData\n";
161    ok;
162    print "not " unless -f $f;     
163    ok;
164    eval  { die "Message" };   
165    # warn $@;
166    print "not " unless $@ =~ /<\$f> line 1/;
167    ok;
168    print "not " unless close($f);
169    ok;
170    unlink("afile");     
171}
172
173# 42..44
174{
175    print "# \$!='$!'\nnot " unless open(local $f,'>', 'afile');
176    ok;
177    print $f "a row\n";
178    print "not " unless close($f);
179    ok;
180    print "not " unless -s 'afile' < 10;
181    ok;
182}
183
184# 45..47
185{
186    print "# \$!='$!'\nnot " unless open(local $f,'>>', 'afile');
187    ok;
188    print $f "a row\n";
189    print "not " unless close($f);
190    ok;
191    print "not " unless -s 'afile' > 10;
192    ok;
193}
194
195# 48..50
196{
197    print "# \$!='$!'\nnot " unless open(local $f, '<', 'afile');
198    ok;
199    @rows = <$f>;
200    print "not " unless @rows == 2;
201    ok;
202    print "not " unless close($f);
203    ok;
204}
205
206# 51..55
207{
208    print "not " unless -s 'afile' < 20;
209    ok;
210    print "# \$!='$!'\nnot " unless open(local $f, '+<', 'afile');
211    ok;
212    @rows = <$f>;
213    print "not " unless @rows == 2;
214    ok;
215    seek $f, 0, 1;
216    print $f "yet another row\n";
217    print "not " unless close($f);
218    ok;
219    print "not " unless -s 'afile' > 20;
220    ok;
221
222    unlink("afile");     
223}
224
225# 56..58
226if ($Is_VMS) {
227    for (56..58) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
228}
229else {
230    print "# \$!='$!'\nnot " unless open(local $f, '-|', <<'EOC');
231    ./perl -e "print qq(a row\n); print qq(another row\n)"
232EOC
233    ok;
234    @rows = <$f>;
235    print "not " unless @rows == 2;
236    ok;
237    print "not " unless close($f);
238    ok;
239}
240
241# 59..62
242if ($Is_VMS) {
243    for (59..62) { print "ok $_ # skipped: not Unix fork\n"; $test++;}
244}
245else {
246    print "# \$!='$!'\nnot " unless open(local $f, '|-', <<'EOC');
247    ./perl -pe "s/^not //"
248EOC
249    ok;
250    @rows = <$f>;
251    print $f "not ok $test\n"; $test++;
252    print $f "not ok $test\n"; $test++;
253    print "#\nnot " unless close($f);
254    sleep 1;
255    ok;
256}
257
258# 63..64
259eval <<'EOE' and print "not ";
260open local $f, '<&', 'afile';
2611;
262EOE
263ok;
264$@ =~ /Unknown open\(\) mode \'<&\'/ or print "not ";
265ok;
266
267# 65..66
268{
269    local *F;
270    for (1..2) {
271        open(F, "echo #foo|") or print "not ";
272	print <F>;
273	close F;
274    }
275    ok;
276    for (1..2) {
277	open(F, "-|", "echo #foo") or print "not ";
278	print <F>;
279	close F;
280    }
281    ok;
282}
283