X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=xt%2Fmoo-does-moose-role.t;h=8811bfddb1c5a16044f0078f1bd1c750f7e3a34f;hb=c6bf11475354f876b3abf4cf3c67aeb1b85b9119;hp=38472870cebe70d5645f34082f619b0c1bdc4576;hpb=7887ffd0e1ad2fb8ce47acf35c23cdb14d47b151;p=gitmo%2FMoo.git diff --git a/xt/moo-does-moose-role.t b/xt/moo-does-moose-role.t index 3847287..8811bfd 100644 --- a/xt/moo-does-moose-role.t +++ b/xt/moo-does-moose-role.t @@ -1,5 +1,6 @@ use strictures 1; use Test::More; +use Test::Fatal; BEGIN { package Ker; @@ -175,6 +176,29 @@ BEGIN { extends 'Plank'; } +BEGIN { + package Plonk; + use Moo; + has kk => (is => 'rw', moosify => [sub { + $_[0]->{documentation} = 'parent'; + }]); +} +BEGIN { + package Plonker; + use Moo; + extends 'Plonk'; + has '+kk' => (moosify => sub { + my $spec = shift; + $spec->{documentation} .= 'child'; + }); +} +BEGIN{ + local $SIG{__WARN__} = sub { fail "warning: $_[0]" }; + package SplatteredMoose; + use Moose; + extends 'Splattered'; +} + foreach my $s ( Splattered->new, Splattered2->new, @@ -182,14 +206,15 @@ foreach my $s ( Ker::Splattered2->new, KerSplattered->new, KerSplattered2->new, + SplatteredMoose->new ) { - ok($s->can('punch')) + can_ok($s, 'punch') and is($s->punch, 1, 'punch'); - ok($s->can('jab')) + can_ok($s, 'jab') and is($s->jab, 3, 'jab'); - ok($s->can('monkey')) + can_ok($s, 'monkey') and is($s->monkey, 'OW', 'monkey'); - ok($s->can('trap')) + can_ok($s, 'trap') and is($s->trap, -1, 'trap'); } @@ -199,13 +224,60 @@ foreach my $c (qw/ KerSplattered KerSplattered2 /) { - ok $c->can('has_ker'); - ok $c->can('has_splat'); + can_ok($c, 'has_ker'); + can_ok($c, 'has_splat'); +} + +is(Plunker->meta->find_attribute_by_name('pp')->documentation, 'moosify', 'moosify modifies attr specs'); +is(Planker->meta->find_attribute_by_name('vv')->documentation, 'moosify foo', 'moosify modifies attr specs as array'); + +is( Plonker->meta->find_attribute_by_name('kk')->documentation, + 'parentchild', + 'moosify applies for overridden attributes with roles'); + +{ + package MooseAttrTrait; + use Moose::Role; + + has 'extra_attr' => (is => 'ro'); + has 'extra_attr_noinit' => (is => 'ro', init_arg => undef); +} + +{ + local $SIG{__WARN__} = sub { fail "warning: $_[0]" }; + package UsingMooseTrait; + use Moo; + + has one => ( + is => 'ro', + traits => ['MooseAttrTrait'], + extra_attr => 'one', + extra_attr_noinit => 'two', + ); } -foreach my $c (Plunker->new) { - is(Plunker->meta->find_attribute_by_name('pp')->documentation, 'moosify', 'moosify modifies attr specs'); - is(Planker->meta->find_attribute_by_name('vv')->documentation, 'moosify foo', 'moosify modifies attr specs as array'); +ok( UsingMooseTrait->meta + ->find_attribute_by_name('one')->can('extra_attr'), + 'trait was properly applied'); +is( UsingMooseTrait->meta->find_attribute_by_name('one') + ->extra_attr, + 'one', + 'trait attributes maintain values'); + +{ + package NeedTrap; + use Moo::Role; + + requires 'trap'; } +is exception { + package Splattrap; + use Moo; + sub monkey {} + + with qw(Splat NeedTrap); +}, undef, 'requires satisfied by Moose attribute composed at the same time'; + + done_testing;