9 sub bar { 'unextended!' }
11 package Does::DelegateToBar;
17 default => sub { DelegateBar->new },
18 handles => { _bar => 'bar' },
21 sub get_barrer { $_[0]->_barrer }
23 package ConsumesDelegateToBar;
27 with 'Does::DelegateToBar';
29 has bong => ( is => 'ro' );
31 package Does::OverrideDelegate;
35 sub _bar { 'extended' }
40 extends 'ConsumesDelegateToBar';
41 with 'Does::OverrideDelegate';
43 has '+_barrer' => ( is => 'rw' );
48 extends 'ConsumesDelegateToBar';
50 sub _bar { 'extended' }
52 has '+_barrer' => ( is => 'rw' );
57 extends 'ConsumesDelegateToBar';
59 sub _bar { 'extended' }
63 handles => { _baz => 'bar' },
68 extends 'ConsumesDelegateToBar';
69 with 'Does::OverrideDelegate';
73 handles => { _baz => 'bar' },
77 is(A->new->_bar, 'extended', 'overriding delegate method with role works');
78 is(D->new->_bar, 'extended', '... even when you specify other delegates in subclass');
79 is(D->new->_baz, 'unextended!', '... and said other delegate still works');
80 is(B->new->_bar, 'extended', 'overriding delegate method directly works');
81 is(C->new->_bar, 'extended', '... even when you specify other delegates in subclass');
82 is(C->new->_baz, 'unextended!', '... and said other delegate still works');