X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Faccessor-weaken.t;h=245ea7a83227d118f330a341992153ac2448dfb3;hb=040b273865600d815731e915e4806c8618486e25;hp=89f49fa0741ce604b1113c1ca040c2bb8aab5f11;hpb=f3dc0ac648d1bfcd936b9e0f856f9303c3ea0064;p=gitmo%2FMoo.git diff --git a/t/accessor-weaken.t b/t/accessor-weaken.t index 89f49fa..245ea7a 100644 --- a/t/accessor-weaken.t +++ b/t/accessor-weaken.t @@ -1,5 +1,9 @@ use strictures 1; use Test::More; +use Moo::_Utils; + +ok(Moo::_Utils::lt_5_8_3, "pretending to be pre-5.8.3") + if $ENV{MOO_TEST_PRE_583}; { package Foo; @@ -12,24 +16,33 @@ use Test::More; use Moo; - has one => (is => 'rw', lazy => 1, weak_ref => 1, default => sub { {} }); + our $preexist = {}; + has one => (is => 'rw', lazy => 1, weak_ref => 1, default => sub { $preexist }); + has two => (is => 'rw', lazy => 1, weak_ref => 1, default => sub { {} }); } my $ref = {}; my $foo = Foo->new(one => $ref); is($foo->one, $ref, 'value present'); ok(Scalar::Util::isweak($foo->{one}), 'value weakened'); -is($foo->one($ref), $ref, 'value returned from setter'); undef $ref; ok(!defined $foo->{one}, 'weak value gone'); my $foo2 = Foo2->new; -ok(my $ref2 = $foo2->one, 'value returned'); +ok(my $ref2 = $foo2->one, 'external value returned'); +is($foo2->one, $ref2, 'value maintained'); ok(Scalar::Util::isweak($foo2->{one}), 'value weakened'); is($foo2->one($ref2), $ref2, 'value returned from setter'); undef $ref2; ok(!defined $foo->{one}, 'weak value gone'); +is($foo2->two, undef, 'weak+lazy ref not returned'); +is($foo2->{two}, undef, 'internal value not set'); +my $ref3 = {}; +is($foo2->two($ref3), $ref3, 'value returned from setter'); +undef $ref3; +ok(!defined $foo->{two}, 'weak value gone'); + # test readonly SVs sub mk_ref { \ 'yay' };