Adding a test for a bug where, if a class uses a role with an 'after' sub, and anothe...
[gitmo/Moose.git] / t / 100_bugs / 029_apply_overwrites_previous_use_of_parent_role.t
1 #!/usr/bin/perl
2 use strict;
3 use warnings;
4
5 use Test::More;
6
7 {
8     package parent_role;
9     use Moose::Role;
10
11     # I just needed a value to write to, since the 'after' sub return value is ignored.
12     has 'value' => (is => 'rw', isa => 'Str');
13
14     sub foo { $_[0]->value('foo'); }
15 }
16
17 {
18     package child_role1;
19     use Moose::Role;
20
21     with 'parent_role';
22
23     after 'foo' => sub { $_[0]->value('after foo'); }
24 }
25
26 {
27     package child_role2;
28     use Moose::Role;
29
30     with 'parent_role';
31 }
32
33 {
34     package my_class;
35     use Moose;
36
37     with 'parent_role', 'child_role1';
38
39     1;
40 }
41
42 my $base_case = new my_class;
43 $base_case->foo();
44 is($base_case->value, 'after foo', "after sub called for base case");
45
46 my $apply_child_role2 = new my_class;
47 Moose::Util::apply_all_roles($apply_child_role2, 'child_role2');
48 $apply_child_role2->foo();
49 is($apply_child_role2->value, 'after foo', "after sub called for base case + child_role2 added with apply_all_roles()");
50
51 my $ensure_child_role2 = new my_class;
52 Moose::Util::ensure_all_roles($ensure_child_role2, 'child_role2');
53 $ensure_child_role2->foo();
54 is($ensure_child_role2->value, 'after foo', "after sub called for base case + child_role2 added with ensure_all_roles()");
55
56 done_testing;