Make sure that eager builder does not run after clearer
Shawn M Moore [Tue, 10 Jun 2008 02:44:37 +0000 (02:44 +0000)]
t/023-builder.t

index a89ee0b..25b7fa8 100644 (file)
@@ -1,7 +1,7 @@
 #!/usr/bin/env perl
 use strict;
 use warnings;
-use Test::More tests => 30;
+use Test::More tests => 34;
 
 my $builder_called = 0;
 my $lazy_builder_called = 0;
@@ -15,6 +15,7 @@ do {
         isa       => 'Str',
         builder   => '_build_name',
         predicate => 'has_name',
+        clearer   => 'clear_name',
     );
 
     sub _build_name {
@@ -51,6 +52,13 @@ is($object->name, "Bill", "builder doesn't matter when we just set the value in
 is($builder_called, 0, "builder not called in the setter");
 $builder_called = 0;
 
+$object->clear_name;
+ok(!$object->has_name, "predicate: no value after clear");
+is($object->name, undef, "eager builder does NOT swoop in after clear");
+ok(!$object->has_name, "predicate: no value after clear and get");
+is($builder_called, 0, "builder not called in the getter, even after clear");
+$builder_called = 0;
+
 my $object2 = Class->new;
 ok($object2->has_name, "predicate: value from eager builder");
 is($object2->name, "FRANK", "builder called to provide the default value");