X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Froles%2Frole_composition_req_methods.t;fp=t%2Froles%2Frole_composition_req_methods.t;h=f4318066a63c780bc6b74e23ba50fce33ec671a4;hb=829433c47061dd70a608bfcd940113c4172b6950;hp=0000000000000000000000000000000000000000;hpb=51c788414482c813eb48fb417b08ba03134ff1a6;p=gitmo%2FMoose.git diff --git a/t/roles/role_composition_req_methods.t b/t/roles/role_composition_req_methods.t new file mode 100644 index 0000000..f431806 --- /dev/null +++ b/t/roles/role_composition_req_methods.t @@ -0,0 +1,125 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More; +use Test::Fatal; + +use Moose::Meta::Role::Application::RoleSummation; +use Moose::Meta::Role::Composite; + +{ + package Role::Foo; + use Moose::Role; + requires 'foo'; + + package Role::Bar; + use Moose::Role; + requires 'bar'; + + package Role::ProvidesFoo; + use Moose::Role; + sub foo { 'Role::ProvidesFoo::foo' } + + package Role::ProvidesBar; + use Moose::Role; + sub bar { 'Role::ProvidesBar::bar' } +} + +# test simple requirement +{ + my $c = Moose::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::Bar->meta, + ] + ); + isa_ok($c, 'Moose::Meta::Role::Composite'); + + is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name'); + + is( exception { + Moose::Meta::Role::Application::RoleSummation->new->apply($c); + }, undef, '... this succeeds as expected' ); + + is_deeply( + [ sort $c->get_required_method_list ], + [ 'bar', 'foo' ], + '... got the right list of required methods' + ); +} + +# test requirement satisfied +{ + my $c = Moose::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::ProvidesFoo->meta, + ] + ); + isa_ok($c, 'Moose::Meta::Role::Composite'); + + is($c->name, 'Role::Foo|Role::ProvidesFoo', '... got the composite role name'); + + is( exception { + Moose::Meta::Role::Application::RoleSummation->new->apply($c); + }, undef, '... this succeeds as expected' ); + + is_deeply( + [ sort $c->get_required_method_list ], + [], + '... got the right list of required methods' + ); +} + +# test requirement satisfied +{ + my $c = Moose::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::ProvidesFoo->meta, + Role::Bar->meta, + ] + ); + isa_ok($c, 'Moose::Meta::Role::Composite'); + + is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::Bar', '... got the composite role name'); + + is( exception { + Moose::Meta::Role::Application::RoleSummation->new->apply($c); + }, undef, '... this succeeds as expected' ); + + is_deeply( + [ sort $c->get_required_method_list ], + [ 'bar' ], + '... got the right list of required methods' + ); +} + +# test requirement satisfied +{ + my $c = Moose::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::ProvidesFoo->meta, + Role::ProvidesBar->meta, + Role::Bar->meta, + ] + ); + isa_ok($c, 'Moose::Meta::Role::Composite'); + + is($c->name, 'Role::Foo|Role::ProvidesFoo|Role::ProvidesBar|Role::Bar', '... got the composite role name'); + + is( exception { + Moose::Meta::Role::Application::RoleSummation->new->apply($c); + }, undef, '... this succeeds as expected' ); + + is_deeply( + [ sort $c->get_required_method_list ], + [ ], + '... got the right list of required methods' + ); +} + +done_testing;