tests shouldn't be executable
[gitmo/Role-Tiny.git] / t / role-basic-composition.t
index 33c8ac2..a70fe4c 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env perl
-
 use lib 'lib', 't/role-basic/lib';
 use MyTests;
 require Role::Tiny;
@@ -125,25 +123,82 @@ $ENV{DEBUG} = 1;
 
 {
        {
-               package Role1;
+               package Method::Role1;
                use Role::Tiny;
                sub method1 { }
                requires 'method2';
        }
 
        {
-               package Role2;
+               package Method::Role2;
                use Role::Tiny;
                sub method2 { }
                requires 'method1';
        }
-       my $success = eval <<'END';
+       my $success = eval q{
                package Class;
                use Role::Tiny::With;
-               with 'Role1', 'Role2';
+               with 'Method::Role1', 'Method::Role2';
+               1;
+       };
+       is $success, 1, 'composed mutually dependent methods successfully' or diag "Error: $@";
+}
+
+SKIP: {
+  skip "Class::Method::Modifiers not installed or too old", 1
+    unless eval "use Class::Method::Modifiers 1.05; 1";
+       {
+               package Modifier::Role1;
+               use Role::Tiny;
+               sub foo {
+               }
+               before 'bar', sub {};
+       }
+
+       {
+               package Modifier::Role2;
+               use Role::Tiny;
+               sub bar {
+               }
+               before 'foo', sub {};
+       }
+       my $success = eval q{
+               package Class;
+               use Role::Tiny::With;
+               with 'Modifier::Role1', 'Modifier::Role2';
+               1;
+       };
+       is $success, 1, 'composed mutually dependent modifiers successfully' or diag "Error: $@";
+}
+
+{
+       {
+               package Base::Role;
+               use Role::Tiny;
+               requires qw/method1 method2/;
+       }
+
+       {
+               package Sub::Role1;
+               use Role::Tiny;
+               with 'Base::Role';
+               sub method1 {}
+       }
+
+       {
+               package Sub::Role2;
+               use Role::Tiny;
+               with 'Base::Role';
+               sub method2 {}
+       }
+
+       my $success = eval q{
+               package Diamant::Class;
+               use Role::Tiny::With;
+               with qw/Sub::Role1 Sub::Role2/;
                1;
-END
-       is $success, 1, 'composed mutually dependent roles successfully' or diag "Error: $@";
+       };
+       is $success, 1, 'composed diamantly dependent roles successfully' or diag "Error: $@";
 }
 
 done_testing;