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