-#!/usr/bin/env perl
-
use lib 'lib', 't/role-basic/lib';
use MyTests;
require Role::Tiny;
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 {};
{
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;
};
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;
+ };
+ 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;