X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F900_bug%2F001_immutable_types.t;h=b3950e257321ec76421813a599cdf6b15ee0ab41;hb=013ee5f0c0ce5afa1fea9d45bd14bd8f8bfd67f4;hp=f5e7ece2ce0f1ccf07b8c2099b0a70b85a5ffcb6;hpb=89a97ba1ec0c9828cd72973f51ea7d124463b44e;p=gitmo%2FMouse.git diff --git a/t/900_bug/001_immutable_types.t b/t/900_bug/001_immutable_types.t index f5e7ece..b3950e2 100644 --- a/t/900_bug/001_immutable_types.t +++ b/t/900_bug/001_immutable_types.t @@ -1,6 +1,6 @@ use strict; use warnings; -use Test::More tests => 2; +use Test::More tests => 4; use Mouse::Util::TypeConstraints; subtype 'Foo', as 'Object', where { $_->isa('A') }; @@ -21,3 +21,47 @@ isa_ok(C->new(a => A->new()), 'C'); C->meta->make_immutable; isa_ok(C->new(a => A->new()), 'C'); + + +# The BUILD invocation order used to get reversed after +# making a class immutable. This checks it is correct. +{ + package D; + use Mouse; + + # we'll keep + has order => + (is => 'ro', + default => sub {[]}); + + sub BUILD { push @{shift->order}, 'D' } + + package E; + use Mouse; + extends 'D'; + + sub BUILD { push @{shift->order}, 'E' } + + package F; + use Mouse; + extends 'E'; + + sub BUILD { push @{shift->order}, 'F' } + + +} + +my $obj = F->new; + +print join(", ", @{$obj->order}),"\n"; +is_deeply $obj->order, [qw(D E F)], "mutable BUILD invocation order correct"; + +# now make the classes immutable +$_->meta->make_immutable for qw(D E F); + +my $obj2 = F->new; + +print join(", ", @{$obj2->order}),"\n"; +is_deeply $obj2->order, [qw(D E F)], "immutable BUILD invocation order still correct"; + +