Commit | Line | Data |
c9ee520d |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
a28e50e4 |
4 | use Test::More; |
c9ee520d |
5 | use Moose (); |
6 | |
b5ae7c00 |
7 | use Class::Load qw(is_class_loaded); |
8 | |
c9ee520d |
9 | my $role = Moose::Meta::Role->create_anon_role( |
10 | attributes => { |
11 | is_worn => { |
12 | is => 'rw', |
13 | isa => 'Bool', |
14 | }, |
15 | }, |
16 | methods => { |
17 | remove => sub { shift->is_worn(0) }, |
18 | }, |
19 | ); |
20 | |
21 | my $class = Moose::Meta::Class->create('MyItem::Armor::Helmet'); |
22 | $role->apply($class); |
23 | # XXX: Moose::Util::apply_all_roles doesn't cope with references yet |
24 | |
1c11ec03 |
25 | my $visored = $class->new_object(is_worn => 0); |
c9ee520d |
26 | ok(!$visored->is_worn, "attribute, accessor was consumed"); |
27 | $visored->is_worn(1); |
28 | ok($visored->is_worn, "accessor was consumed"); |
29 | $visored->remove; |
30 | ok(!$visored->is_worn, "method was consumed"); |
31 | |
bf26e705 |
32 | like($role->name, qr/^Moose::Meta::Role::__ANON__::SERIAL::\d+$/, ""); |
33 | ok($role->is_anon_role, "the role knows it's anonymous"); |
34 | |
b5ae7c00 |
35 | ok(is_class_loaded(Moose::Meta::Role->create_anon_role->name), "creating an anonymous role satisifes is_class_loaded"); |
c8d9f1e2 |
36 | ok(Class::MOP::class_of(Moose::Meta::Role->create_anon_role->name), "creating an anonymous role satisifes class_of"); |
08478633 |
37 | |
4f9d7bba |
38 | { |
39 | my $role; |
40 | { |
41 | my $meta = Moose::Meta::Role->create_anon_role( |
42 | methods => { |
43 | foo => sub { 'FOO' }, |
44 | }, |
45 | ); |
46 | |
47 | $role = $meta->name; |
48 | can_ok($role, 'foo'); |
49 | } |
50 | ok(!$role->can('foo')); |
51 | } |
52 | |
53 | { |
54 | my $role; |
55 | { |
56 | my $meta = Moose::Meta::Role->create_anon_role( |
57 | methods => { |
58 | foo => sub { 'FOO' }, |
59 | }, |
60 | ); |
61 | |
62 | $role = $meta->name; |
63 | can_ok($role, 'foo'); |
64 | Class::MOP::remove_metaclass_by_name($role); |
65 | } |
66 | ok(!$role->can('foo')); |
67 | } |
68 | |
a28e50e4 |
69 | done_testing; |