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'
63 # These next tests are aimed at testing to-role application followed by
64 # to-class application
66 package RoleWithRoleHCA;
69 use MooseX::ClassAttribute;
75 RoleWithRoleHCA->meta()->does_role('RoleHCA'),
76 'RoleWithRoleHCA does RoleHCA'
80 package ClassWithRoleWithRoleHCA;
84 with 'RoleWithRoleHCA';
95 $self->ObjectCount( $self->ObjectCount() + 1 );
101 push @{ $_[0]->TriggerRecord() }, [@_];
106 ClassWithRoleWithRoleHCA->meta()->does_role('RoleHCA'),
107 'ClassWithRoleWithRoleHCA does RoleHCA'
110 SharedTests::run_tests('ClassWithRoleWithRoleHCA');
112 ClassWithRoleWithRoleHCA->meta()->make_immutable();
115 ClassWithRoleWithRoleHCA->meta()->does_role('RoleHCA'),
116 'ClassWithRoleWithRoleHCA (immutable) does RoleHCA'
120 package InstanceWithRoleHCA;
133 push @{ $_[0]->TriggerRecord() }, [@_];
137 my $instance = InstanceWithRoleHCA->new();
139 apply_all_roles( $instance, 'RoleHCA' );
142 $instance->meta()->does_role('RoleHCA'),
143 '$instance does RoleHCA'
146 $instance->ObjectCount(1);
148 SharedTests::run_tests($instance);
150 $instance->meta()->make_immutable();
153 $instance->meta()->does_role('RoleHCA'),
154 '$instance (immutable) does RoleHCA'