fixed the test for method modifiers
[gitmo/Moose.git] / t / 010_basics / 010_method_modifier_with_regexp.t
CommitLineData
5f71050b 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
634c8bda 6use Test::More tests => 10;
5f71050b 7
8BEGIN {
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
32my $dog = Dog->new;
33is( $dog->bark_once, 'Dog::around', 'around modifier is called' );
34is( $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
62my $cat = Cat->new;
63$cat->bark_once;
64is( $Cat::BEFORE_BARK_COUNTER, 1, 'before modifier is called once' );
65is( $Cat::AFTER_BARK_COUNTER, 1, 'after modifier is called once' );
66$cat->bark_twice;
67is( $Cat::BEFORE_BARK_COUNTER, 2, 'before modifier is called twice' );
68is( $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
143my $my_dog = MyDog->new;
144$my_dog->bark;
145$my_dog->bark_twice;
146is($MyDog::BEFORE_BARK_COUNTER, 2, "before method modifier is called twice");
147