X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2Foverloaded-coderefs.t;h=058db1115bebf2dff187e21edec6ae9446882d5e;hb=42865691a20eb4d33df037c9677b9766126c98ec;hp=66bdc0b4dcaaac806d0273949004b92cf49d885a;hpb=707f101cf9e90c6a8bc858b08da601ce94e7fd8e;p=gitmo%2FMoo.git diff --git a/t/overloaded-coderefs.t b/t/overloaded-coderefs.t index 66bdc0b..058db11 100644 --- a/t/overloaded-coderefs.t +++ b/t/overloaded-coderefs.t @@ -4,29 +4,29 @@ use Test::More; my $codified = 0; { - package Dark::Side; - use overload - q[&{}] => sub { $codified++; shift->to_code }, - fallback => 1; - sub new { - my $class = shift; - my $code = shift; - bless \$code, $class; - } - sub to_code { - my $self = shift; - eval "sub { $$self }"; - } + package Dark::Side; + use overload + q[&{}] => sub { $codified++; shift->to_code }, + fallback => 1; + sub new { + my $class = shift; + my $code = shift; + bless \$code, $class; + } + sub to_code { + my $self = shift; + eval "sub { $$self }"; + } } { - package The::Force; - use Sub::Quote; - use base 'Dark::Side'; - sub to_code { - my $self = shift; - return quote_sub $$self; - } + package The::Force; + use Sub::Quote; + use base 'Dark::Side'; + sub to_code { + my $self = shift; + return quote_sub $$self; + } } my $darkside = Dark::Side->new('my $dummy = "join the dark side"; $_[0] * 2'); @@ -35,11 +35,12 @@ is($darkside->(6), 12, 'check Dark::Side coderef'); my $theforce = The::Force->new('my $dummy = "use the force Luke"; $_[0] * 2'); is($theforce->(6), 12, 'check The::Force coderef'); +my $luke = The::Force->new('my $z = "I am your father"'); { - package Doubleena; - use Moo; - has a => (is => "rw", coerce => $darkside, isa => sub { 1 }); - has b => (is => "rw", coerce => $theforce, isa => The::Force->new('my $z = "I am your father"')); + package Doubleena; + use Moo; + has a => (is => "rw", coerce => $darkside, isa => sub { 1 }); + has b => (is => "rw", coerce => $theforce, isa => $luke); } my $o = Doubleena->new(a => 11, b => 12); @@ -56,4 +57,20 @@ like($constructor, qr{use the force Luke}, 'Sub::Quoted coercion got inlined'); unlike($constructor, qr{join the dark side}, 'non-Sub::Quoted coercion was not inlined'); like($constructor, qr{I am your father}, 'Sub::Quoted isa got inlined'); +require Scalar::Util; +is( + Scalar::Util::refaddr($luke), + Scalar::Util::refaddr( + Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"isa"} + ), + '$spec->{isa} reference is not mutated', +); +is( + Scalar::Util::refaddr($theforce), + Scalar::Util::refaddr( + Moo->_constructor_maker_for("Doubleena")->all_attribute_specs->{"b"}{"coerce"} + ), + '$spec->{coerce} reference is not mutated', +); + done_testing;