X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Fsubclass.t;h=88dd111c3bf7772ff8d3ebcdc1f189ebcad02eae;hb=1c93a64319ca3ada66ddceb86bb537e2a7af5893;hp=14a4e27141f53b1ef3a3759c1fcbff40cc21dca6;hpb=04d32ee770ad9cf36b2ec43a0fe5dbed8729b4da;p=gitmo%2FRole-Tiny.git diff --git a/t/subclass.t b/t/subclass.t index 14a4e27..88dd111 100644 --- a/t/subclass.t +++ b/t/subclass.t @@ -60,4 +60,52 @@ $backcompat_called = 0; is $backcompat_called, 0, 'overridden role_application_steps prevents backcompat attempt'; +{ + package RoleExtension3; + use base 'Role::Tiny'; + + sub _composable_package_for { + my ($self, $role) = @_; + my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role; + return $composed_name if $Role::Tiny::COMPOSED{role}{$composed_name}; + no strict 'refs'; + *{"${composed_name}::extra_sub"} = sub {}; + $self->SUPER::_composable_package_for($role); + } +} + +{ + package Class2; + sub foo {} +} +{ + package Role3; + $INC{'Role3.pm'} = __FILE__; + use Role::Tiny; + requires 'extra_sub'; +} +ok eval { RoleExtension3->create_class_with_roles('Class2', 'Role3') }, + 'requires is satisfied by subs generated by _composable_package_for'; + +{ + package Role4; + $INC{'Role4.pm'} = __FILE__; + use Role::Tiny; + requires 'extra_sub2'; +} +ok !eval { RoleExtension3->create_class_with_roles('Class2', 'Role4'); }, + 'requires checked properly during create_class_with_roles'; + +SKIP: { + skip "Class::Method::Modifiers not installed or too old", 1 + unless eval "use Class::Method::Modifiers 1.05; 1"; + package Role5; + $INC{'Role5.pm'} = __FILE__; + use Role::Tiny; + around extra_sub2 => sub { my $orig = shift; $orig->(@_); }; + + ::ok !eval { RoleExtension3->create_class_with_roles('Class3', 'Role4'); }, + 'requires checked properly during create_class_with_roles'; +} + done_testing;