10 requires qw(req1 req2);
12 around foo => sub { my $orig = shift; join ' ', 'role foo', $orig->(@_) };
14 sub bar { 'role bar' }
16 sub baz { 'role baz' }
24 sub foo { 'class foo' }
25 sub baz { 'class baz' }
35 sub baz { 'class baz' }
39 package IntermediaryRole;
54 exception { Role::Tiny->apply_role_to_package($to, 'MyRole') }
57 is(try_apply_to('MyClass'), undef, 'role applies cleanly');
58 is(MyClass->foo, 'role foo class foo', 'method modifier');
59 is(MyClass->bar, 'role bar', 'method from role');
60 is(MyClass->baz, 'class baz', 'method from class');
61 ok(MyClass->does('MyRole'), 'class does role');
62 ok(!MyClass->does('Random'), 'class does not do non-role');
64 like(try_apply_to('NoMethods'), qr/req1, req2/, 'error for both methods');
65 like(try_apply_to('OneMethod'), qr/req2/, 'error for one method');
68 Role::Tiny->apply_role_to_package('IntermediaryRole', 'MyRole');
69 Role::Tiny->apply_role_to_package('ExtraClass', 'IntermediaryRole');
70 }, undef, 'No errors applying roles';
72 ok(ExtraClass->does('MyRole'), 'ExtraClass does MyRole');
73 ok(ExtraClass->does('IntermediaryRole'), 'ExtraClass does IntermediaryRole');
74 is(ExtraClass->bar, 'role bar', 'method from role');
75 is(ExtraClass->baz, 'class baz', 'method from class');