xref: /openbsd/gnu/usr.bin/perl/t/op/die_keeperr.t (revision 4cfece93)
1#!perl -w
2
3BEGIN {
4    chdir 't' if -d 't';
5    require './test.pl';
6}
7
8plan(24);
9
10sub End::DESTROY { $_[0]->() }
11
12sub end(&) {
13    my($c) = @_;
14    return bless(sub { $c->() }, "End");
15}
16
17foreach my $inx ("", "aabbcc\n", [qw(aa bb cc)]) {
18    foreach my $outx ("", "xxyyzz\n", [qw(xx yy zz)]) {
19	my $warn = "";
20	local $SIG{__WARN__} = sub { $warn .= $_[0] };
21	{
22	    $@ = $outx;
23	    my $e = end { die $inx if $inx };
24	}
25	ok ref($@) eq ref($outx) && $@ eq $outx;
26	$warn =~ s/ at [^\n]*\n\z//;
27	is $warn, $inx ? "\t(in cleanup) $inx" : "";
28    }
29}
30
31{
32    no warnings "misc";
33    my $warn = "";
34    local $SIG{__WARN__} = sub { $warn .= $_[0] };
35    { my $e = end { no warnings "misc"; die "aa\n"; }; }
36    is $warn, "";
37}
38
39{
40    no warnings "misc";
41    my $warn = "";
42    local $SIG{__WARN__} = sub { $warn .= $_[0] };
43    { my $e = end { use warnings "misc"; die "aa\n"; }; }
44    is $warn, "\t(in cleanup) aa\n";
45}
46
47{
48    my $warn = "";
49    local $SIG{__WARN__} = sub { $warn .= $_[0] };
50    { my $e = end { no warnings "misc"; die "aa\n"; }; }
51    is $warn, "";
52}
53
54{
55    my $warn = "";
56    local $SIG{__WARN__} = sub { $warn .= $_[0] };
57    { my $e = end { use warnings "misc"; die "aa\n"; }; }
58    is $warn, "\t(in cleanup) aa\n";
59}
60
61{
62    use warnings "misc";
63    my $warn = "";
64    local $SIG{__WARN__} = sub { $warn .= $_[0] };
65    { my $e = end { no warnings "misc"; die "aa\n"; }; }
66    is $warn, "";
67}
68
69{
70    use warnings "misc";
71    my $warn = "";
72    local $SIG{__WARN__} = sub { $warn .= $_[0] };
73    { my $e = end { use warnings "misc"; die "aa\n"; }; }
74    is $warn, "\t(in cleanup) aa\n";
75}
76
771;
78