/
basic.t
52 lines (39 loc) · 1.05 KB
/
basic.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
use strict;
use Callback::Frame;
use Test::More tests => 17;
my ($cb, $cb2, $cb3);
my $counter = 0;
my $tos_at_error_site;
ok(!$Callback::Frame::top_of_stack);
frame(name => "base frame", code => sub {
ok($Callback::Frame::top_of_stack);
is($counter++, 0);
$cb = frame(name => "frame 1", code => sub {
is($counter++, 2);
ok($_[0] == 123);
$cb2 = frame(code => sub {
is($counter++, 4);
$cb3 = frame(name => "frame 3", code => sub {
is($counter++, 6);
$tos_at_error_site = $Callback::Frame::top_of_stack;
die "OUCH";
});
});
}, catch => sub {
my $err = $@;
my $stack_trace = shift;
is($counter++, 7);
ok($tos_at_error_site == $Callback::Frame::top_of_stack);
ok($err =~ /^OUCH(?!.*ANONYMOUS)/);
ok($stack_trace =~ /^OUCH.*?frame 3.*?ANONYMOUS FRAME.*?frame 1.*?base frame/s);
})
})->();
ok(!$Callback::Frame::top_of_stack);
is($counter++, 1);
$cb->(123);
is($counter++, 3);
$cb2->();
is($counter++, 5);
$cb3->();
is($counter++, 8);
ok(!$Callback::Frame::top_of_stack);