%PDF- %PDF-
Direktori : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/xt/ |
Current File : /home/opti/optisoftcom/.cpanm/work/1544535406.20768/Moo-2.003004/xt/moose-accessor-isa.t |
use Moo::_strictures; use Test::More; use Test::Fatal; { package FrewWithIsa; use Moo::Role; use Sub::Quote; has frooh => ( is => 'rw', isa => sub { die 'not int' unless $_[0] =~ /^\d$/ }, ); has frew => ( is => 'rw', isa => quote_sub(q{ die 'not int' unless $_[0] =~ /^\d$/ }), ); package Bar; use Moose; with 'FrewWithIsa'; package OffByOne; use Moo::Role; has off_by_one => (is => 'rw', coerce => sub { $_[0] + 1 }); package Baz; use Moo; with 'OffByOne'; package Quux; use Moose; with 'OffByOne'; __PACKAGE__->meta->make_immutable; } is(exception { Bar->new(frooh => 1, frew => 1); }, undef, 'creation of valid Bar'); ok exception { Bar->new(frooh => 'silly', frew => 1); }, 'creation of invalid Bar validated by coderef'; ok exception { Bar->new(frooh => 1, frew => 'goose'); }, 'creation of invalid Bar validated by quoted sub'; sub test_off_by_one { my ($class, $type) = @_; my $obo = $class->new(off_by_one => 1); is($obo->off_by_one, 2, "Off by one (new) ($type)"); $obo->off_by_one(41); is($obo->off_by_one, 42, "Off by one (set) ($type)"); } test_off_by_one('Baz', 'Moo'); test_off_by_one('Quux', 'Moose'); my $coerce_constraint = Quux->meta->get_attribute('off_by_one') ->type_constraint->constraint; like exception { $coerce_constraint->() }, qr/This is not going to work/, 'generated constraint is not a null constraint'; done_testing;