Blame t/moo_lazy_subclass.t
|
Packit |
90fbfc |
use strict;
|
|
Packit |
90fbfc |
use warnings;
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
use Test::More;
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
# ABSTRACT: Make sure subclassing the name is easy and lazy
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
BEGIN {
|
|
Packit |
90fbfc |
eval "require Moo; 1"
|
|
Packit |
90fbfc |
or plan skip_all => "Moo required for this test";
|
|
Packit |
90fbfc |
}
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
use CPAN::Changes::Group;
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
{
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
package CustomGroup;
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
use Moo;
|
|
Packit |
90fbfc |
extends 'CPAN::Changes::Group';
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
has 'name' => ( is => ro =>, lazy => 1, builder => '_build_name' );
|
|
Packit |
90fbfc |
has 'flavour' => ( is => ro =>, lazy => 1, builder => '_build_flavour' );
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
sub _build_name {
|
|
Packit |
90fbfc |
my ($self) = @_;
|
|
Packit |
90fbfc |
return 'Custom::Name / ' . $self->flavour;
|
|
Packit |
90fbfc |
}
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
sub _build_flavour {
|
|
Packit |
90fbfc |
return 'Vanilla';
|
|
Packit |
90fbfc |
}
|
|
Packit |
90fbfc |
}
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
subtest 'nameonly' => sub {
|
|
Packit |
90fbfc |
my $object = CustomGroup->new( name => 'Bob' );
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
is( $object->name, 'Bob', 'Constructor attribute passthrough' );
|
|
Packit |
90fbfc |
is( $object->flavour, 'Vanilla', 'Default flavour still exists' );
|
|
Packit |
90fbfc |
};
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
subtest 'flavouronly' => sub {
|
|
Packit |
90fbfc |
my $object = CustomGroup->new( flavour => 'Earwax' );
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
is(
|
|
Packit |
90fbfc |
$object->name,
|
|
Packit |
90fbfc |
'Custom::Name / Earwax',
|
|
Packit |
90fbfc |
'Constructor attribute affects name lazily'
|
|
Packit |
90fbfc |
);
|
|
Packit |
90fbfc |
is( $object->flavour, 'Earwax', 'Passed flavour propagates' );
|
|
Packit |
90fbfc |
};
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
subtest 'noargs' => sub {
|
|
Packit |
90fbfc |
my $object = CustomGroup->new();
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
is(
|
|
Packit |
90fbfc |
$object->name,
|
|
Packit |
90fbfc |
'Custom::Name / Vanilla',
|
|
Packit |
90fbfc |
'Default attribute affects name lazily'
|
|
Packit |
90fbfc |
);
|
|
Packit |
90fbfc |
is( $object->flavour, 'Vanilla', 'Default flavour propagates' );
|
|
Packit |
90fbfc |
};
|
|
Packit |
90fbfc |
|
|
Packit |
90fbfc |
done_testing;
|