X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F004_advanced_methods.t;h=84aadb8d0f94e43d177756b5ca3554f326936c87;hb=aa28eb106aaeffc3d29983be5f6b63b9fc254c16;hp=792b353710f289b411f3beeb363e1ed3650a1d5e;hpb=643f2f94ab780ca0c247cd36a88b13cc51d5c0fc;p=gitmo%2FClass-MOP.git diff --git a/t/004_advanced_methods.t b/t/004_advanced_methods.t index 792b353..84aadb8 100644 --- a/t/004_advanced_methods.t +++ b/t/004_advanced_methods.t @@ -1,15 +1,15 @@ use strict; use warnings; -use Test::More tests => 12; -use Test::Exception; +use Test::More; +use Test::Fatal; use Class::MOP; use Class::MOP::Class; =pod -The following class hierarhcy is very contrived +The following class hierarhcy is very contrived and totally horrid (it won't work under C3 even), but it tests a number of aspect of this module. @@ -19,54 +19,54 @@ A more real-world example would be a nice addition :) { package Foo; - - sub BUILD { 'Foo::BUILD' } + + sub BUILD { 'Foo::BUILD' } sub foo { 'Foo::foo' } - + package Bar; our @ISA = ('Foo'); - - sub BUILD { 'Bar::BUILD' } - sub bar { 'Bar::bar' } - + + sub BUILD { 'Bar::BUILD' } + sub bar { 'Bar::bar' } + package Baz; our @ISA = ('Bar'); - + sub baz { 'Baz::baz' } - sub foo { 'Baz::foo' } - + sub foo { 'Baz::foo' } + package Foo::Bar; our @ISA = ('Foo', 'Bar'); - - sub BUILD { 'Foo::Bar::BUILD' } - sub foobar { 'Foo::Bar::foobar' } - + + sub BUILD { 'Foo::Bar::BUILD' } + sub foobar { 'Foo::Bar::foobar' } + package Foo::Bar::Baz; our @ISA = ('Foo', 'Bar', 'Baz'); - - sub BUILD { 'Foo::Bar::Baz::BUILD' } - sub bar { 'Foo::Bar::Baz::bar' } - sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' } + + sub BUILD { 'Foo::Bar::Baz::BUILD' } + sub bar { 'Foo::Bar::Baz::bar' } + sub foobarbaz { 'Foo::Bar::Baz::foobarbaz' } } -ok(!defined(Class::MOP::Class->initialize('Foo')->find_next_method_by_name('BUILD')), +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'), +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(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')->get_all_methods() ], @@ -75,7 +75,7 @@ is_deeply( Class::MOP::Class->initialize('Foo')->get_method('foo'), ], '... got the right list of applicable methods for Foo'); - + is_deeply( [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Bar')->get_all_methods() ], [ @@ -84,11 +84,11 @@ is_deeply( Class::MOP::Class->initialize('Foo')->get_method('foo'), ], '... got the right list of applicable methods for Bar'); - + is_deeply( [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Baz')->get_all_methods() ], - [ + [ Class::MOP::Class->initialize('Bar')->get_method('BUILD'), Class::MOP::Class->initialize('Bar')->get_method('bar'), Class::MOP::Class->initialize('Baz')->get_method('baz'), @@ -106,38 +106,6 @@ is_deeply( ], '... got the right list of applicable methods for Foo::Bar'); -# test compute_all_applicable_methods once for compat -is_deeply( - [ sort { $a->{name} cmp $b->{name} } Class::MOP::Class->initialize('Foo::Bar::Baz')->compute_all_applicable_methods() ], - [ - { - name => 'BUILD', - class => 'Foo::Bar::Baz', - code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD') - }, - { - name => 'bar', - class => 'Foo::Bar::Baz', - code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('bar') - }, - { - name => 'baz', - class => 'Baz', - code => Class::MOP::Class->initialize('Baz')->get_method('baz') - }, - { - name => 'foo', - class => 'Foo', - code => Class::MOP::Class->initialize('Foo')->get_method('foo') - }, - { - name => 'foobarbaz', - class => 'Foo::Bar::Baz', - code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('foobarbaz') - }, - ], - '... got the right list of applicable methods for Foo::Bar::Baz'); - ## find_all_methods_by_name is_deeply( @@ -147,12 +115,12 @@ is_deeply( name => 'BUILD', class => 'Foo::Bar', code => Class::MOP::Class->initialize('Foo::Bar')->get_method('BUILD') - }, + }, { name => 'BUILD', class => 'Foo', code => Class::MOP::Class->initialize('Foo')->get_method('BUILD') - }, + }, { name => 'BUILD', class => 'Bar', @@ -168,16 +136,18 @@ is_deeply( name => 'BUILD', class => 'Foo::Bar::Baz', code => Class::MOP::Class->initialize('Foo::Bar::Baz')->get_method('BUILD') - }, + }, { name => 'BUILD', class => 'Foo', code => Class::MOP::Class->initialize('Foo')->get_method('BUILD') - }, + }, { name => 'BUILD', class => 'Bar', - code => Class::MOP::Class->initialize('Bar')->get_method('BUILD') - }, + code => Class::MOP::Class->initialize('Bar')->get_method('BUILD') + }, ], '... got the right list of BUILD methods for Foo::Bar::Baz'); + +done_testing;