use strict;
use warnings;
-use Test::More tests => 28;
+use Test::More tests => 39;
use Test::Exception;
BEGIN {
{
package FooRole;
- use strict;
- use warnings;
use Moose::Role;
has 'bar' => (is => 'rw', isa => 'FooClass');
'FooRole::blau -> ' . $c->();
};
+}{
package BarClass;
- use strict;
- use warnings;
use Moose;
sub boo { 'BarClass::boo' }
sub foo { 'BarClass::foo' } # << the role overrides this ...
+
+ __PACKAGE__->meta->make_immutable(debug => 0);
+}{
package FooClass;
- use strict;
- use warnings;
use Moose;
extends 'BarClass';
sub blau { 'FooClass::blau' }
sub goo { 'FooClass::goo' } # << overrides the one from the role ...
+
+ __PACKAGE__->meta->make_immutable(debug => 0);
}
my $foo_class_meta = FooClass->meta;
isa_ok($foo_class_meta, 'Moose::Meta::Class');
+dies_ok {
+ $foo_class_meta->does_role()
+} '... does_role requires a role name';
+
+dies_ok {
+ $foo_class_meta->apply_role()
+} '... apply_role requires a role';
+
+dies_ok {
+ $foo_class_meta->apply_role(bless({} => 'Fail'))
+} '... apply_role requires a role';
+
+ok($foo_class_meta->does_role('FooRole'), '... the FooClass->meta does_role FooRole');
+ok(!$foo_class_meta->does_role('OtherRole'), '... the FooClass->meta !does_role OtherRole');
+
foreach my $method_name (qw(bar baz foo boo blau goo)) {
ok($foo_class_meta->has_method($method_name), '... FooClass has the method ' . $method_name);
}
ok($foo_class_meta->has_attribute($attr_name), '... FooClass has the attribute ' . $attr_name);
}
+can_ok('FooClass', 'does');
+ok(FooClass->does('FooRole'), '... the FooClass does FooRole');
+ok(!FooClass->does('OtherRole'), '... the FooClass does not do OtherRole');
+
my $foo = FooClass->new();
isa_ok($foo, 'FooClass');
+can_ok($foo, 'does');
+ok($foo->does('FooRole'), '... an instance of FooClass does FooRole');
+ok(!$foo->does('OtherRole'), '... and instance of FooClass does not do OtherRole');
+
can_ok($foo, 'bar');
can_ok($foo, 'baz');
can_ok($foo, 'foo');