Commit | Line | Data |
4a582a37 |
1 | #!/usr/bin/env perl |
2 | |
3 | use lib 'lib', 't/role-basic/lib'; |
4 | use MyTests; |
5 | |
6 | # multiple roles with the same role |
7 | { |
8 | package RoleC; |
9 | use Role::Tiny::Restricted; |
10 | sub baz { 'baz' } |
11 | |
12 | package RoleB; |
13 | use Role::Tiny::Restricted; |
14 | with 'RoleC'; |
15 | sub bar { 'bar' } |
16 | |
17 | package RoleA; |
18 | use Role::Tiny::Restricted; |
19 | with 'RoleC'; |
20 | sub foo { 'foo' } |
21 | |
22 | package Foo; |
23 | use strict; |
24 | use warnings; |
25 | use Role::Tiny::Restricted 'with'; |
26 | ::is( ::exception { |
27 | with 'RoleA', 'RoleB'; |
28 | }, undef, 'Composing multiple roles which use the same role should not have conflicts' ); |
29 | sub new { bless {} => shift } |
30 | |
31 | my $object = Foo->new; |
32 | foreach my $method (qw/foo bar baz/) { |
33 | ::can_ok $object, $method; |
34 | ::is $object->$method, $method, |
35 | '... and all methods should be composed in correctly'; |
36 | } |
37 | } |
38 | |
39 | { |
40 | no warnings 'redefine'; |
41 | local *UNIVERSAL::can = sub { 1 }; |
42 | eval <<' END'; |
43 | package Can::Can; |
44 | use Role::Tiny::Restricted 'with'; |
45 | with 'A::NonExistent::Role'; |
46 | END |
47 | my $error = $@ || ''; |
48 | like $error, qr{^Can't locate A/NonExistent/Role.pm}, |
49 | 'If ->can always returns true, we should still not think we loaded the role' |
50 | or diag "Error found: $error"; |
51 | } |
52 | |
53 | done_testing; |