2 use warnings FATAL => 'all';
11 sub apply_single_role_to_package {
13 $me->SUPER::apply_single_role_to_package(@_);
18 package RoleExtension2;
19 use base 'Role::Tiny';
21 sub role_application_steps {
22 $_[0]->SUPER::role_application_steps;
25 sub apply_single_role_to_package {
27 $me->SUPER::apply_single_role_to_package(@_);
35 $INC{'Role1.pm'} = __FILE__;
42 $INC{'Role2.pm'} = __FILE__;
49 RoleExtension->apply_roles_to_package(__PACKAGE__, 'Role1', 'Role2');
52 is $backcompat_called, 2,
53 'overridden apply_single_role_to_package called for backcompat';
55 $backcompat_called = 0;
58 RoleExtension2->apply_roles_to_package(__PACKAGE__, 'Role1', 'Role2');
60 is $backcompat_called, 0,
61 'overridden role_application_steps prevents backcompat attempt';
64 package RoleExtension3;
65 use base 'Role::Tiny';
67 sub _composable_package_for {
68 my ($self, $role) = @_;
69 my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role;
70 return $composed_name if $Role::Tiny::COMPOSED{role}{$composed_name};
72 *{"${composed_name}::extra_sub"} = sub {};
73 $self->SUPER::_composable_package_for($role);
83 $INC{'Role3.pm'} = __FILE__;
87 ok eval { RoleExtension3->create_class_with_roles('Class2', 'Role3') },
88 'requires is satisfied by subs generated by _composable_package_for';
92 $INC{'Role4.pm'} = __FILE__;
94 requires 'extra_sub2';
96 ok !eval { RoleExtension3->create_class_with_roles('Class2', 'Role4'); },
97 'requires checked properly during create_class_with_roles';
101 $INC{'Role5.pm'} = __FILE__;
103 around extra_sub2 => sub { my $orig = shift; $orig->(@_); };
105 ok !eval { RoleExtension3->create_class_with_roles('Class3', 'Role4'); },
106 'requires checked properly during create_class_with_roles';