X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F023-builder.t;h=6b3e35e2ab54de57657d6246308680a76e1d7976;hb=6cc6c673f9175314c395c60b894322e6f584d963;hp=25b7fa8871e0426ab5b2a490263cd78b110b4fb0;hpb=010a2b16f8ed60a3dcca43e80ec75daee135447e;p=gitmo%2FMouse.git diff --git a/t/023-builder.t b/t/023-builder.t index 25b7fa8..6b3e35e 100644 --- a/t/023-builder.t +++ b/t/023-builder.t @@ -1,7 +1,8 @@ #!/usr/bin/env perl use strict; use warnings; -use Test::More tests => 34; +use Test::More tests => 47; +use Test::Exception; my $builder_called = 0; my $lazy_builder_called = 0; @@ -25,12 +26,11 @@ do { }; has age => ( - is => 'ro', - isa => 'Int', - builder => '_build_age', - lazy => 1, - clearer => 'clear_age', - predicate => 'has_age', + is => 'ro', + isa => 'Int', + lazy_build => 1, + clearer => 'clear_age', + predicate => 'has_age', ); sub default_age { 20 } @@ -96,3 +96,66 @@ is($lazy_builder_called, 0, "lazy builder not called on clear"); is($object4->age, 20, "lazy builder value"); ok($object4->has_age, "predicate: have value after clear and get"); is($lazy_builder_called, 1, "lazy builder called on get after clear"); + +do { + package Class::Error; + use Mouse; + + ::throws_ok { + has error => ( + lazy_build => 1, + default => 1, + ); + } qr/You can not use lazy_build and default for the same attribute \(error\)/; +}; + +my @calls; +do { + package Class::CustomBuilder; + use Mouse; + + has custom => ( + is => 'ro', + lazy_build => 1, + builder => 'build_my_customs', + predicate => 'has_my_customs', + clearer => 'clear_my_customs', + ); + + sub build_my_customs { + push @calls, 'build_my_customs'; + return 'yo'; + } +}; + +my $cb = Class::CustomBuilder->new; +ok(!$cb->has_my_customs, "correct predicate"); +is($cb->custom, 'yo'); +is_deeply([splice @calls], ['build_my_customs']); +ok($cb->has_my_customs, "correct predicate"); +ok($cb->clear_my_customs, "correct clearer"); +ok(!$cb->has_my_customs, "correct predicate"); + +do { + package Class::UnderscoreBuilder; + use Mouse; + + has _attr => ( + is => 'ro', + lazy_build => 1, + ); + + sub _build__attr { + push @calls, '_build__attr'; + return 'ping'; + } +}; + +my $cub = Class::UnderscoreBuilder->new; +ok(!$cub->_has_attr, "correct predicate"); +is($cub->_attr, 'ping'); +is_deeply([splice @calls], ['_build__attr']); +ok($cub->_has_attr, "correct predicate"); +ok($cub->_clear_attr, "correct clearer"); +ok(!$cub->_has_attr, "correct predicate"); +