Add a few more broken deps
[gitmo/Moose.git] / t / roles / role_composition_method_mods.t
CommitLineData
fb1e11d5 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
a28e50e4 6use Test::More;
b10dde3a 7use Test::Fatal;
fb1e11d5 8
7ff56534 9use Moose::Meta::Role::Application::RoleSummation;
10use Moose::Meta::Role::Composite;
fb1e11d5 11
12{
13 package Role::Foo;
14 use Moose::Role;
06b355f7 15
fb1e11d5 16 before foo => sub { 'Role::Foo::foo' };
d03bd989 17 around foo => sub { 'Role::Foo::foo' };
18 after foo => sub { 'Role::Foo::foo' };
06b355f7 19 around baz => sub { [ 'Role::Foo', @{shift->(@_)} ] };
20
fb1e11d5 21 package Role::Bar;
22 use Moose::Role;
23
24 before bar => sub { 'Role::Bar::bar' };
d03bd989 25 around bar => sub { 'Role::Bar::bar' };
26 after bar => sub { 'Role::Bar::bar' };
06b355f7 27
28 package Role::Baz;
29 use Moose::Role;
30
31 with 'Role::Foo';
32 around baz => sub { [ 'Role::Baz', @{shift->(@_)} ] };
33
34}
35
36{
37 package Class::FooBar;
38 use Moose;
39
40 with 'Role::Baz';
41 sub foo { 'placeholder' }
42 sub baz { ['Class::FooBar'] }
43}
44
45#test modifier call order
46{
47 is_deeply(
48 Class::FooBar->baz,
49 ['Role::Baz','Role::Foo','Class::FooBar']
50 );
fb1e11d5 51}
52
53# test simple overrides
54{
55 my $c = Moose::Meta::Role::Composite->new(
56 roles => [
57 Role::Foo->meta,
58 Role::Bar->meta,
59 ]
60 );
61 isa_ok($c, 'Moose::Meta::Role::Composite');
62
d03bd989 63 is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name');
06b355f7 64
b10dde3a 65 is( exception {
fb1e11d5 66 Moose::Meta::Role::Application::RoleSummation->new->apply($c);
b10dde3a 67 }, undef, '... this succeeds as expected' );
06b355f7 68
fb1e11d5 69 is_deeply(
70 [ sort $c->get_method_modifier_list('before') ],
71 [ 'bar', 'foo' ],
72 '... got the right list of methods'
73 );
06b355f7 74
fb1e11d5 75 is_deeply(
76 [ sort $c->get_method_modifier_list('after') ],
77 [ 'bar', 'foo' ],
78 '... got the right list of methods'
d03bd989 79 );
06b355f7 80
fb1e11d5 81 is_deeply(
82 [ sort $c->get_method_modifier_list('around') ],
06b355f7 83 [ 'bar', 'baz', 'foo' ],
fb1e11d5 84 '... got the right list of methods'
d03bd989 85 );
06b355f7 86}
a28e50e4 87
88done_testing;