Use Scalar::Util/Carp imports for brevity
[gitmo/Mouse.git] / t / 023-builder.t
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