Cleanup failing tests
[gitmo/Mouse.git] / Moose-t-failing / 030_roles / 006_role_exclusion.t
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 (file)
index 0000000..32eed57
--- /dev/null
@@ -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;