d5e9143cb8014c0cbb86d7b416d6de191f00f31b
[gitmo/Mouse.git] / t / 400-define-role.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 11;
5 use Test::Exception;
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/Role does not currently 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/Role does not currently support 'with'/;
66
67 lives_ok {
68     package Role;
69     use Mouse::Role;
70
71     requires 'required';
72     excludes 'excluded';
73
74     no Mouse::Role;
75 };
76
77 throws_ok {
78     package Role;
79     use Mouse::Role;
80
81     confess "Mouse::Role exports confess";
82
83 } qr/^Mouse::Role exports confess/;
84
85 lives_ok {
86     package Role;
87     use Mouse::Role;
88
89     my $obj = bless {} => "Impromptu::Class";
90     ::is(blessed($obj), "Impromptu::Class");
91 };
92
93 throws_ok {
94     package Class;
95     use Mouse;
96
97     with 'Role', 'Other::Role';
98 } qr/Mouse::Role only supports 'with' on individual roles at a time/;
99