0f6ae60dca9493f9ab58b43cd470abb1fec1c9e4
[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         inner();
58     };
59
60     sub create_tps_report {
61        (shift)->append_body('<report type="tps"/>') 
62     }    
63 }
64
65 my $tps_report = TPSReport->new;
66 isa_ok($tps_report, 'TPSReport');
67
68 is(
69 $tps_report->create, 
70 q{<page><header/><report type="tps"/><footer/></page>},
71 '... got the right TPS report');
72
73
74
75