X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=t%2F020_attributes%2F011_more_attr_delegation.t;fp=t%2F020_attributes%2F011_more_attr_delegation.t;h=5d958c243abab6f2967d7b927efd40bac71c33fa;hp=75d6fa1cf8568b2fd2c4018d88e840315e04d2e8;hb=cd81020880fad959c9f5d378345755f33846d5b6;hpb=f1a8bff35c48b4e801e34859913ae388363a2ef4 diff --git a/t/020_attributes/011_more_attr_delegation.t b/t/020_attributes/011_more_attr_delegation.t index 75d6fa1..5d958c2 100644 --- a/t/020_attributes/011_more_attr_delegation.t +++ b/t/020_attributes/011_more_attr_delegation.t @@ -1,9 +1,12 @@ #!/usr/bin/perl +# This is automatically generated by author/import-moose-test.pl. +# DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!! +use t::lib::MooseCompat; use strict; use warnings; -use Test::More tests => 39; +use Test::More; use Test::Exception; =pod @@ -76,9 +79,24 @@ do not fail at compile time. sub child_g_method_1 { "g1" } + package ChildH; + use Mouse; + + sub child_h_method_1 { "h1" } + sub parent_method_1 { "child_parent_1" } + + package ChildI; + use Mouse; + + sub child_i_method_1 { "i1" } + sub parent_method_1 { "child_parent_1" } + package Parent; use Mouse; + sub parent_method_1 { "parent_1" } + ::can_ok('Parent', 'parent_method_1'); + ::dies_ok { has child_a => ( is => "ro", @@ -167,11 +185,34 @@ do not fail at compile time. ); } "can delegate to object even without explicit reader"; + ::can_ok('Parent', 'parent_method_1'); + ::dies_ok { + has child_h => ( + isa => "ChildH", + is => "ro", + default => sub { ChildH->new }, + handles => sub { map { $_, $_ } $_[1]->get_all_method_names }, + ); + } "Can't override exisiting class method in delegate"; + ::can_ok('Parent', 'parent_method_1'); + + ::lives_ok { + has child_i => ( + isa => "ChildI", + is => "ro", + default => sub { ChildI->new }, + handles => sub { + map { $_, $_ } grep { !/^parent_method_1|meta$/ } + $_[1]->get_all_method_names; + }, + ); + } "Test handles code ref for skipping predefined methods"; + + sub parent_method { "p" } } # sanity - isa_ok( my $p = Parent->new, "Parent" ); isa_ok( $p->child_a, "ChildA" ); isa_ok( $p->child_b, "ChildB" ); @@ -179,9 +220,12 @@ isa_ok( $p->child_c, "ChildC" ); isa_ok( $p->child_d, "ChildD" ); isa_ok( $p->child_e, "ChildE" ); isa_ok( $p->child_f, "ChildF" ); +isa_ok( $p->child_i, "ChildI" ); ok(!$p->can('child_g'), '... no child_g accessor defined'); - +{ local $TODO = 'Mouse does not install delegations atomically'; +ok(!$p->can('child_h'), '... no child_h accessor defined'); +} is( $p->parent_method, "p", "parent method" ); is( $p->child_a->child_a_super_method, "as", "child supermethod" ); @@ -215,3 +259,8 @@ is( $p->child_e_method_2, "e2", "delegate to non moose class (child_e_method_2)" can_ok( $p, "child_g_method_1" ); is( $p->child_g_method_1, "g1", "delegate to moose class without reader (child_g_method_1)" ); + +can_ok( $p, "child_i_method_1" ); +is( $p->parent_method_1, "parent_1", "delegate doesn't override existing method" ); + +done_testing;