AHHHHHHHHHHHH
[gitmo/Moose.git] / t / 042_apply_role.t
index 21bcd8b..fae8593 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More tests => 28;
+use Test::More tests => 39;
 use Test::Exception;
 
 BEGIN {  
@@ -12,8 +12,6 @@ BEGIN {
 
 {
     package FooRole;
-    use strict;
-    use warnings;
     use Moose::Role;
     
     has 'bar' => (is => 'rw', isa => 'FooClass');
@@ -30,16 +28,12 @@ BEGIN {
     }; 
 
     package BarClass;
-    use strict;
-    use warnings;
     use Moose;
     
     sub boo { 'BarClass::boo' }
     sub foo { 'BarClass::foo' }  # << the role overrides this ...  
     
     package FooClass;
-    use strict;
-    use warnings;
     use Moose;
     
     extends 'BarClass';
@@ -53,6 +47,21 @@ BEGIN {
 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);    
 }
@@ -61,9 +70,17 @@ foreach my $attr_name (qw(bar baz)) {
     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');