tests for _load_module
[gitmo/Role-Tiny.git] / t / role-basic-bugs.t
index 3819c44..c332ada 100644 (file)
@@ -1,28 +1,26 @@
-#!/usr/bin/env perl
-
-use lib 'lib', 't/role-basic/lib';
+use lib 'lib', 't/role-basic/lib', 't/lib';
 use MyTests;
 
 # multiple roles with the same role
 {
     package RoleC;
-    use Role::Tiny::Restricted;
+    use Role::Tiny;
     sub baz { 'baz' }
 
     package RoleB;
-    use Role::Tiny::Restricted;
+    use Role::Tiny;
     with 'RoleC';
     sub bar { 'bar' }
 
     package RoleA;
-    use Role::Tiny::Restricted;
+    use Role::Tiny;
     with 'RoleC';
     sub foo { 'foo' }
 
     package Foo;
     use strict;
     use warnings;
-    use Role::Tiny::Restricted 'with';
+    use Role::Tiny 'with';
     ::is( ::exception {
         with 'RoleA', 'RoleB';
     }, undef, 'Composing multiple roles which use the same role should not have conflicts' );
@@ -41,13 +39,42 @@ use MyTests;
     local *UNIVERSAL::can = sub { 1 };
     eval <<'    END';
     package Can::Can;
-    use Role::Tiny::Restricted 'with';
+    use Role::Tiny 'with';
     with 'A::NonExistent::Role';
     END
+}
+
+{
     my $error = $@ || '';
     like $error, qr{^Can't locate A/NonExistent/Role.pm},
         'If ->can always returns true, we should still not think we loaded the role'
             or diag "Error found: $error";
 }
 
+{
+    package Role1;
+    use Role::Tiny;
+
+    package Role2;
+    use Role::Tiny;
+
+    package Frew;
+    use strict;
+    use warnings;
+    sub new { bless {} => shift }
+
+    my $object = Frew->new;
+
+    ::ok(!Role::Tiny::does_role($object, 'Role1'), 'no Role1 yet');
+    ::ok(!Role::Tiny::does_role($object, 'Role2'), 'no Role2 yet');
+
+    Role::Tiny->apply_roles_to_object($object, 'Role1');
+    ::ok(Role::Tiny::does_role($object, "Role1"), 'Role1 consumed');
+    ::ok(!Role::Tiny::does_role($object, 'Role2'), 'no Role2 yet');
+    Role::Tiny->apply_roles_to_object($object, 'Role2');
+    ::ok(Role::Tiny::does_role($object, "Role1"), 'Role1 consumed');
+    ::ok(Role::Tiny::does_role($object, 'Role2'), 'Role2 consumed');
+}
+
+can_ok(Role::Tiny->create_class_with_roles(qw(Bar Baz))->new, qw(bar baz));
 done_testing;