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 ClassWithRoleHCA->meta()->does_role('RoleHCA'),
50 'ClassWithRoleHCA does RoleHCA'
53 SharedTests::run_tests('ClassWithRoleHCA');
55 ClassWithRoleHCA->meta()->make_immutable();
58 ClassWithRoleHCA->meta()->does_role('RoleHCA'),
59 'ClassWithRoleHCA (immutable) does RoleHCA'
62 # These next tests are aimed at testing to-role application followed by
63 # to-class application
65 package RoleWithRoleHCA;
68 use MooseX::ClassAttribute;
74 RoleWithRoleHCA->meta()->does_role('RoleHCA'),
75 'RoleWithRoleHCA does RoleHCA'
79 package ClassWithRoleWithRoleHCA;
83 with 'RoleWithRoleHCA';
94 $self->ObjectCount( $self->ObjectCount() + 1 );
100 push @{ $_[0]->TriggerRecord() }, [@_];
105 ClassWithRoleWithRoleHCA->meta()->does_role('RoleHCA'),
106 'ClassWithRoleWithRoleHCA does RoleHCA'
109 SharedTests::run_tests('ClassWithRoleWithRoleHCA');
111 ClassWithRoleWithRoleHCA->meta()->make_immutable();
114 ClassWithRoleWithRoleHCA->meta()->does_role('RoleHCA'),
115 'ClassWithRoleWithRoleHCA (immutable) does RoleHCA'
119 package InstanceWithRoleHCA;
132 push @{ $_[0]->TriggerRecord() }, [@_];
136 my $instance = InstanceWithRoleHCA->new();
138 apply_all_roles( $instance, 'RoleHCA' );
141 $instance->meta()->does_role('RoleHCA'),
142 '$instance does RoleHCA'
145 $instance->ObjectCount(1);
147 SharedTests::run_tests($instance);
149 $instance->meta()->make_immutable();
152 $instance->meta()->does_role('RoleHCA'),
153 '$instance (immutable) does RoleHCA'