getting this up to speed with Class::MOP 0.35
[gitmo/Moose.git] / t / 041_role.t
index 8992173..875db47 100644 (file)
@@ -3,18 +3,25 @@
 use strict;
 use warnings;
 
-use Test::More tests => 16;
+use Test::More tests => 35;
 use Test::Exception;
 
 BEGIN {  
     use_ok('Moose::Role');               
 }
 
+=pod
+
+NOTE:
+
+Should we be testing here that the has & override
+are injecting their methods correctly? In other 
+words, should 'has_method' return true for them?
+
+=cut
+
 {
     package FooRole;
-    
-    use strict;
-    use warnings;
     use Moose::Role;
     
     our $VERSION = '0.01';
@@ -23,14 +30,26 @@ BEGIN {
     has 'baz' => (is => 'ro');    
     
     sub foo { 'FooRole::foo' }
+    sub boo { 'FooRole::boo' }    
     
     before 'boo' => sub { "FooRole::boo:before" };
+    
+    after  'boo' => sub { "FooRole::boo:after1"  }; 
+    after  'boo' => sub { "FooRole::boo:after2"  };        
+    
+    around 'boo' => sub { "FooRole::boo:around" };  
+    
+    override 'bling' => sub { "FooRole::bling:override" };   
+    override 'fling' => sub { "FooRole::fling:override" };  
+    
+    ::dies_ok { extends() } '... extends() is not supported';
+    ::dies_ok { augment() } '... augment() is not supported';    
+    ::dies_ok { inner()   } '... inner() is not supported';        
 }
 
 my $foo_role = FooRole->meta;
 isa_ok($foo_role, 'Moose::Meta::Role');
-
-isa_ok($foo_role->role_meta, 'Class::MOP::Class');
+isa_ok($foo_role, 'Class::MOP::Module');
 
 is($foo_role->name, 'FooRole', '... got the right name of FooRole');
 is($foo_role->version, '0.01', '... got the right version of FooRole');
@@ -38,11 +57,18 @@ is($foo_role->version, '0.01', '... got the right version of FooRole');
 # methods ...
 
 ok($foo_role->has_method('foo'), '... FooRole has the foo method');
-is($foo_role->get_method('foo'), \&FooRole::foo, '... FooRole got the foo method');
+is($foo_role->get_method('foo')->body, \&FooRole::foo, '... FooRole got the foo method');
+
+isa_ok($foo_role->get_method('foo'), 'Moose::Meta::Role::Method');
+
+ok($foo_role->has_method('boo'), '... FooRole has the boo method');
+is($foo_role->get_method('boo')->body, \&FooRole::boo, '... FooRole got the boo method');
+
+isa_ok($foo_role->get_method('boo'), 'Moose::Meta::Role::Method');
 
 is_deeply(
-    [ $foo_role->get_method_list() ],
-    [ 'foo' ],
+    [ sort $foo_role->get_method_list() ],
+    [ 'boo', 'foo' ],
     '... got the right method list');
     
 # attributes ...
@@ -68,8 +94,8 @@ is_deeply(
 
 # method modifiers
 
-ok($foo_role->has_method_modifier('before' => 'boo'), '... now we have a boo:before modifier');
-is($foo_role->get_method_modifier('before' => 'boo')->(), 
+ok($foo_role->has_before_method_modifiers('boo'), '... now we have a boo:before modifier');
+is(($foo_role->get_before_method_modifiers('boo'))[0]->(), 
     "FooRole::boo:before", 
     '... got the right method back');
 
@@ -78,3 +104,43 @@ is_deeply(
     [ 'boo' ],
     '... got the right list of before method modifiers');
 
+ok($foo_role->has_after_method_modifiers('boo'), '... now we have a boo:after modifier');
+is(($foo_role->get_after_method_modifiers('boo'))[0]->(), 
+    "FooRole::boo:after1", 
+    '... got the right method back');
+is(($foo_role->get_after_method_modifiers('boo'))[1]->(), 
+    "FooRole::boo:after2", 
+    '... got the right method back');    
+
+is_deeply(
+    [ $foo_role->get_method_modifier_list('after') ],
+    [ 'boo' ],
+    '... got the right list of after method modifiers');
+    
+ok($foo_role->has_around_method_modifiers('boo'), '... now we have a boo:around modifier');
+is(($foo_role->get_around_method_modifiers('boo'))[0]->(), 
+    "FooRole::boo:around", 
+    '... got the right method back');
+
+is_deeply(
+    [ $foo_role->get_method_modifier_list('around') ],
+    [ 'boo' ],
+    '... got the right list of around method modifiers');
+
+## overrides
+
+ok($foo_role->has_override_method_modifier('bling'), '... now we have a bling:override modifier');
+is($foo_role->get_override_method_modifier('bling')->(), 
+    "FooRole::bling:override", 
+    '... got the right method back');
+
+ok($foo_role->has_override_method_modifier('fling'), '... now we have a fling:override modifier');
+is($foo_role->get_override_method_modifier('fling')->(), 
+    "FooRole::fling:override", 
+    '... got the right method back');
+
+is_deeply(
+    [ sort $foo_role->get_method_modifier_list('override') ],
+    [ 'bling', 'fling' ],
+    '... got the right list of override method modifiers');
+