66cddb065156b6fa49fa2d85e9f4daddc6b78173
[gitmo/Mouse.git] / t / 400-define-role.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 12;
5 use Mouse::Util ':test';
6
7 lives_ok {
8     package Role;
9     use Mouse::Role;
10
11     no Mouse::Role;
12 };
13
14 throws_ok {
15     package Role;
16     use Mouse::Role;
17
18     extends 'Role::Parent';
19
20     no Mouse::Role;
21 } qr/Roles do not support 'extends'/;
22
23 lives_ok {
24     package Role;
25     use Mouse::Role;
26
27     sub foo {}
28
29     no Mouse::Role;
30 };
31
32 lives_ok {
33     package Role;
34     use Mouse::Role;
35
36     before foo => sub {};
37     after foo  => sub {};
38     around foo => sub {};
39
40     no Mouse::Role;
41 };
42
43 lives_ok {
44     package Role;
45     use Mouse::Role;
46
47     has 'foo';
48
49     no Mouse::Role;
50 };
51
52 do {
53     package Other::Role;
54     use Mouse::Role;
55     no Mouse::Role;
56 };
57
58 throws_ok {
59     package Role;
60     use Mouse::Role;
61
62     with 'Other::Role';
63
64     no Mouse::Role;
65 } qr/Mouse::Role does not currently support 'with'/;
66
67 throws_ok {
68     package Role;
69     use Mouse::Role;
70
71     requires 'required';
72
73     no Mouse::Role;
74 } qr/Mouse::Role does not currently support 'requires'/;
75
76 throws_ok {
77     package Role;
78     use Mouse::Role;
79
80     excludes 'excluded';
81
82     no Mouse::Role;
83 } qr/Mouse::Role does not currently support 'excludes'/;
84
85 throws_ok {
86     package Role;
87     use Mouse::Role;
88
89     confess "Mouse::Role exports confess";
90
91 } qr/^Mouse::Role exports confess/;
92
93 lives_ok {
94     package Role;
95     use Mouse::Role;
96
97     my $obj = bless {} => "Impromptu::Class";
98     ::is(blessed($obj), "Impromptu::Class");
99 };
100
101 throws_ok {
102     package Class;
103     use Mouse;
104
105     with 'Role', 'Other::Role';
106 } qr/Mouse::Role only supports 'with' on individual roles at a time/;
107