forked from bestpractical/path-dispatcher
-
Notifications
You must be signed in to change notification settings - Fork 0
/
006-abort.t
58 lines (48 loc) · 1.14 KB
/
006-abort.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
53
54
55
56
57
use strict;
use warnings;
use Test::More;
use Test::Exception;
use Path::Dispatcher;
my @calls;
my $dispatcher = Path::Dispatcher->new;
$dispatcher->add_rule(
Path::Dispatcher::Rule::Regex->new(
regex => qr/foo/,
block => sub {
push @calls, "on";
die "Path::Dispatcher abort\n";
},
),
);
$dispatcher->add_rule(
Path::Dispatcher::Rule::Regex->new(
regex => qr/foo/,
block => sub {
push @calls, "last";
},
),
);
my $dispatch;
lives_ok {
$dispatch = $dispatcher->dispatch('foo');
};
is_deeply([splice @calls], [], "no blocks called yet of course");
lives_ok {
$dispatch->run;
};
is_deeply([splice @calls], ['on'], "correctly aborted the entire dispatch");
$dispatcher->add_rule(
Path::Dispatcher::Rule::Regex->new(
regex => qr/bar/,
block => sub {
push @calls, "bar: before";
my $x = {}->();
push @calls, "bar: last";
},
),
);
throws_ok {
$dispatcher->run('bar');
} qr/Not a CODE reference/;
is_deeply([splice @calls], ['bar: before'], "regular dies pass through");
done_testing;