4 use Test::More tests => 20;
6 my $builder_called = 0;
7 my $lazy_builder_called = 0;
16 builder => '_build_name',
28 builder => '_build_age',
30 clearer => 'clear_age',
33 sub default_age { 20 }
36 ++$lazy_builder_called;
37 return $self->default_age;
43 my $object = Class->new(name => "Bob");
44 is($builder_called, 0, "builder not called in the constructor when we pass a value");
45 is($object->name, "Bob", "builder doesn't matter when we just set the value in constructor");
46 $object->name("Bill");
47 is($object->name, "Bill", "builder doesn't matter when we just set the value in writer");
48 is($builder_called, 0, "builder not called in the setter");
51 my $object2 = Class->new;
52 is($object2->name, "FRANK", "builder called to provide the default value");
53 is($builder_called, 1, "builder called ONCE to provide the default value");
56 my $object3 = Class->new;
57 is($lazy_builder_called, 0, "lazy builder not called yet");
58 is($object3->age, 20, "lazy builder value");
59 is($lazy_builder_called, 1, "lazy builder called on get");
60 is($object3->age, 20, "lazy builder value");
61 is($lazy_builder_called, 1, "lazy builder not called on subsequent gets");
64 is($lazy_builder_called, 1, "lazy builder not called on clear");
65 is($object3->age, 20, "lazy builder value");
66 is($lazy_builder_called, 2, "lazy builder called on get after clear");
68 $lazy_builder_called = 0 ;
69 my $object4 = Class->new(age => 50);
70 is($lazy_builder_called, 0, "lazy builder not called yet");
71 is($object4->age, 50, "value from constructor");
72 is($lazy_builder_called, 0, "lazy builder not called if value is from constructor");
75 is($lazy_builder_called, 0, "lazy builder not called on clear");
76 is($object4->age, 20, "lazy builder value");
77 is($lazy_builder_called, 1, "lazy builder called on get after clear");