X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=Moose-t-failing%2F030_roles%2F006_role_exclusion.t;fp=Moose-t-failing%2F030_roles%2F006_role_exclusion.t;h=32eed57e146b6afb1a357253ff6b75f8e8ec06a6;hb=c47cf41554416ee1828eab17d31342a53aaa0839;hp=0000000000000000000000000000000000000000;hpb=9864f0e4ba233c5f30ad6dc7c484ced43d883d27;p=gitmo%2FMouse.git diff --git a/Moose-t-failing/030_roles/006_role_exclusion.t b/Moose-t-failing/030_roles/006_role_exclusion.t new file mode 100644 index 0000000..32eed57 --- /dev/null +++ b/Moose-t-failing/030_roles/006_role_exclusion.t @@ -0,0 +1,128 @@ +#!/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; + +=pod + +The idea and examples for this feature are taken +from the Fortress spec. + +http://research.sun.com/projects/plrg/fortress0903.pdf + +trait OrganicMolecule extends Molecule + excludes { InorganicMolecule } +end +trait InorganicMolecule extends Molecule end + +=cut + +{ + package Molecule; + use Mouse::Role; + + package Molecule::Organic; + use Mouse::Role; + + with 'Molecule'; + excludes 'Molecule::Inorganic'; + + package Molecule::Inorganic; + use Mouse::Role; + + with 'Molecule'; +} + +ok(Molecule::Organic->meta->excludes_role('Molecule::Inorganic'), '... Molecule::Organic exludes Molecule::Inorganic'); +is_deeply( + [ Molecule::Organic->meta->get_excluded_roles_list() ], + [ 'Molecule::Inorganic' ], + '... Molecule::Organic exludes Molecule::Inorganic'); + +=pod + +Check some basic conflicts when combining +the roles into the same class + +=cut + +{ + package My::Test1; + use Mouse; + + ::lives_ok { + with 'Molecule::Organic'; + } '... adding the role (w/ excluded roles) okay'; + + package My::Test2; + use Mouse; + + ::throws_ok { + with 'Molecule::Organic', 'Molecule::Inorganic'; + } qr/Conflict detected: Role Molecule::Organic excludes role 'Molecule::Inorganic'/, + '... adding the role w/ excluded role conflict dies okay'; + + package My::Test3; + use Mouse; + + ::lives_ok { + with 'Molecule::Organic'; + } '... adding the role (w/ excluded roles) okay'; + + ::throws_ok { + with 'Molecule::Inorganic'; + } qr/Conflict detected: My::Test3 excludes role 'Molecule::Inorganic'/, + '... adding the role w/ excluded role conflict dies okay'; +} + +ok(My::Test1->does('Molecule::Organic'), '... My::Test1 does Molecule::Organic'); +ok(My::Test1->does('Molecule'), '... My::Test1 does Molecule'); +ok(My::Test1->meta->excludes_role('Molecule::Inorganic'), '... My::Test1 excludes Molecule::Organic'); + +ok(!My::Test2->does('Molecule::Organic'), '... ! My::Test2 does Molecule::Organic'); +ok(!My::Test2->does('Molecule::Inorganic'), '... ! My::Test2 does Molecule::Inorganic'); + +ok(My::Test3->does('Molecule::Organic'), '... My::Test3 does Molecule::Organic'); +ok(My::Test3->does('Molecule'), '... My::Test1 does Molecule'); +ok(My::Test3->meta->excludes_role('Molecule::Inorganic'), '... My::Test3 excludes Molecule::Organic'); +ok(!My::Test3->does('Molecule::Inorganic'), '... ! My::Test3 does Molecule::Inorganic'); + +=pod + +Check some basic conflicts when combining +the roles into the a superclass + +=cut + +{ + package Methane; + use Mouse; + + with 'Molecule::Organic'; + + package My::Test4; + use Mouse; + + extends 'Methane'; + + ::throws_ok { + with 'Molecule::Inorganic'; + } qr/Conflict detected: My::Test4 excludes role \'Molecule::Inorganic\'/, + '... cannot add exculded role into class which extends Methane'; +} + +ok(Methane->does('Molecule::Organic'), '... Methane does Molecule::Organic'); +ok(My::Test4->isa('Methane'), '... My::Test4 isa Methane'); +ok(My::Test4->does('Molecule::Organic'), '... My::Test4 does Molecule::Organic'); +ok(My::Test4->meta->does_role('Molecule::Organic'), '... My::Test4 meat does_role Molecule::Organic'); +ok(My::Test4->meta->excludes_role('Molecule::Inorganic'), '... My::Test4 meta excludes Molecule::Organic'); +ok(!My::Test4->does('Molecule::Inorganic'), '... My::Test4 does Molecule::Inorganic'); + +done_testing;