Have Moose* extend MooseParent
[gitmo/Moose.git] / t / 400_moose_util.t
CommitLineData
adf82331 1#!/usr/bin/env perl
2
2c1d8a98 3use Test::More tests => 13;
adf82331 4
5use strict;
6use warnings;
7
8BEGIN {
9 use_ok('Moose');
10 use_ok('Moose::Role');
11 use_ok('Moose::Util');
12}
13
14{
15 package Foo;
16
17 use Moose::Role;
18}
19
20{
21 package Bar;
22
23 use Moose;
24
25 with qw/Foo/;
26}
27
28{
29 package Baz;
30
31 use Moose;
32}
33
34# Classes
35
36ok(Moose::Util::does_role('Bar', 'Foo'));
37
38ok(! Moose::Util::does_role('Baz', 'Foo'));
39
40# Objects
41
42my $bar = Bar->new;
43
44ok(Moose::Util::does_role($bar, 'Foo'));
45
46my $baz = Baz->new;
47
48ok(! Moose::Util::does_role($baz, 'Foo'));
49
50# Invalid values
51
52ok(! Moose::Util::does_role(undef,'Foo'));
53
54ok(! Moose::Util::does_role(1,'Foo'));
55
2c1d8a98 56#
57# search_class_by_role tests
58#
59BEGIN { Moose::Util->import(qw( search_class_by_role )) }
60my $t_pfx = 'search_class_by_role: ';
61
62{ package SCBR::Role;
63 use Moose::Role;
64}
65
66{ package SCBR::A;
67 use Moose;
68}
69is search_class_by_role('SCBR::A', 'SCBR::Role'), undef, $t_pfx . 'not found role returns undef';
70
71{ package SCBR::B;
72 use Moose;
73 extends 'SCBR::A';
74 with 'SCBR::Role';
75}
76is search_class_by_role('SCBR::B', 'SCBR::Role'), 'SCBR::B', $t_pfx . 'class itself returned if it does role';
77
78{ package SCBR::C;
79 use Moose;
80 extends 'SCBR::B';
81}
82is search_class_by_role('SCBR::C', 'SCBR::Role'), 'SCBR::B', $t_pfx . 'nearest class doing role returned';
83
84{ package SCBR::D;
85 use Moose;
86 extends 'SCBR::C';
87 with 'SCBR::Role';
88}
89is search_class_by_role('SCBR::D', 'SCBR::Role'), 'SCBR::D', $t_pfx . 'nearest class being direct class returned';
90