Blame t/subclass.t

Packit 73b376
use strict;
Packit 73b376
use warnings;
Packit 73b376
use Test::More;
Packit 73b376
Packit 73b376
my $backcompat_called;
Packit 73b376
{
Packit 73b376
  package RoleExtension;
Packit 73b376
  use base 'Role::Tiny';
Packit 73b376
Packit 73b376
  sub apply_single_role_to_package {
Packit 73b376
    my $me = shift;
Packit 73b376
    $me->SUPER::apply_single_role_to_package(@_);
Packit 73b376
    $backcompat_called++;
Packit 73b376
  }
Packit 73b376
}
Packit 73b376
{
Packit 73b376
  package RoleExtension2;
Packit 73b376
  use base 'Role::Tiny';
Packit 73b376
Packit 73b376
  sub role_application_steps {
Packit 73b376
    $_[0]->SUPER::role_application_steps;
Packit 73b376
  }
Packit 73b376
Packit 73b376
  sub apply_single_role_to_package {
Packit 73b376
    my $me = shift;
Packit 73b376
    $me->SUPER::apply_single_role_to_package(@_);
Packit 73b376
    $backcompat_called++;
Packit 73b376
  }
Packit 73b376
Packit 73b376
}
Packit 73b376
Packit 73b376
{
Packit 73b376
  package Role1;
Packit 73b376
  $INC{'Role1.pm'} = __FILE__;
Packit 73b376
  use Role::Tiny;
Packit 73b376
  sub sub1 {}
Packit 73b376
}
Packit 73b376
Packit 73b376
{
Packit 73b376
  package Role2;
Packit 73b376
  $INC{'Role2.pm'} = __FILE__;
Packit 73b376
  use Role::Tiny;
Packit 73b376
  sub sub2 {}
Packit 73b376
}
Packit 73b376
Packit 73b376
{
Packit 73b376
  package Class1;
Packit 73b376
  RoleExtension->apply_roles_to_package(__PACKAGE__, 'Role1', 'Role2');
Packit 73b376
}
Packit 73b376
Packit 73b376
is $backcompat_called, 2,
Packit 73b376
  'overridden apply_single_role_to_package called for backcompat';
Packit 73b376
Packit 73b376
$backcompat_called = 0;
Packit 73b376
{
Packit 73b376
  package Class2;
Packit 73b376
  RoleExtension2->apply_roles_to_package(__PACKAGE__, 'Role1', 'Role2');
Packit 73b376
}
Packit 73b376
is $backcompat_called, 0,
Packit 73b376
  'overridden role_application_steps prevents backcompat attempt';
Packit 73b376
Packit 73b376
{
Packit 73b376
  package RoleExtension3;
Packit 73b376
  use base 'Role::Tiny';
Packit 73b376
Packit 73b376
  sub _composable_package_for {
Packit 73b376
    my ($self, $role) = @_;
Packit 73b376
    my $composed_name = 'Role::Tiny::_COMPOSABLE::'.$role;
Packit 73b376
    return $composed_name if $Role::Tiny::COMPOSED{role}{$composed_name};
Packit 73b376
    no strict 'refs';
Packit 73b376
    *{"${composed_name}::extra_sub"} = sub {};
Packit 73b376
    $self->SUPER::_composable_package_for($role);
Packit 73b376
  }
Packit 73b376
}
Packit 73b376
Packit 73b376
{
Packit 73b376
  package Class2;
Packit 73b376
  sub foo {}
Packit 73b376
}
Packit 73b376
{
Packit 73b376
  package Role3;
Packit 73b376
  $INC{'Role3.pm'} = __FILE__;
Packit 73b376
  use Role::Tiny;
Packit 73b376
  requires 'extra_sub';
Packit 73b376
}
Packit 73b376
ok eval { RoleExtension3->create_class_with_roles('Class2', 'Role3') },
Packit 73b376
  'requires is satisfied by subs generated by _composable_package_for';
Packit 73b376
Packit 73b376
{
Packit 73b376
  package Role4;
Packit 73b376
  $INC{'Role4.pm'} = __FILE__;
Packit 73b376
  use Role::Tiny;
Packit 73b376
  requires 'extra_sub2';
Packit 73b376
}
Packit 73b376
ok !eval { RoleExtension3->create_class_with_roles('Class2', 'Role4'); },
Packit 73b376
  'requires checked properly during create_class_with_roles';
Packit 73b376
Packit 73b376
SKIP: {
Packit 73b376
  skip "Class::Method::Modifiers not installed or too old", 1
Packit 73b376
    unless eval "use Class::Method::Modifiers 1.05; 1";
Packit 73b376
  package Role5;
Packit 73b376
  $INC{'Role5.pm'} = __FILE__;
Packit 73b376
  use Role::Tiny;
Packit 73b376
  around extra_sub2 => sub { my $orig = shift; $orig->(@_); };
Packit 73b376
Packit 73b376
  ::ok !eval { RoleExtension3->create_class_with_roles('Class3', 'Role4'); },
Packit 73b376
    'requires checked properly during create_class_with_roles';
Packit 73b376
}
Packit 73b376
Packit 73b376
done_testing;