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