This is a live mirror of the Perl 5 development currently hosted at https://github.com/perl/perl5
Get t/uni/cache.t working under minitest
[perl5.git] / t / op / runlevel.t
CommitLineData
1e422769 1#!./perl
2
3##
e336de0d 4## Many of these tests are originally from Michael Schroeder
1e422769 5## <Michael.Schroeder@informatik.uni-erlangen.de>
6e238990 6## Adapted and expanded by Gurusamy Sarathy <gsar@activestate.com>
1e422769 7##
8
9chdir 't' if -d 't';
20822f61 10@INC = '../lib';
1c25d394 11require './test.pl';
1e422769 12
13$|=1;
14
5f7e0818 15run_multiple_progs('', \*DATA);
1e422769 16
5f7e0818 17done_testing();
1e422769 18
1e422769 19__END__
20@a = (1, 2, 3);
21{
22 @a = sort { last ; } @a;
23}
24EXPECT
a651a37d 25Can't "last" outside a loop block at - line 3.
1e422769 26########
27package TEST;
28
29sub TIESCALAR {
30 my $foo;
31 return bless \$foo;
32}
33sub FETCH {
34 eval 'die("test")';
35 print "still in fetch\n";
36 return ">$@<";
37}
38package main;
39
40tie $bar, TEST;
41print "- $bar\n";
42EXPECT
43still in fetch
44- >test at (eval 1) line 1.
45<
46########
47package TEST;
48
49sub TIESCALAR {
50 my $foo;
51 eval('die("foo\n")');
52 print "after eval\n";
53 return bless \$foo;
54}
55sub FETCH {
56 return "ZZZ";
57}
58
59package main;
60
61tie $bar, TEST;
62print "- $bar\n";
63print "OK\n";
64EXPECT
65after eval
66- ZZZ
67OK
68########
69package TEST;
70
71sub TIEHANDLE {
72 my $foo;
73 return bless \$foo;
74}
75sub PRINT {
76print STDERR "PRINT CALLED\n";
77(split(/./, 'x'x10000))[0];
78eval('die("test\n")');
79}
80
81package main;
82
83open FH, ">&STDOUT";
84tie *FH, TEST;
85print FH "OK\n";
5aabfad6 86print STDERR "DONE\n";
1e422769 87EXPECT
88PRINT CALLED
89DONE
90########
91sub warnhook {
92 print "WARNHOOK\n";
93 eval('die("foooo\n")');
94}
95$SIG{'__WARN__'} = 'warnhook';
96warn("dfsds\n");
97print "END\n";
98EXPECT
99WARNHOOK
100END
101########
102package TEST;
103
104use overload
105 "\"\"" => \&str
106;
107
108sub str {
109 eval('die("test\n")');
110 return "STR";
111}
112
113package main;
114
115$bar = bless {}, TEST;
116print "$bar\n";
117print "OK\n";
118EXPECT
119STR
120OK
121########
122sub foo {
123 $a <=> $b unless eval('$a == 0 ? bless undef : ($a <=> $b)');
124}
125@a = (3, 2, 0, 1);
126@a = sort foo @a;
127print join(', ', @a)."\n";
128EXPECT
1290, 1, 2, 3
130########
131sub foo {
ca0b63a5 132 goto bar if $a == 0 || $b == 0;
1e422769 133 $a <=> $b;
134}
135@a = (3, 2, 0, 1);
136@a = sort foo @a;
137print join(', ', @a)."\n";
138exit;
139bar:
140print "bar reached\n";
141EXPECT
a651a37d 142Can't "goto" out of a pseudo block at - line 2.
e336de0d 143########
be7ddd5d 144%seen = ();
e336de0d
GS
145sub sortfn {
146 (split(/./, 'x'x10000))[0];
147 my (@y) = ( 4, 6, 5);
148 @y = sort { $a <=> $b } @y;
be7ddd5d
JH
149 my $t = "sortfn ".join(', ', @y)."\n";
150 print $t if ($seen{$t}++ == 0);
e336de0d
GS
151 return $_[0] <=> $_[1];
152}
153@x = ( 3, 2, 1 );
154@x = sort { &sortfn($a, $b) } @x;
155print "---- ".join(', ', @x)."\n";
156EXPECT
157sortfn 4, 5, 6
158---- 1, 2, 3
159########
160@a = (3, 2, 1);
161@a = sort { eval('die("no way")') , $a <=> $b} @a;
162print join(", ", @a)."\n";
163EXPECT
1641, 2, 3
165########
166@a = (1, 2, 3);
167foo:
168{
169 @a = sort { last foo; } @a;
170}
171EXPECT
172Label not found for "last foo" at - line 2.
173########
174package TEST;
175
176sub TIESCALAR {
177 my $foo;
178 return bless \$foo;
179}
180sub FETCH {
181 next;
182 return "ZZZ";
183}
184sub STORE {
185}
186
187package main;
188
189tie $bar, TEST;
190{
191 print "- $bar\n";
192}
193print "OK\n";
194EXPECT
a651a37d 195Can't "next" outside a loop block at - line 8.
e336de0d
GS
196########
197package TEST;
198
199sub TIESCALAR {
200 my $foo;
201 return bless \$foo;
202}
203sub FETCH {
204 goto bbb;
205 return "ZZZ";
206}
207
208package main;
209
210tie $bar, TEST;
211print "- $bar\n";
212exit;
213bbb:
214print "bbb\n";
215EXPECT
216Can't find label bbb at - line 8.
217########
218sub foo {
219 $a <=> $b unless eval('$a == 0 ? die("foo\n") : ($a <=> $b)');
220}
221@a = (3, 2, 0, 1);
222@a = sort foo @a;
223print join(', ', @a)."\n";
224EXPECT
2250, 1, 2, 3
226########
227package TEST;
228sub TIESCALAR {
229 my $foo;
230 return bless \$foo;
231}
232sub FETCH {
233 return "fetch";
234}
235sub STORE {
236(split(/./, 'x'x10000))[0];
237}
238package main;
239tie $bar, TEST;
240$bar = "x";
241########
242package TEST;
243sub TIESCALAR {
244 my $foo;
245 next;
246 return bless \$foo;
247}
248package main;
249{
250tie $bar, TEST;
251}
252EXPECT
a651a37d 253Can't "next" outside a loop block at - line 4.
e336de0d
GS
254########
255@a = (1, 2, 3);
256foo:
257{
258 @a = sort { exit(0) } @a;
259}
260END { print "foobar\n" }
261EXPECT
262foobar
2c375eb9
GS
263########
264$SIG{__DIE__} = sub {
265 print "In DIE\n";
266 $i = 0;
267 while (($p,$f,$l,$s) = caller(++$i)) {
268 print "$p|$f|$l|$s\n";
269 }
270};
271eval { die };
272&{sub { eval 'die' }}();
273sub foo { eval { die } } foo();
c99da370 274{package rmb; sub{ eval{die} } ->() }; # check __ANON__ knows package
2c375eb9
GS
275EXPECT
276In DIE
277main|-|8|(eval)
278In DIE
279main|-|9|(eval)
280main|-|9|main::__ANON__
281In DIE
282main|-|10|(eval)
283main|-|10|main::foo
16920d4e
RB
284In DIE
285rmb|-|11|(eval)
c99da370 286rmb|-|11|rmb::__ANON__
be4f712a
GS
287########
288package TEST;
289
290sub TIEARRAY {
291 return bless [qw(foo fee fie foe)], $_[0];
292}
293sub FETCH {
294 my ($s,$i) = @_;
295 if ($i) {
296 goto bbb;
297 }
298bbb:
299 return $s->[$i];
300}
301
302package main;
303tie my @bar, 'TEST';
304print join('|', @bar[0..3]), "\n";
305EXPECT
306foo|fee|fie|foe
0cdb2077
GS
307########
308package TH;
309sub TIEHASH { bless {}, TH }
310sub STORE { eval { print "@_[1,2]\n" }; die "bar\n" }
311tie %h, TH;
312eval { $h{A} = 1; print "never\n"; };
313print $@;
314eval { $h{B} = 2; };
315print $@;
316EXPECT
317A 1
318bar
319B 2
320bar
ecf8e9dd
GS
321########
322sub n { 0 }
323sub f { my $x = shift; d(); }
324f(n());
325f();
326
327sub d {
328 my $i = 0; my @a;
329 while (do { { package DB; @a = caller($i++) } } ) {
330 @a = @DB::args;
331 for (@a) { print "$_\n"; $_ = '' }
332 }
333}
334EXPECT
3350
7ff03255
SG
336########
337sub TIEHANDLE { bless {} }
338sub PRINT { next }
339
340tie *STDERR, '';
341{ map ++$_, 1 }
342
343EXPECT
344Can't "next" outside a loop block at - line 2.
345########
346sub TIEHANDLE { bless {} }
347sub PRINT { print "[TIE] $_[1]" }
348
349tie *STDERR, '';
350die "DIE\n";
351
352EXPECT
353[TIE] DIE
354########
355sub TIEHANDLE { bless {} }
356sub PRINT {
357 (split(/./, 'x'x10000))[0];
358 eval('die("test\n")');
359 warn "[TIE] $_[1]";
360}
361open OLDERR, '>&STDERR';
362tie *STDERR, '';
363
364use warnings FATAL => qw(uninitialized);
365print undef;
366
367EXPECT
368[TIE] Use of uninitialized value in print at - line 11.