X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Moose-t-failing%2F030_roles%2F021_role_composite_exclusion.t;fp=Moose-t-failing%2F030_roles%2F021_role_composite_exclusion.t;h=e58faf35926a6d01f464c2ec0f781900b9ff2b45;hb=c47cf41554416ee1828eab17d31342a53aaa0839;hp=0000000000000000000000000000000000000000;hpb=9864f0e4ba233c5f30ad6dc7c484ced43d883d27;p=gitmo%2FMouse.git diff --git a/Moose-t-failing/030_roles/021_role_composite_exclusion.t b/Moose-t-failing/030_roles/021_role_composite_exclusion.t new file mode 100644 index 0000000..e58faf3 --- /dev/null +++ b/Moose-t-failing/030_roles/021_role_composite_exclusion.t @@ -0,0 +1,113 @@ +#!/usr/bin/perl +# This is automatically generated by author/import-moose-test.pl. +# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!! +use t::lib::MooseCompat; + +use strict; +use warnings; + +use Test::More; +$TODO = q{Mouse is not yet completed}; +use Test::Exception; + +use Mouse::Meta::Role::Application; +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->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->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->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->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->new->apply( + Mouse::Meta::Role::Composite->new( + roles => [ + Role::DoesFoo->meta, + Role::DoesExcludesFoo->meta, + ] + ) + ); +} '... this fails as expected'; + +done_testing;