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