6 use Test::More tests => 24;
11 use_ok('Moose::Role');
16 The idea and examples for this feature are taken
17 from the Fortress spec.
19 http://research.sun.com/projects/plrg/fortress0903.pdf
21 trait OrganicMolecule extends Molecule
22 excludes { InorganicMolecule }
24 trait InorganicMolecule extends Molecule end
34 package Molecule::Organic;
40 excludes 'Molecule::Inorganic';
42 package Molecule::Inorganic;
50 ok(Molecule::Organic->meta->excludes_role('Molecule::Inorganic'), '... Molecule::Organic exludes Molecule::Inorganic');
52 [ Molecule::Organic->meta->get_excluded_roles_list() ],
53 [ 'Molecule::Inorganic' ],
54 '... Molecule::Organic exludes Molecule::Inorganic');
58 Check some basic conflicts when combining
59 the roles into the same class
70 with 'Molecule::Organic';
71 } '... adding the role (w/ excluded roles) okay';
79 with 'Molecule::Organic', 'Molecule::Inorganic';
80 } qr/Conflict detected: Class::MOP::Class::__ANON__::SERIAL::1 excludes role \'Molecule::Inorganic\'/,
81 '... adding the role w/ excluded role conflict dies okay';
89 with 'Molecule::Organic';
90 } '... adding the role (w/ excluded roles) okay';
93 with 'Molecule::Inorganic';
94 } qr/Conflict detected: My::Test3 excludes role 'Molecule::Inorganic'/,
95 '... adding the role w/ excluded role conflict dies okay';
98 ok(My::Test1->does('Molecule::Organic'), '... My::Test1 does Molecule::Organic');
99 ok(My::Test1->does('Molecule'), '... My::Test1 does Molecule');
100 ok(My::Test1->meta->excludes_role('Molecule::Inorganic'), '... My::Test1 excludes Molecule::Organic');
102 ok(!My::Test2->does('Molecule::Organic'), '... ! My::Test2 does Molecule::Organic');
103 ok(!My::Test2->does('Molecule::Inorganic'), '... ! My::Test2 does Molecule::Inorganic');
105 ok(My::Test3->does('Molecule::Organic'), '... My::Test3 does Molecule::Organic');
106 ok(My::Test3->does('Molecule'), '... My::Test1 does Molecule');
107 ok(My::Test3->meta->excludes_role('Molecule::Inorganic'), '... My::Test3 excludes Molecule::Organic');
108 ok(!My::Test3->does('Molecule::Inorganic'), '... ! My::Test3 does Molecule::Inorganic');
112 Check some basic conflicts when combining
113 the roles into the a superclass
123 with 'Molecule::Organic';
133 with 'Molecule::Inorganic';
134 } qr/Conflict detected: My::Test4 excludes role \'Molecule::Inorganic\'/,
135 '... cannot add exculded role into class which extends Methane';
138 ok(Methane->does('Molecule::Organic'), '... Methane does Molecule::Organic');
139 ok(My::Test4->isa('Methane'), '... My::Test4 isa Methane');
140 ok(My::Test4->does('Molecule::Organic'), '... My::Test4 does Molecule::Organic');
141 ok(My::Test4->meta->does_role('Molecule::Organic'), '... My::Test4 meat does_role Molecule::Organic');
142 ok(My::Test4->meta->excludes_role('Molecule::Inorganic'), '... My::Test4 meta excludes Molecule::Organic');
143 ok(!My::Test4->does('Molecule::Inorganic'), '... My::Test4 does Molecule::Inorganic');