whole bunch of stuff
[gitmo/Class-MOP.git] / t / 105_ClassEncapsulatedAttributes_test.t
CommitLineData
d6fbcd05 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 29;
7use File::Spec;
8
9BEGIN {
10 use_ok('Class::MOP');
11 require_ok(File::Spec->catdir('examples', 'ClassEncapsulatedAttributes.pod'));
12}
13
14{
15 package Foo;
16
677eb158 17 use metaclass 'ClassEncapsulatedAttributes';
d6fbcd05 18
2e41896e 19 Foo->meta->add_attribute('foo' => (
20 accessor => 'foo',
21 predicate => 'has_foo',
22 default => 'init in FOO'
23 ));
d6fbcd05 24
2e41896e 25 Foo->meta->add_attribute('bar' => (
26 reader => 'get_bar',
27 writer => 'set_bar',
28 default => 'init in FOO'
29 ));
d6fbcd05 30
31 sub new {
32 my $class = shift;
5659d76e 33 $class->meta->new_object(@_);
d6fbcd05 34 }
35
36 package Bar;
37 our @ISA = ('Foo');
38
2e41896e 39 Bar->meta->add_attribute('foo' => (
40 accessor => 'foo',
41 predicate => 'has_foo',
42 default => 'init in BAR'
43 ));
d6fbcd05 44
2e41896e 45 Bar->meta->add_attribute('bar' => (
46 reader => 'get_bar',
47 writer => 'set_bar',
48 default => 'init in BAR'
49 ));
d6fbcd05 50
51 sub SUPER_foo { (shift)->SUPER::foo(@_) }
52 sub SUPER_has_foo { (shift)->SUPER::foo(@_) }
53 sub SUPER_get_bar { (shift)->SUPER::get_bar() }
54 sub SUPER_set_bar { (shift)->SUPER::set_bar(@_) }
55
56}
57
58{
59 my $foo = Foo->new();
60 isa_ok($foo, 'Foo');
61
62 can_ok($foo, 'foo');
63 can_ok($foo, 'has_foo');
64 can_ok($foo, 'get_bar');
65 can_ok($foo, 'set_bar');
66
67 my $bar = Bar->new();
68 isa_ok($bar, 'Bar');
69
70 can_ok($bar, 'foo');
71 can_ok($bar, 'has_foo');
72 can_ok($bar, 'get_bar');
73 can_ok($bar, 'set_bar');
74
75 ok($foo->has_foo, '... Foo::has_foo == 1');
76 ok($bar->has_foo, '... Bar::has_foo == 1');
77
78 is($foo->foo, 'init in FOO', '... got the right default value for Foo::foo');
79 is($bar->foo, 'init in BAR', '... got the right default value for Bar::foo');
80
81 is($bar->SUPER_foo(), 'init in FOO', '... got the right default value for Bar::SUPER::foo');
82
83 $bar->SUPER_foo(undef);
84
85 is($bar->SUPER_foo(), undef, '... successfully set Foo::foo through Bar::SUPER::foo');
86 ok(!$bar->SUPER_has_foo, '... BAR::SUPER::has_foo == 0');
87
88 ok($foo->has_foo, '... Foo::has_foo (is still) 1');
89}
90
91{
92 my $bar = Bar->new(
93 'Foo' => { 'foo' => 'Foo::foo' },
94 'Bar' => { 'foo' => 'Bar::foo' }
95 );
96 isa_ok($bar, 'Bar');
97
98 can_ok($bar, 'foo');
99 can_ok($bar, 'has_foo');
100 can_ok($bar, 'get_bar');
101 can_ok($bar, 'set_bar');
102
103 ok($bar->has_foo, '... Bar::has_foo == 1');
104 ok($bar->SUPER_has_foo, '... Bar::SUPER_has_foo == 1');
105
106 is($bar->foo, 'Bar::foo', '... got the right default value for Bar::foo');
107 is($bar->SUPER_foo(), 'Foo::foo', '... got the right default value for Bar::SUPER::foo');
108}
109