%PDF- %PDF-
Direktori : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/t/ |
Current File : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/t/compose-conflicts.t |
use Moo::_strictures; use Test::More; use Test::Fatal; BEGIN { package MethodRole; use Moo::Role; sub method { __PACKAGE__ } } BEGIN { package MethodRole2; use Moo::Role; sub method { __PACKAGE__ } } BEGIN { package MethodClassOver; use Moo; sub method { __PACKAGE__ } with 'MethodRole'; } BEGIN { is +MethodClassOver->new->method, 'MethodClassOver', 'class methods override role methods'; } BEGIN { package MethodRole2; use Moo::Role; has attr => (is => 'rw', coerce => sub { __PACKAGE__ } ); } BEGIN { package MethodClassAndRoleAndRole; use Moo; with 'MethodRole'; with 'MethodRole2'; } BEGIN { my $o = is +MethodClassAndRoleAndRole->new->method, 'MethodRole', 'composed methods override later composed methods'; } BEGIN { package MethodClassAndRoles; use Moo; ::like ::exception { with 'MethodRole', 'MethodRole2'; }, qr/^Due to a method name conflict between roles/, 'composing roles with conflicting methods fails'; } BEGIN { package MethodRoleOver; use Moo::Role; sub method { __PACKAGE__ } with 'MethodRole'; } BEGIN { package MethodClassAndRoleOver; use Moo; with 'MethodRoleOver'; } BEGIN { is +MethodClassAndRoleOver->new->method, 'MethodRoleOver', 'composing role methods override composed role methods'; } BEGIN { package MethodClassOverAndRoleOver; use Moo; sub method { __PACKAGE__ } with 'MethodRoleOver'; } BEGIN { is +MethodClassOverAndRoleOver->new->method, 'MethodClassOverAndRoleOver', 'class methods override role and role composed methods'; } BEGIN { package AttrRole; use Moo::Role; has attr => (is => 'rw', coerce => sub { __PACKAGE__ } ); } BEGIN { package AttrClassOver; use Moo; has attr => (is => 'rw', coerce => sub { __PACKAGE__ }); with 'AttrRole'; } BEGIN { my $o = AttrClassOver->new(attr => 1); is $o->attr, 'AttrClassOver', 'class attributes override role attributes in constructor'; $o->attr(1); is $o->attr, 'AttrClassOver', 'class attributes override role attributes in accessors'; } BEGIN { package AttrRole2; use Moo::Role; has attr => (is => 'rw', coerce => sub { __PACKAGE__ } ); } BEGIN { package AttrClassAndRoleAndRole; use Moo; with 'AttrRole'; with 'AttrRole2'; } BEGIN { my $o = AttrClassAndRoleAndRole->new(attr => 1); is $o->attr, 'AttrRole', 'composed attributes override later composed attributes in constructor'; $o->attr(1); is $o->attr, 'AttrRole', 'composed attributes override later composed attributes in accessors'; } BEGIN { package AttrClassAndRoles; use Moo; ::like ::exception { with 'AttrRole', 'AttrRole2'; }, qr/^Due to a method name conflict between roles/, 'composing roles with conflicting attributes fails'; } BEGIN { package AttrRoleOver; use Moo::Role; has attr => (is => 'rw', coerce => sub { __PACKAGE__ }); with 'AttrRole'; } BEGIN { package AttrClassAndRoleOver; use Moo; with 'AttrRoleOver'; } BEGIN { my $o = AttrClassAndRoleOver->new(attr => 1); is $o->attr, 'AttrRoleOver', 'composing role attributes override composed role attributes in constructor'; $o->attr(1); is $o->attr, 'AttrRoleOver', 'composing role attributes override composed role attributes in accessors'; } BEGIN { package AttrClassOverAndRoleOver; use Moo; has attr => (is => 'rw', coerce => sub { __PACKAGE__ }); with 'AttrRoleOver'; } BEGIN { my $o = AttrClassOverAndRoleOver->new(attr => 1); is $o->attr, 'AttrClassOverAndRoleOver', 'class attributes override role and role composed attributes in constructor'; $o->attr(1); is $o->attr, 'AttrClassOverAndRoleOver', 'class attributes override role and role composed attributes in accessors'; } done_testing;