X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F030_roles%2Ffailing%2F021_role_composite_exclusion.t;fp=t%2F030_roles%2Ffailing%2F021_role_composite_exclusion.t;h=4d0a8d30b2d0201ebcd0bf26c97f28bb0508bff5;hb=6719984210754e8d012ae678536f194c35000823;hp=0000000000000000000000000000000000000000;hpb=56a558f97f2da37b37db51a6a8ef7f923e84724e;p=gitmo%2FMouse.git diff --git a/t/030_roles/failing/021_role_composite_exclusion.t b/t/030_roles/failing/021_role_composite_exclusion.t new file mode 100644 index 0000000..4d0a8d3 --- /dev/null +++ b/t/030_roles/failing/021_role_composite_exclusion.t @@ -0,0 +1,109 @@ +#!/usr/bin/perl + +use strict; +use warnings; + +use Test::More tests => 12; +use Test::Exception; + +use Mouse::Meta::Role::Application::RoleSummation; +use Mouse::Meta::Role::Composite; + +{ + package Role::Foo; + use Mouse::Role; + + package Role::Bar; + use Mouse::Role; + + package Role::ExcludesFoo; + use Mouse::Role; + excludes 'Role::Foo'; + + package Role::DoesExcludesFoo; + use Mouse::Role; + with 'Role::ExcludesFoo'; + + package Role::DoesFoo; + use Mouse::Role; + with 'Role::Foo'; +} + +ok(Role::ExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions'); +ok(Role::DoesExcludesFoo->meta->excludes_role('Role::Foo'), '... got the right exclusions'); + +# test simple exclusion +dies_ok { + Mouse::Meta::Role::Application::RoleSummation->new->apply( + Mouse::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::ExcludesFoo->meta, + ] + ) + ); +} '... this fails as expected'; + +# test no conflicts +{ + my $c = Mouse::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::Bar->meta, + ] + ); + isa_ok($c, 'Mouse::Meta::Role::Composite'); + + is($c->name, 'Role::Foo|Role::Bar', '... got the composite role name'); + + lives_ok { + Mouse::Meta::Role::Application::RoleSummation->new->apply($c); + } '... this lives as expected'; +} + +# test no conflicts w/exclusion +{ + my $c = Mouse::Meta::Role::Composite->new( + roles => [ + Role::Bar->meta, + Role::ExcludesFoo->meta, + ] + ); + isa_ok($c, 'Mouse::Meta::Role::Composite'); + + is($c->name, 'Role::Bar|Role::ExcludesFoo', '... got the composite role name'); + + lives_ok { + Mouse::Meta::Role::Application::RoleSummation->new->apply($c); + } '... this lives as expected'; + + is_deeply([$c->get_excluded_roles_list], ['Role::Foo'], '... has excluded roles'); +} + + +# test conflict with an "inherited" exclusion +dies_ok { + Mouse::Meta::Role::Application::RoleSummation->new->apply( + Mouse::Meta::Role::Composite->new( + roles => [ + Role::Foo->meta, + Role::DoesExcludesFoo->meta, + ] + ) + ); + +} '... this fails as expected'; + +# test conflict with an "inherited" exclusion of an "inherited" role +dies_ok { + Mouse::Meta::Role::Application::RoleSummation->new->apply( + Mouse::Meta::Role::Composite->new( + roles => [ + Role::DoesFoo->meta, + Role::DoesExcludesFoo->meta, + ] + ) + ); +} '... this fails as expected'; + +