revise Makefile.PL boilerplate
[gitmo/Role-Tiny.git] / t / role-basic-composition.t
index 93a3541..640dec7 100644 (file)
@@ -1,5 +1,3 @@
-#!/usr/bin/env perl
-
 use lib 'lib', 't/role-basic/lib';
 use MyTests;
 require Role::Tiny;
@@ -146,10 +144,12 @@ $ENV{DEBUG} = 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 Moo::Role;
+               use Role::Tiny;
                sub foo {
                }
                before 'bar', sub {};
@@ -157,14 +157,14 @@ $ENV{DEBUG} = 1;
 
        {
                package Modifier::Role2;
-               use Moo::Role;
+               use Role::Tiny;
                sub bar {
                }
                before 'foo', sub {};
        }
        my $success = eval q{
                package Class;
-               use Moo;
+               use Role::Tiny::With;
                with 'Modifier::Role1', 'Modifier::Role2';
                1;
        };
@@ -201,4 +201,35 @@ $ENV{DEBUG} = 1;
        is $success, 1, 'composed diamantly dependent roles successfully' or diag "Error: $@";
 }
 
+{
+    {
+        package My::Does::Conflict;
+        use Role::Tiny;
+
+        sub method {
+            return __PACKAGE__ . " method";
+        }
+    }
+    {
+        package My::Class::Base;
+
+        sub turbo_charger {
+            return __PACKAGE__ . " turbo charger";
+        }
+        sub method {
+            return __PACKAGE__ . " method";
+        }
+    }
+    my $success = eval q{
+        package My::Class::Child;
+        use base 'My::Class::Base';
+        use Role::Tiny::With;
+        with qw/My::Does::Basic1 My::Does::Conflict/;
+        1;
+    };
+    is $success, 1, 'role conflict resolved by superclass method' or diag "Error: $@";
+    can_ok 'My::Class::Child', 'method';
+    is My::Class::Child->method, 'My::Class::Base method', 'inherited method prevails';
+}
+
 done_testing;