[win32] integrate mainline
[p5sagit/p5-mst-13.2.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>
e336de0d 6## Adapted and expanded by Gurusamy Sarathy <gsar@umich.edu>
1e422769 7##
8
9chdir 't' if -d 't';
10@INC = "../lib";
9607fc9c 11$Is_VMS = $^O eq 'VMS';
3fe9a6f1 12$Is_MSWin32 = $^O eq 'MSWin32';
9607fc9c 13$ENV{PERL5LIB} = "../lib" unless $Is_VMS;
1e422769 14
15$|=1;
16
17undef $/;
18@prgs = split "\n########\n", <DATA>;
19print "1..", scalar @prgs, "\n";
20
21$tmpfile = "runltmp000";
221 while -f ++$tmpfile;
9607fc9c 23END { if ($tmpfile) { 1 while unlink $tmpfile; } }
1e422769 24
25for (@prgs){
26 my $switch;
9607fc9c 27 if (s/^\s*(-\w+)//){
28 $switch = $1;
1e422769 29 }
30 my($prog,$expected) = split(/\nEXPECT\n/, $_);
9607fc9c 31 open TEST, ">$tmpfile";
32 print TEST "$prog\n";
1e422769 33 close TEST;
9607fc9c 34 my $results = $Is_VMS ?
35 `MCR $^X "-I[-.lib]" $switch $tmpfile` :
3fe9a6f1 36 $Is_MSWin32 ?
37 `.\\perl -I../lib $switch $tmpfile 2>&1` :
38 `sh -c './perl $switch $tmpfile' 2>&1`;
9607fc9c 39 my $status = $?;
1e422769 40 $results =~ s/\n+$//;
9607fc9c 41 # allow expected output to be written as if $prog is on STDIN
42 $results =~ s/runltmp\d+/-/g;
43 $results =~ s/\n%[A-Z]+-[SIWEF]-.*$// if $Is_VMS; # clip off DCL status msg
1e422769 44 $expected =~ s/\n+$//;
9607fc9c 45 if ($results ne $expected) {
1e422769 46 print STDERR "PROG: $switch\n$prog\n";
47 print STDERR "EXPECTED:\n$expected\n";
48 print STDERR "GOT:\n$results\n";
49 print "not ";
50 }
51 print "ok ", ++$i, "\n";
52}
53
1e422769 54__END__
55@a = (1, 2, 3);
56{
57 @a = sort { last ; } @a;
58}
59EXPECT
60Can't "last" outside a block at - line 3.
61########
62package TEST;
63
64sub TIESCALAR {
65 my $foo;
66 return bless \$foo;
67}
68sub FETCH {
69 eval 'die("test")';
70 print "still in fetch\n";
71 return ">$@<";
72}
73package main;
74
75tie $bar, TEST;
76print "- $bar\n";
77EXPECT
78still in fetch
79- >test at (eval 1) line 1.
80<
81########
82package TEST;
83
84sub TIESCALAR {
85 my $foo;
86 eval('die("foo\n")');
87 print "after eval\n";
88 return bless \$foo;
89}
90sub FETCH {
91 return "ZZZ";
92}
93
94package main;
95
96tie $bar, TEST;
97print "- $bar\n";
98print "OK\n";
99EXPECT
100after eval
101- ZZZ
102OK
103########
104package TEST;
105
106sub TIEHANDLE {
107 my $foo;
108 return bless \$foo;
109}
110sub PRINT {
111print STDERR "PRINT CALLED\n";
112(split(/./, 'x'x10000))[0];
113eval('die("test\n")');
114}
115
116package main;
117
118open FH, ">&STDOUT";
119tie *FH, TEST;
120print FH "OK\n";
5aabfad6 121print STDERR "DONE\n";
1e422769 122EXPECT
123PRINT CALLED
124DONE
125########
126sub warnhook {
127 print "WARNHOOK\n";
128 eval('die("foooo\n")');
129}
130$SIG{'__WARN__'} = 'warnhook';
131warn("dfsds\n");
132print "END\n";
133EXPECT
134WARNHOOK
135END
136########
137package TEST;
138
139use overload
140 "\"\"" => \&str
141;
142
143sub str {
144 eval('die("test\n")');
145 return "STR";
146}
147
148package main;
149
150$bar = bless {}, TEST;
151print "$bar\n";
152print "OK\n";
153EXPECT
154STR
155OK
156########
157sub foo {
158 $a <=> $b unless eval('$a == 0 ? bless undef : ($a <=> $b)');
159}
160@a = (3, 2, 0, 1);
161@a = sort foo @a;
162print join(', ', @a)."\n";
163EXPECT
1640, 1, 2, 3
165########
166sub foo {
ca0b63a5 167 goto bar if $a == 0 || $b == 0;
1e422769 168 $a <=> $b;
169}
170@a = (3, 2, 0, 1);
171@a = sort foo @a;
172print join(', ', @a)."\n";
173exit;
174bar:
175print "bar reached\n";
176EXPECT
177Can't "goto" outside a block at - line 2.
e336de0d 178########
179sub sortfn {
180 (split(/./, 'x'x10000))[0];
181 my (@y) = ( 4, 6, 5);
182 @y = sort { $a <=> $b } @y;
183 print "sortfn ".join(', ', @y)."\n";
184 return $_[0] <=> $_[1];
185}
186@x = ( 3, 2, 1 );
187@x = sort { &sortfn($a, $b) } @x;
188print "---- ".join(', ', @x)."\n";
189EXPECT
190sortfn 4, 5, 6
191---- 1, 2, 3
192########
193@a = (3, 2, 1);
194@a = sort { eval('die("no way")') , $a <=> $b} @a;
195print join(", ", @a)."\n";
196EXPECT
1971, 2, 3
198########
199@a = (1, 2, 3);
200foo:
201{
202 @a = sort { last foo; } @a;
203}
204EXPECT
205Label not found for "last foo" at - line 2.
206########
207package TEST;
208
209sub TIESCALAR {
210 my $foo;
211 return bless \$foo;
212}
213sub FETCH {
214 next;
215 return "ZZZ";
216}
217sub STORE {
218}
219
220package main;
221
222tie $bar, TEST;
223{
224 print "- $bar\n";
225}
226print "OK\n";
227EXPECT
228Can't "next" outside a block at - line 8.
229########
230package TEST;
231
232sub TIESCALAR {
233 my $foo;
234 return bless \$foo;
235}
236sub FETCH {
237 goto bbb;
238 return "ZZZ";
239}
240
241package main;
242
243tie $bar, TEST;
244print "- $bar\n";
245exit;
246bbb:
247print "bbb\n";
248EXPECT
249Can't find label bbb at - line 8.
250########
251sub foo {
252 $a <=> $b unless eval('$a == 0 ? die("foo\n") : ($a <=> $b)');
253}
254@a = (3, 2, 0, 1);
255@a = sort foo @a;
256print join(', ', @a)."\n";
257EXPECT
2580, 1, 2, 3
259########
260package TEST;
261sub TIESCALAR {
262 my $foo;
263 return bless \$foo;
264}
265sub FETCH {
266 return "fetch";
267}
268sub STORE {
269(split(/./, 'x'x10000))[0];
270}
271package main;
272tie $bar, TEST;
273$bar = "x";
274########
275package TEST;
276sub TIESCALAR {
277 my $foo;
278 next;
279 return bless \$foo;
280}
281package main;
282{
283tie $bar, TEST;
284}
285EXPECT
286Can't "next" outside a block at - line 4.
287########
288@a = (1, 2, 3);
289foo:
290{
291 @a = sort { exit(0) } @a;
292}
293END { print "foobar\n" }
294EXPECT
295foobar