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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121
|
#!perl
use strict;
use warnings;
use Test::More;
use Test::Mouse qw(does_ok);
BEGIN{ $SIG{__WARN__} = \&Carp::confess }
BEGIN {
package MyMouseX::Foo::Method;
use Mouse::Role;
sub foo_method {}
package MyMouseX::Foo::Class;
use Mouse::Role;
sub foo_class {}
package MyMouseX::Bar::Method;
use Mouse::Role;
sub bar {}
package MyMouseX::Bar::Class;
use Mouse::Role;
sub bar_class {}
}
BEGIN {
package MyMouseX::Foo;
use Mouse::Exporter;
use Mouse::Util::MetaRole;
Mouse::Exporter->setup_import_methods(
also => 'Mouse',
);
sub init_meta {
my(undef, %options) = @_;
my $meta = Mouse->init_meta(%options);
Mouse::Util::MetaRole::apply_metaroles(
for => $options{for_class},
class_metaroles => {
class => ['MyMouseX::Foo::Class'],
method => ['MyMouseX::Foo::Method'],
},
);
}
$INC{'MyMouseX/Foo.pm'} = __FILE__;
package MyMouseX::Bar;
use Mouse::Exporter;
use Mouse::Util::MetaRole;
Mouse::Exporter->setup_import_methods(
also => 'Mouse',
);
sub init_meta {
my(undef, %options) = @_;
my $meta = Mouse->init_meta(%options);
Mouse::Util::MetaRole::apply_metaroles(
for => $options{for_class},
class_metaroles => {
class => ['MyMouseX::Bar::Class'],
method => ['MyMouseX::Bar::Method'],
},
);
}
$INC{'MyMouseX/Bar.pm'} = __FILE__;
}
{
package ClassA;
use MyMouseX::Foo;
sub a {}
package ClassB;
use MyMouseX::Bar;
sub b {}
package ClassXAFoo;
use MyMouseX::Foo;
extends qw(ClassA);
sub xa {}
package ClassXABar;
use MyMouseX::Bar;
extends qw(ClassA);
sub xa {}
}
does_ok(ClassA->meta, 'MyMouseX::Foo::Class');
does_ok(ClassA->meta->get_method('a'), 'MyMouseX::Foo::Method');
does_ok(ClassB->meta, 'MyMouseX::Bar::Class');
does_ok(ClassB->meta->get_method('b'), 'MyMouseX::Bar::Method');
does_ok(ClassXAFoo->meta, 'MyMouseX::Foo::Class');
does_ok(ClassXAFoo->meta->get_method('xa'), 'MyMouseX::Foo::Method');
does_ok(ClassXABar->meta, 'MyMouseX::Foo::Class');
does_ok(ClassXABar->meta->get_method('xa'), 'MyMouseX::Foo::Method');
does_ok(ClassXABar->meta, 'MyMouseX::Bar::Class');
does_ok(ClassXABar->meta->get_method('xa'), 'MyMouseX::Bar::Method');
done_testing;
|