d010167cd5d0532c66b94949d90f59cfadedbbd2
[gitmo/Moose-Policy.git] / t / 010_FollowPBP_test.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 28;
7
8 BEGIN {
9     use_ok('Moose::Policy');
10 }
11
12 {
13     package Foo;
14
15     use Moose::Policy 'Moose::Policy::FollowPBP';
16     use Moose;
17
18     has 'bar' => (is => 'rw', default => 'Foo::bar');
19     has 'baz' => (is => 'ro', default => 'Foo::baz');
20 }
21
22 isa_ok(Foo->meta, 'Moose::Meta::Class');
23 is(Foo->meta->attribute_metaclass, 'Moose::Policy::FollowPBP::Attribute', '... got our custom attr metaclass');
24
25 isa_ok(Foo->meta->get_attribute('bar'), 'Moose::Policy::FollowPBP::Attribute');
26
27 my $foo = Foo->new;
28 isa_ok($foo, 'Foo');
29
30 can_ok($foo, 'get_bar');
31 can_ok($foo, 'set_bar');
32
33 can_ok($foo, 'get_baz');
34 ok(! $foo->can('set_baz'), 'without setter');
35
36 is($foo->get_bar, 'Foo::bar', '... got the right default value');
37 is($foo->get_baz, 'Foo::baz', '... got the right default value');
38
39 {
40     package Bar;
41     use Moose::Policy 'Moose::Policy::FollowPBP';    
42     use Moose;
43     
44     extends 'Foo';
45
46     has 'boing' => (is => 'rw', default => 'Bar::boing');
47 }
48
49 isa_ok(Bar->meta, 'Moose::Meta::Class');
50 is(Bar->meta->attribute_metaclass, 'Moose::Policy::FollowPBP::Attribute', '... got our custom attr metaclass');
51
52 isa_ok(Bar->meta->get_attribute('boing'), 'Moose::Policy::FollowPBP::Attribute');
53
54 my $bar = Bar->new;
55 isa_ok($bar, 'Bar');
56 isa_ok($bar, 'Foo');
57
58 can_ok($bar, 'get_boing');
59 can_ok($bar, 'set_boing');
60
61 is($bar->get_boing, 'Bar::boing', '... got the right default value');
62 $bar->set_boing('Woot!');
63 is($bar->get_boing, 'Woot!', '... got the right changed value');
64
65 {
66     package Baz;
67     use Moose;
68     
69     extends 'Bar';
70
71     has 'bling' => (is => 'ro', default => 'Baz::bling');
72 }
73
74 isa_ok(Baz->meta, 'Moose::Meta::Class');
75 is(Baz->meta->attribute_metaclass, 'Moose::Meta::Attribute', '... got our custom attr metaclass');
76
77 isa_ok(Baz->meta->get_attribute('bling'), 'Moose::Meta::Attribute');
78
79 my $baz = Baz->new;
80 isa_ok($baz, 'Baz');
81 isa_ok($baz, 'Bar');
82 isa_ok($baz, 'Foo');
83
84 can_ok($baz, 'bling');
85
86 is($baz->bling, 'Baz::bling', '... got the right default value');