fixed the test for method modifiers
[gitmo/Moose.git] / t / 010_basics / 010_method_modifier_with_regexp.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 10;
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;
103         super();
104         return 'cow';
105     };
106
107     override 'bark_twice' => sub {
108         super();        
109         return 'cowcow';
110     };
111 }
112
113 {
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
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