Remove dep on CMM by just delay-loading
[gitmo/Mouse.git] / t / 027-modifiers.t
CommitLineData
879a325b 1#!perl -T
2use strict;
3use warnings;
4use Test::More tests => 1;
5
6my @seen;
7my @expected = ("before 4",
8 "before 3",
9 "around 4 before",
10 "around 3 before",
11 "before 2",
12 "before 1",
13 "around 2 before",
14 "around 1 before",
15 "orig",
16 "around 1 after",
17 "around 2 after",
18 "after 1",
19 "after 2",
20 "around 3 after",
21 "around 4 after",
22 "after 3",
23 "after 4",
24 );
25
26my $child = Grandchild->new; $child->orig;
27
28is_deeply(\@seen, \@expected, "multiple afters called in the right order");
29
30BEGIN {
31 package Parent;
32 use Mouse;
33
34 sub orig {
35 push @seen, "orig";
36 }
37}
38
39BEGIN {
40 package Child;
41 use Mouse;
42 extends 'Parent';
43
44 before orig => sub {
45 push @seen, "before 1";
46 };
47
48 before orig => sub {
49 push @seen, "before 2";
50 };
51
52 around orig => sub {
53 my $orig = shift;
54 push @seen, "around 1 before";
55 $orig->();
56 push @seen, "around 1 after";
57 };
58
59 around orig => sub {
60 my $orig = shift;
61 push @seen, "around 2 before";
62 $orig->();
63 push @seen, "around 2 after";
64 };
65
66 after orig => sub {
67 push @seen, "after 1";
68 };
69
70 after orig => sub {
71 push @seen, "after 2";
72 };
73}
74
75BEGIN {
76 package Grandchild;
77 use Mouse;
78 extends 'Child';
79
80 before orig => sub {
81 push @seen, "before 3";
82 };
83
84 before orig => sub {
85 push @seen, "before 4";
86 };
87
88 around orig => sub {
89 my $orig = shift;
90 push @seen, "around 3 before";
91 $orig->();
92 push @seen, "around 3 after";
93 };
94
95 around orig => sub {
96 my $orig = shift;
97 push @seen, "around 4 before";
98 $orig->();
99 push @seen, "around 4 after";
100 };
101
102 after orig => sub {
103 push @seen, "after 3";
104 };
105
106 after orig => sub {
107 push @seen, "after 4";
108 };
109}
110