9 use Moose::Util qw( apply_all_roles );
15 use MooseX::ClassAttribute;
17 while ( my ( $name, $def ) = each %SharedTests::Attrs ) {
18 class_has $name => %{$def};
23 package ClassWithRoleHCA;
38 $self->ObjectCount( $self->ObjectCount() + 1 );
44 push @{ $_[0]->TriggerRecord() }, [@_];
49 [ map { $_->name() } ClassWithRoleHCA->meta()->calculate_all_roles() ],
51 'ClassWithRoleHCA does RoleHCA'
54 SharedTests::run_tests('ClassWithRoleHCA');
56 ClassWithRoleHCA->meta()->make_immutable();
59 [ map { $_->name() } ClassWithRoleHCA->meta()->calculate_all_roles() ],
61 'ClassWithRoleHCA (immutable) does RoleHCA'
65 # These next tests are aimed at testing to-role application followed by
66 # to-class application
68 package RoleWithRoleHCA;
71 use MooseX::ClassAttribute;
77 package ClassWithRoleWithRoleHCA;
81 with 'RoleWithRoleHCA';
92 $self->ObjectCount( $self->ObjectCount() + 1 );
98 push @{ $_[0]->TriggerRecord() }, [@_];
103 [ map { $_->name() } ClassWithRoleHCA->meta()->calculate_all_roles() ],
105 'ClassWithRoleWithRoleHCA does RoleHCA'
108 SharedTests::run_tests('ClassWithRoleWithRoleHCA');
110 ClassWithRoleWithRoleHCA->meta()->make_immutable();
113 [ map { $_->name() } ClassWithRoleHCA->meta()->calculate_all_roles() ],
115 'ClassWithRoleWithRoleHCA (immutable) does RoleHCA'
119 package InstanceWithRoleHCA;
132 push @{ $_[0]->TriggerRecord() }, [@_];
136 my $instance = InstanceWithRoleHCA->new();
138 apply_all_roles( $instance, 'RoleHCA' );
141 [ map { $_->name() } $instance->meta()->calculate_all_roles() ],
143 '$instance does RoleHCA'
146 $instance->ObjectCount(1);
148 SharedTests::run_tests($instance);
150 $instance->meta()->make_immutable();
153 [ map { $_->name() } $instance->meta()->calculate_all_roles() ],
155 '$instance (immutable) does RoleHCA'