Move validate_args out into a separate method
[gitmo/Mouse.git] / t / 027-modifiers.t
1 #!perl -T
2 use strict;
3 use warnings;
4 use Test::More tests => 1;
5
6 my @seen;
7 my @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
26 my $child = Grandchild->new; $child->orig;
27
28 is_deeply(\@seen, \@expected, "multiple afters called in the right order");
29
30 BEGIN {
31     package Parent;
32     use Mouse;
33
34     sub orig {
35         push @seen, "orig";
36     }
37 }
38
39 BEGIN {
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
75 BEGIN {
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