%PDF- %PDF-
Direktori : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/t/ |
Current File : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/t/non-moo-extends.t |
use Moo::_strictures; use Test::More; { package ClassA; use Moo; has 'foo' => ( is => 'ro'); has built => (is => 'rw', default => 0); sub BUILD { $_[0]->built($_[0]->built+1); } } { package ClassB; our @ISA = 'ClassA'; sub blorp {}; sub new { $_[0]->SUPER::new(@_[1..$#_]); } } { package ClassC; use Moo; extends 'ClassB'; has bar => (is => 'ro'); } { package ClassD; our @ISA = 'ClassC'; } my $o = ClassD->new(foo => 1, bar => 2); isa_ok $o, 'ClassD'; is $o->foo, 1, 'superclass attribute has correct value'; is $o->bar, 2, 'subclass attribute has correct value'; is $o->built, 1, 'BUILD called correct number of times'; { package ClassE; sub new { return ClassF->new; } } { package ClassF; use Moo; extends 'Moo::Object', 'ClassE'; } { my $o = eval { ClassF->new }; ok $o, 'explicit inheritence from Moo::Object works around broken constructor' or diag $@; isa_ok $o, 'ClassF'; } { package ClassG; use Sub::Defer; defer_sub __PACKAGE__.'::new' => sub { sub { bless {}, $_[0] } }; } { package ClassH; use Moo; extends 'ClassG'; } { my $o = eval { ClassH->new }; ok $o, 'inheriting from non-Moo with deferred new works' or diag $@; isa_ok $o, 'ClassH'; } { package ClassI; sub new { my $self = shift; my $class = ref $self ? ref $self : $self; bless { (ref $self ? %$self : ()), @_, }, $class; } } { package ClassJ; use Moo; extends 'ClassI'; has 'attr' => (is => 'ro'); } { my $o1 = ClassJ->new(attr => 1); my $o2 = $o1->new; is $o2->attr, 1, 'original invoker passed to parent new'; } done_testing;