Commit | Line | Data |
5f71050b |
1 | #!/usr/bin/perl |
2 | |
3 | use strict; |
4 | use warnings; |
5 | |
634c8bda |
6 | use Test::More tests => 10; |
5f71050b |
7 | |
8 | BEGIN { |
9 | use_ok('Moose'); |
10 | } |
11 | |
12 | { |
13 | |
14 | package Dog; |
15 | use Moose; |
16 | |
17 | sub bark_once { |
18 | my $self = shift; |
19 | return 'bark'; |
20 | } |
21 | |
22 | sub bark_twice { |
23 | return 'barkbark'; |
24 | } |
25 | |
26 | around qr/bark.*/ => sub { |
27 | 'Dog::around'; |
28 | }; |
29 | |
30 | } |
31 | |
32 | my $dog = Dog->new; |
33 | is( $dog->bark_once, 'Dog::around', 'around modifier is called' ); |
34 | is( $dog->bark_twice, 'Dog::around', 'around modifier is called' ); |
35 | |
36 | { |
37 | |
38 | package Cat; |
39 | use Moose; |
40 | our $BEFORE_BARK_COUNTER = 0; |
41 | our $AFTER_BARK_COUNTER = 0; |
42 | |
43 | sub bark_once { |
44 | my $self = shift; |
45 | return 'bark'; |
46 | } |
47 | |
48 | sub bark_twice { |
49 | return 'barkbark'; |
50 | } |
51 | |
52 | before qr/bark.*/ => sub { |
53 | $BEFORE_BARK_COUNTER++; |
54 | }; |
55 | |
56 | after qr/bark.*/ => sub { |
57 | $AFTER_BARK_COUNTER++; |
58 | }; |
59 | |
60 | } |
61 | |
62 | my $cat = Cat->new; |
63 | $cat->bark_once; |
64 | is( $Cat::BEFORE_BARK_COUNTER, 1, 'before modifier is called once' ); |
65 | is( $Cat::AFTER_BARK_COUNTER, 1, 'after modifier is called once' ); |
66 | $cat->bark_twice; |
67 | is( $Cat::BEFORE_BARK_COUNTER, 2, 'before modifier is called twice' ); |
68 | is( $Cat::AFTER_BARK_COUNTER, 2, 'after modifier is called twice' ); |
69 | |
70 | { |
71 | |
72 | package Animal; |
73 | use Moose; |
74 | our $BEFORE_BARK_COUNTER = 0; |
75 | our $AFTER_BARK_COUNTER = 0; |
76 | |
77 | sub bark_once { |
78 | my $self = shift; |
79 | return 'bark'; |
80 | } |
81 | |
82 | sub bark_twice { |
83 | return 'barkbark'; |
84 | } |
85 | |
86 | before qr/bark.*/ => sub { |
87 | $BEFORE_BARK_COUNTER++; |
88 | }; |
89 | |
90 | after qr/bark.*/ => sub { |
91 | $AFTER_BARK_COUNTER++; |
92 | }; |
93 | } |
94 | |
95 | { |
96 | |
97 | package Cow; |
98 | use Moose; |
99 | extends 'Animal'; |
100 | |
101 | override 'bark_once' => sub { |
102 | my $self = shift; |
634c8bda |
103 | super(); |
5f71050b |
104 | return 'cow'; |
105 | }; |
106 | |
107 | override 'bark_twice' => sub { |
634c8bda |
108 | super(); |
5f71050b |
109 | return 'cowcow'; |
110 | }; |
111 | } |
112 | |
634c8bda |
113 | { |
5f71050b |
114 | my $cow = Cow->new; |
115 | $cow->bark_once; |
116 | is( $Animal::BEFORE_BARK_COUNTER, 1, |
117 | 'before modifier is called if method is overridden' ); |
118 | is( $Animal::AFTER_BARK_COUNTER, 1, |
119 | 'after modifier is called if method is overridden' ); |
120 | } |
121 | |
122 | { |
123 | |
5f71050b |
124 | package MyDog; |
125 | use Moose; |
126 | our $BEFORE_BARK_COUNTER=0; |
127 | sub bark { |
128 | my $self = shift; |
129 | return 'bark'; |
130 | } |
131 | |
132 | sub bark_twice { |
133 | my $self = shift; |
134 | return 'barkbark'; |
135 | } |
136 | |
137 | before qw/bark bark_twice/ => sub { |
138 | $BEFORE_BARK_COUNTER++; |
139 | }; |
140 | |
141 | } |
142 | |
143 | my $my_dog = MyDog->new; |
144 | $my_dog->bark; |
145 | $my_dog->bark_twice; |
146 | is($MyDog::BEFORE_BARK_COUNTER, 2, "before method modifier is called twice"); |
147 | |