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