Commit | Line | Data |
879a325b |
1 | #!perl -T |
2 | use strict; |
3 | use warnings; |
c13900f1 |
4 | |
5 | use Test::More; |
6 | BEGIN { |
7 | if (eval "require Class::Method::Modifiers; 1") { |
8 | plan tests => 1; |
9 | } |
10 | else { |
11 | plan skip_all => "Class::Method::Modifiers required for this test"; |
12 | } |
13 | } |
879a325b |
14 | |
15 | my @seen; |
16 | my @expected = ("before 4", |
17 | "before 3", |
18 | "around 4 before", |
19 | "around 3 before", |
20 | "before 2", |
21 | "before 1", |
22 | "around 2 before", |
23 | "around 1 before", |
24 | "orig", |
25 | "around 1 after", |
26 | "around 2 after", |
27 | "after 1", |
28 | "after 2", |
29 | "around 3 after", |
30 | "around 4 after", |
31 | "after 3", |
32 | "after 4", |
33 | ); |
34 | |
35 | my $child = Grandchild->new; $child->orig; |
36 | |
37 | is_deeply(\@seen, \@expected, "multiple afters called in the right order"); |
38 | |
39 | BEGIN { |
40 | package Parent; |
41 | use Mouse; |
42 | |
43 | sub orig { |
44 | push @seen, "orig"; |
45 | } |
46 | } |
47 | |
48 | BEGIN { |
49 | package Child; |
50 | use Mouse; |
51 | extends 'Parent'; |
52 | |
53 | before orig => sub { |
54 | push @seen, "before 1"; |
55 | }; |
56 | |
57 | before orig => sub { |
58 | push @seen, "before 2"; |
59 | }; |
60 | |
61 | around orig => sub { |
62 | my $orig = shift; |
63 | push @seen, "around 1 before"; |
64 | $orig->(); |
65 | push @seen, "around 1 after"; |
66 | }; |
67 | |
68 | around orig => sub { |
69 | my $orig = shift; |
70 | push @seen, "around 2 before"; |
71 | $orig->(); |
72 | push @seen, "around 2 after"; |
73 | }; |
74 | |
75 | after orig => sub { |
76 | push @seen, "after 1"; |
77 | }; |
78 | |
79 | after orig => sub { |
80 | push @seen, "after 2"; |
81 | }; |
82 | } |
83 | |
84 | BEGIN { |
85 | package Grandchild; |
86 | use Mouse; |
87 | extends 'Child'; |
88 | |
89 | before orig => sub { |
90 | push @seen, "before 3"; |
91 | }; |
92 | |
93 | before orig => sub { |
94 | push @seen, "before 4"; |
95 | }; |
96 | |
97 | around orig => sub { |
98 | my $orig = shift; |
99 | push @seen, "around 3 before"; |
100 | $orig->(); |
101 | push @seen, "around 3 after"; |
102 | }; |
103 | |
104 | around orig => sub { |
105 | my $orig = shift; |
106 | push @seen, "around 4 before"; |
107 | $orig->(); |
108 | push @seen, "around 4 after"; |
109 | }; |
110 | |
111 | after orig => sub { |
112 | push @seen, "after 3"; |
113 | }; |
114 | |
115 | after orig => sub { |
116 | push @seen, "after 4"; |
117 | }; |
118 | } |
119 | |