Implement own method modifiers
[gitmo/Mouse.git] / t / 400-define-role.t
CommitLineData
995061c2 1#!/usr/bin/env perl
2use strict;
3use warnings;
7b133c92 4use Test::More;
5BEGIN{
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}
eab81545 13use Test::Exception;
995061c2 14
15lives_ok {
16 package Role;
17 use Mouse::Role;
18
19 no Mouse::Role;
20};
21
8da998d9 22throws_ok {
23 package Role;
24 use Mouse::Role;
25
26 extends 'Role::Parent';
964eaf79 27
28 no Mouse::Role;
ff687069 29} qr/Roles do not support 'extends'/;
8da998d9 30
72381201 31lives_ok {
32 package Role;
33 use Mouse::Role;
34
35 sub foo {}
26482d3f 36
37 no Mouse::Role;
72381201 38};
39
40lives_ok {
41 package Role;
42 use Mouse::Role;
43
44 before foo => sub {};
45 after foo => sub {};
46 around foo => sub {};
26482d3f 47
48 no Mouse::Role;
49};
50
51lives_ok {
52 package Role;
53 use Mouse::Role;
54
ab1a1cce 55 has 'foo' => (is => 'bare');
26482d3f 56
57 no Mouse::Role;
72381201 58};
59
00c0e9c2 60do {
61 package Other::Role;
62 use Mouse::Role;
63 no Mouse::Role;
64};
65
b1b81553 66lives_ok {
00c0e9c2 67 package Role;
68 use Mouse::Role;
69
70 with 'Other::Role';
71
72 no Mouse::Role;
b1b81553 73};
00c0e9c2 74
e9d57bdf 75TODO: {
eb812bde 76 package Role;
77 use Mouse::Role;
78
e9d57bdf 79 eval {
80 excludes 'excluded';
81 };
82 local our $TODO = "Mouse::Role does not currently support 'excludes'";
83 ::ok(!$@, "excludes");
eb812bde 84
85 no Mouse::Role;
e9d57bdf 86};
eb812bde 87
4377514b 88throws_ok {
89 package Role;
90 use Mouse::Role;
91
92 confess "Mouse::Role exports confess";
93
94} qr/^Mouse::Role exports confess/;
95
96lives_ok {
97 package Role;
98 use Mouse::Role;
99
100 my $obj = bless {} => "Impromptu::Class";
101 ::is(blessed($obj), "Impromptu::Class");
102};
103
ff687069 104lives_ok{
b3bfbec3 105 package Class;
106 use Mouse;
107
108 with 'Role', 'Other::Role';
ff687069 109};
b3bfbec3 110