11 sub bar { 'unextended!' }
13 package Does::DelegateToBar;
19 default => sub { DelegateBar->new },
20 handles => { _bar => 'bar' },
23 sub get_barrer { $_[0]->_barrer }
25 package ConsumesDelegateToBar;
29 with 'Does::DelegateToBar';
31 has bong => ( is => 'ro' );
33 package Does::OverrideDelegate;
37 sub _bar { 'extended' }
42 extends 'ConsumesDelegateToBar';
43 with 'Does::OverrideDelegate';
45 has '+_barrer' => ( is => 'rw' );
50 extends 'ConsumesDelegateToBar';
52 sub _bar { 'extended' }
54 has '+_barrer' => ( is => 'rw' );
59 extends 'ConsumesDelegateToBar';
61 sub _bar { 'extended' }
65 handles => { _baz => 'bar' },
70 extends 'ConsumesDelegateToBar';
71 with 'Does::OverrideDelegate';
75 handles => { _baz => 'bar' },
79 is(A->new->_bar, 'extended', 'overriding delegate method with role works');
80 is(D->new->_bar, 'extended', '... even when you specify other delegates in subclass');
81 is(D->new->_baz, 'unextended!', '... and said other delegate still works');
82 is(B->new->_bar, 'extended', 'overriding delegate method directly works');
83 is(C->new->_bar, 'extended', '... even when you specify other delegates in subclass');
84 is(C->new->_baz, 'unextended!', '... and said other delegate still works');