1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
use strict;
use warnings FATAL => 'all';
use Test::More;
use Test::Fatal;
BEGIN {
plan skip_all => "Class::Method::Modifiers not installed"
unless eval "use Class::Method::Modifiers; 1";
}
BEGIN {
package MyRole;
use Role::Tiny;
around foo => sub { my $orig = shift; join ' ', 'role foo', $orig->(@_) };
}
BEGIN {
package ExtraRole;
use Role::Tiny;
}
BEGIN {
package MyClass;
sub foo { 'class foo' }
}
BEGIN {
package ExtraClass;
use Role::Tiny::With;
with qw(MyRole ExtraRole);
sub foo { 'class foo' }
}
BEGIN {
package BrokenRole;
use Role::Tiny;
around 'broken modifier' => sub { my $orig = shift; $orig->(@_) };
}
sub try_apply_to {
my $to = shift;
exception { Role::Tiny->apply_role_to_package($to, 'MyRole') }
}
is(try_apply_to('MyClass'), undef, 'role applies cleanly');
is(MyClass->foo, 'role foo class foo', 'method modifier');
is(ExtraClass->foo, 'role foo class foo', 'method modifier with composition');
ok(exception {
my $new_class = Role::Tiny->create_class_with_roles('MyClass', 'BrokenRole');
}, 'exception caught creating class with broken modifier in a role');
done_testing;
|