more-method-refactoring
[gitmo/Class-MOP.git] / t / 004_advanced_methods.t
index f3a3d49..360f58d 100644 (file)
@@ -3,7 +3,7 @@
 use strict;
 use warnings;
 
-use Test::More no_plan => 1;
+use Test::More tests => 14;
 use Test::Exception;
 
 BEGIN {
@@ -36,7 +36,6 @@ A more real-world example would be a nice addition :)
     package Baz;
     our @ISA = ('Bar');
     
-    sub BUILD { 'Baz::BUILD' }    
     sub baz { 'Baz::baz' }
     sub foo { 'Baz::foo' }           
     
@@ -54,19 +53,38 @@ A more real-world example would be a nice addition :)
     sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' }    
 }
 
+ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')), 
+   '... Foo::BUILD has not next method');
+
+is(Class::MOP::Class->initialize('Bar')->find_next_method_by_name('BUILD'), 
+   Class::MOP::Class->initialize('Foo')->get_method('BUILD'),     
+   '... Bar::BUILD does have a next method');
+   
+is(Class::MOP::Class->initialize('Baz')->find_next_method_by_name('BUILD'), 
+   Class::MOP::Class->initialize('Bar')->get_method('BUILD'),     
+   '... Baz->BUILD does have a next method');   
+   
+is(Class::MOP::Class->initialize('Foo::Bar')->find_next_method_by_name('BUILD'), 
+   Class::MOP::Class->initialize('Foo')->get_method('BUILD'),     
+   '... Foo::Bar->BUILD does have a next method');   
+   
+is(Class::MOP::Class->initialize('Foo::Bar::Baz')->find_next_method_by_name('BUILD'), 
+   Class::MOP::Class->initialize('Foo')->get_method('BUILD'),     
+   '... Foo::Bar::Baz->BUILD does have a next method');   
+
 is_deeply(
     [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo')->compute_all_applicable_methods() ],
     [
         {
             name  => 'BUILD',
             class => 'Foo',
-            code  => \&Foo::BUILD 
+            code  => Class::MOP::Class->initialize('Foo')->get_method('BUILD') 
         },    
         {
             name  => 'foo',
             class => 'Foo',
-            code  => \&Foo::foo 
-        },       
+            code  => Class::MOP::Class->initialize('Foo')->get_method('foo')
+        },             
     ],
     '... got the right list of applicable methods for Foo');
     
@@ -76,17 +94,17 @@ is_deeply(
         {
             name  => 'BUILD',
             class => 'Bar',
-            code  => \&Bar::BUILD 
+            code  => Class::MOP::Class->initialize('Bar')->get_method('BUILD') 
         },    
         {
             name  => 'bar',
             class => 'Bar',
-            code  => \&Bar::bar  
+            code  => Class::MOP::Class->initialize('Bar')->get_method('bar')
         },
         {
             name  => 'foo',
             class => 'Foo',
-            code  => \&Foo::foo  
+            code  => Class::MOP::Class->initialize('Foo')->get_method('foo')
         },       
     ],
     '... got the right list of applicable methods for Bar');
@@ -94,26 +112,26 @@ is_deeply(
 
 is_deeply(
     [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->compute_all_applicable_methods() ],
-    [
+    [   
         {
             name  => 'BUILD',
-            class => 'Baz',
-            code  => \&Baz::BUILD 
+            class => 'Bar',
+            code  => Class::MOP::Class->initialize('Bar')->get_method('BUILD') 
         },    
         {
             name  => 'bar',
             class => 'Bar',
-            code  => \&Bar::bar  
+            code  => Class::MOP::Class->initialize('Bar')->get_method('bar')   
         },
         {
             name  => 'baz',
             class => 'Baz',
-            code  => \&Baz::baz  
+            code  => Class::MOP::Class->initialize('Baz')->get_method('baz')  
         },        
         {
             name  => 'foo',
             class => 'Baz',
-            code  => \&Baz::foo  
+            code  => Class::MOP::Class->initialize('Baz')->get_method('foo') 
         },       
     ],
     '... got the right list of applicable methods for Baz');
@@ -124,22 +142,22 @@ is_deeply(
         {
             name  => 'BUILD',
             class => 'Foo::Bar',
-            code  => \&Foo::Bar::BUILD 
+            code  => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')  
         },    
         {
             name  => 'bar',
             class => 'Bar',
-            code  => \&Bar::bar  
+            code  => Class::MOP::Class->initialize('Bar')->get_method('bar')   
         },
         {
             name  => 'foo',
             class => 'Foo',
-            code  => \&Foo::foo  
+            code  => Class::MOP::Class->initialize('Foo')->get_method('foo') 
         },       
         {
             name  => 'foobar',
             class => 'Foo::Bar',
-            code  => \&Foo::Bar::foobar  
+            code  => Class::MOP::Class->initialize('Foo::Bar')->get_method('foobar')   
         },        
     ],
     '... got the right list of applicable methods for Foo::Bar');
@@ -150,27 +168,27 @@ is_deeply(
         {
             name  => 'BUILD',
             class => 'Foo::Bar::Baz',
-            code  => \&Foo::Bar::Baz::BUILD 
+            code  => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
         },    
         {
             name  => 'bar',
             class => 'Foo::Bar::Baz',
-            code  => \&Foo::Bar::Baz::bar  
+            code  => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar')
         },
         {
             name  => 'baz',
             class => 'Baz',
-            code  => \&Baz::baz  
+            code  => Class::MOP::Class->initialize('Baz')->get_method('baz')
         },        
         {
             name  => 'foo',
             class => 'Foo',
-            code  => \&Foo::foo  
+            code  => Class::MOP::Class->initialize('Foo')->get_method('foo')
         },   
         {
             name  => 'foobarbaz',
             class => 'Foo::Bar::Baz',
-            code  => \&Foo::Bar::Baz::foobarbaz  
+            code  => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz')
         },            
     ],
     '... got the right list of applicable methods for Foo::Bar::Baz');
@@ -183,17 +201,17 @@ is_deeply(
         {
             name  => 'BUILD',
             class => 'Foo::Bar',
-            code  => \&Foo::Bar::BUILD 
+            code  => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD')
         },    
         {
             name  => 'BUILD',
             class => 'Foo',
-            code  => \&Foo::BUILD 
+            code  => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
         },    
         {
             name  => 'BUILD',
             class => 'Bar',
-            code  => \&Bar::BUILD 
+            code  => Class::MOP::Class->initialize('Bar')->get_method('BUILD')
         }
     ],
     '... got the right list of BUILD methods for Foo::Bar');
@@ -204,22 +222,17 @@ is_deeply(
         {
             name  => 'BUILD',
             class => 'Foo::Bar::Baz',
-            code  => \&Foo::Bar::Baz::BUILD 
+            code  => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD')
         },    
         {
             name  => 'BUILD',
             class => 'Foo',
-            code  => \&Foo::BUILD 
+            code  => Class::MOP::Class->initialize('Foo')->get_method('BUILD')
         },    
         {
             name  => 'BUILD',
             class => 'Bar',
-            code  => \&Bar::BUILD 
-        },    
-        {
-            name  => 'BUILD',
-            class => 'Baz',
-            code  => \&Baz::BUILD 
-        },        
+            code  => Class::MOP::Class->initialize('Bar')->get_method('BUILD') 
+        },            
     ],
     '... got the right list of BUILD methods for Foo::Bar::Baz');
\ No newline at end of file