fooooooooooooooooooooo
[gitmo/Moose.git] / t / 012_super_and_override.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 17;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('Moose');           
11 }
12
13 {
14     package Foo;
15     use strict;
16     use warnings;
17     use Moose;
18     
19     sub foo { 'Foo::foo' }
20     sub bar { 'Foo::bar' }    
21     sub baz { 'Foo::baz' }
22     
23     package Bar;
24     use strict;
25     use warnings;
26     use Moose;
27     
28     extends 'Foo';
29     
30     override bar => sub { 'Bar::bar -> ' . super() };   
31     
32     package Baz;
33     use strict;
34     use warnings;
35     use Moose;
36     
37     extends 'Bar';
38     
39     override bar => sub { 'Baz::bar -> ' . super() };       
40     override baz => sub { 'Baz::baz -> ' . super() }; 
41 }
42
43 my $baz = Baz->new();
44 isa_ok($baz, 'Baz');
45 isa_ok($baz, 'Bar');
46 isa_ok($baz, 'Foo');
47
48 is($baz->foo(), 'Foo::foo', '... got the right value from &foo');
49 is($baz->bar(), 'Baz::bar -> Bar::bar -> Foo::bar', '... got the right value from &bar');
50 is($baz->baz(), 'Baz::baz -> Foo::baz', '... got the right value from &baz');
51
52 my $bar = Bar->new();
53 isa_ok($bar, 'Bar');
54 isa_ok($bar, 'Foo');
55
56 is($bar->foo(), 'Foo::foo', '... got the right value from &foo');
57 is($bar->bar(), 'Bar::bar -> Foo::bar', '... got the right value from &bar');
58 is($bar->baz(), 'Foo::baz', '... got the right value from &baz');
59
60 my $foo = Foo->new();
61 isa_ok($foo, 'Foo');
62
63 is($foo->foo(), 'Foo::foo', '... got the right value from &foo');
64 is($foo->bar(), 'Foo::bar', '... got the right value from &bar');
65 is($foo->baz(), 'Foo::baz', '... got the right value from &baz');
66
67 # some error cases
68
69 {
70     package Bling;
71     use strict;
72     use warnings;
73     use Moose;
74     
75     sub bling { 'Bling::bling' }
76     
77     package Bling::Bling;
78     use strict;
79     use warnings;
80     use Moose;
81     
82     extends 'Bling';
83     
84     sub bling { 'Bling::bling' }    
85     
86     ::dies_ok {
87         override 'bling' => sub {};
88     } '... cannot override a method which has a local equivalent';
89     
90 }
91