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