RT#83929: fix memory leak in union types
[gitmo/Moose.git] / t / moose_util / moose_util_does_role.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7
8 use Moose::Util ':all';
9
10 {
11   package Foo;
12
13   use Moose::Role;
14 }
15
16 {
17   package Bar;
18
19   use Moose;
20
21   with qw/Foo/;
22 }
23
24 {
25   package Baz;
26
27   use Moose;
28 }
29
30 {
31   package Quux;
32
33   use metaclass;
34 }
35
36 {
37   package Foo::Foo;
38
39   use Moose::Role;
40
41   with 'Foo';
42 }
43
44 {
45   package DoesMethod;
46   use Moose;
47
48   sub does {
49     my $self = shift;
50     my ($role) = @_;
51     return 1 if $role eq 'Something::Else';
52     return $self->SUPER::does(@_);
53   }
54 }
55
56 # Classes
57
58 ok(does_role('Bar', 'Foo'), '... Bar does Foo');
59
60 ok(!does_role('Baz', 'Foo'), '... Baz doesnt do Foo');
61
62 # Objects
63
64 my $bar = Bar->new;
65
66 ok(does_role($bar, 'Foo'), '... $bar does Foo');
67
68 my $baz = Baz->new;
69
70 ok(!does_role($baz, 'Foo'), '... $baz doesnt do Foo');
71
72 # Invalid values
73
74 ok(!does_role(undef,'Foo'), '... undef doesnt do Foo');
75
76 ok(!does_role(1,'Foo'), '... 1 doesnt do Foo');
77
78 # non Moose metaclass
79
80 ok(!does_role('Quux', 'Foo'), '... Quux doesnt do Foo (does not die tho)');
81
82 # overriding the does method works properly
83
84 ok(does_role('DoesMethod', 'Something::Else'), '... can override the does method');
85
86 # Self
87
88 ok(does_role('Foo', 'Foo'), '... Foo does do Foo');
89
90 # sub-Roles
91
92 ok(does_role('Foo::Foo', 'Foo'), '... Foo::Foo does do Foo');
93
94 done_testing;