Commit | Line | Data |
b6e1128f |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
4 | use Test::More tests => 6; |
5 | |
6 | my $builder_called = 0; |
7 | |
8 | do { |
9 | package Class; |
10 | use Mouse; |
11 | |
12 | has name => ( |
13 | is => 'rw', |
14 | isa => 'Str', |
15 | builder => '_build_name', |
16 | ); |
17 | |
18 | sub default_name { "Frank" } |
19 | sub _build_name { |
20 | my $self = shift; |
21 | ++$builder_called; |
22 | return uc $self->default_name; |
23 | }; |
24 | }; |
25 | |
26 | my $object = Class->new(name => "Bob"); |
27 | is($builder_called, 0, "builder not called in the constructor when we pass a value"); |
28 | is($object->name, "Bob", "builder doesn't matter when we just set the value in constructor"); |
29 | $object->name("Bill"); |
30 | is($object->name, "Bill", "builder doesn't matter when we just set the value in writer"); |
31 | is($builder_called, 0, "builder not called in the setter"); |
32 | $builder_called = 0; |
33 | |
34 | my $object2 = Class->new; |
35 | is($object2->name, "FRANK", "builder called to provide the default value"); |
36 | is($builder_called, 1, "builder called ONCE to provide the default value"); |
37 | |
38 | # XXX: test clearer, lazy |