bah
[gitmo/Moose.git] / t / 000_recipes / basics / 006_augment_inner.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 2;
7 use Test::Exception;
8
9
10
11 ## Augment/Inner
12
13 {
14     package Document::Page;
15     use Moose;
16
17     has 'body' => (is => 'rw', isa => 'Str', default => sub {''});
18
19     sub create {
20         my $self = shift;
21         $self->open_page;
22         inner();
23         $self->close_page;
24     }
25
26     sub append_body { 
27         my ($self, $appendage) = @_;
28         $self->body($self->body . $appendage);
29     }
30
31     sub open_page  { (shift)->append_body('<page>') }
32     sub close_page { (shift)->append_body('</page>') }  
33
34     package Document::PageWithHeadersAndFooters;
35     use Moose;
36
37     extends 'Document::Page';
38
39     augment 'create' => sub {
40         my $self = shift;
41         $self->create_header;
42         inner();
43         $self->create_footer;
44     };
45
46     sub create_header { (shift)->append_body('<header/>') }
47     sub create_footer { (shift)->append_body('<footer/>') }  
48
49     package TPSReport;
50     use Moose;
51
52     extends 'Document::PageWithHeadersAndFooters';
53
54     augment 'create' => sub {
55         my $self = shift;
56         $self->create_tps_report;
57     };
58
59     sub create_tps_report {
60        (shift)->append_body('<report type="tps"/>') 
61     }    
62 }
63
64 my $tps_report = TPSReport->new;
65 isa_ok($tps_report, 'TPSReport');
66
67 is(
68 $tps_report->create, 
69 q{<page><header/><report type="tps"/><footer/></page>},
70 '... got the right TPS report');
71
72
73
74