1use strict; 2use warnings; 3use Test::More; 4 5BEGIN { 6 package Local::Role1; 7 use Role::Tiny; 8} 9 10BEGIN { 11 package Local::Role2; 12 use Role::Tiny; 13} 14 15BEGIN { 16 package Local::Class1; 17 use Role::Tiny::With; 18 with qw( 19 Local::Role1 20 Local::Role2 21 ); 22} 23 24BEGIN { 25 package Local::Class2; 26 use Role::Tiny::With; 27 with qw( Local::Role1 ); 28 with qw( Local::Role2 ); 29} 30 31BEGIN { 32 package Local::Class3; 33 use Role::Tiny::With; 34 with qw( Local::Role1 ); 35 with qw( Local::Role2 ); 36 sub DOES { 37 my ($proto, $role) = @_; 38 return 1 if $role eq 'Local::Role3'; 39 return $proto->Role::Tiny::does_role($role); 40 } 41} 42 43for my $c (1 .. 3) { 44 my $class = "Local::Class$c"; 45 for my $r (1 .. 2) { 46 my $role = "Local::Role$r"; 47 ok($class->does($role), "$class\->does($role)"); 48 ok($class->DOES($role), "$class\->DOES($role)"); 49 } 50} 51 52{ 53 my $class = "Local::Class3"; 54 my $role = "Local::Role3"; 55 ok( ! $class->does($role), "$class\->does($role)"); 56 ok( $class->DOES($role), "$class\->DOES($role)"); 57} 58 59done_testing; 60