dc15fe43d0ec96cdedb885b42762e999100ffb9c
[gitmo/Mouse.git] / t / 020_attributes / 001_attribute_reader_generation.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More;
7 use Test::Exception;
8
9
10 {
11     package Foo;
12     use Mouse;
13
14     eval {
15         has 'foo' => (
16             reader => 'get_foo'
17         );
18     };
19     ::ok(!$@, '... created the reader method okay');
20
21     eval {
22         has 'lazy_foo' => (
23             reader => 'get_lazy_foo',
24             lazy => 1,
25             default => sub { 10 }
26         );
27     };
28     ::ok(!$@, '... created the lazy reader method okay') or warn $@;
29
30     my $warn;
31
32     eval {
33         local $SIG{__WARN__} = sub { $warn = $_[0] };
34         has 'mtfnpy' => (
35             reder => 'get_mftnpy'
36         );
37     };
38     ::ok($warn, '... got a warning for mispelled attribute argument');
39 }
40
41 {
42     my $foo = Foo->new;
43     isa_ok($foo, 'Foo');
44
45     can_ok($foo, 'get_foo');
46     is($foo->get_foo(), undef, '... got an undefined value');
47     dies_ok {
48         $foo->get_foo(100);
49     } '... get_foo is a read-only';
50
51     ok(!exists($foo->{lazy_foo}), '... no value in get_lazy_foo slot');
52
53     can_ok($foo, 'get_lazy_foo');
54     is($foo->get_lazy_foo(), 10, '... got an deferred value');
55     dies_ok {
56         $foo->get_lazy_foo(100);
57     } '... get_lazy_foo is a read-only';
58 }
59
60 {
61     my $foo = Foo->new;
62     isa_ok($foo, 'Foo');
63
64     my $attr = $foo->meta->find_attribute_by_name("lazy_foo");
65
66     isa_ok( $attr, "Mouse::Meta::Attribute" );
67
68     ok( $attr->is_lazy, "it's lazy" );
69
70     note 'skip Moose specific features';
71     last;
72     is( $attr->get_raw_value($foo), undef, "raw value" );
73
74     is( $attr->get_value($foo), 10, "lazy value" );
75
76     is( $attr->get_raw_value($foo), 10, "raw value" );
77 }
78
79 {
80     my $foo = Foo->new(foo => 10, lazy_foo => 100);
81     isa_ok($foo, 'Foo');
82
83     is($foo->get_foo(), 10, '... got the correct value');
84     is($foo->get_lazy_foo(), 100, '... got the correct value');
85 }
86
87 done_testing;