Fix RT #54203 (reported by chocolateboy) that setters might return undef.
[gitmo/Mouse.git] / t / 400_mouse_util / 002_mouse_util_does_role.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 8;
7
8 BEGIN {
9     use_ok('Mouse::Util', ':all');
10 }
11
12 {
13   package Foo;
14
15   use Mouse::Role;
16 }
17
18 {
19   package Bar;
20
21   use Mouse;
22
23   with qw/Foo/;
24 }
25
26 {
27   package Baz;
28
29   use Mouse;
30 }
31
32 {
33   package Quux;
34
35   #use metaclass;
36 }
37
38 {
39   package Foo::Foo;
40
41   use Mouse::Role;
42
43   with 'Foo';
44 }
45
46 # Classes
47
48 ok(does_role('Bar', 'Foo'), '... Bar does Foo');
49
50 ok(!does_role('Baz', 'Foo'), '... Baz doesnt do Foo');
51
52 # Objects
53
54 my $bar = Bar->new;
55
56 ok(does_role($bar, 'Foo'), '... $bar does Foo');
57
58 my $baz = Baz->new;
59
60 ok(!does_role($baz, 'Foo'), '... $baz doesnt do Foo');
61
62 # Invalid values
63
64 ok(!does_role(undef,'Foo'), '... undef doesnt do Foo');
65
66 ok(!does_role(1,'Foo'), '... 1 doesnt do Foo');
67
68 # non Mouse metaclass
69
70 ok(!does_role('Quux', 'Foo'), '... Quux doesnt do Foo (does not die tho)');
71
72 # TODO: make the below work, maybe?
73
74 # Self
75
76 #ok(does_role('Foo', 'Foo'), '... Foo does do Foo');
77
78 # sub-Roles
79
80 #ok(does_role('Foo::Foo', 'Foo'), '... Foo::Foo does do Foo');
81