use
lib
qw( ./lib ./t/lib ../inc ./inc )
;
{
has
small
=> (
is
=>
"ro"
,
isa
=> SmallInteger);
has
big
=> (
is
=>
"ro"
,
isa
=> BigInteger);
}
note explain(\
%Moo::HandleMoose::TYPE_MAP
);
my
$state
=
"Moose is not loaded"
;
for
(0..1)
{
is(
exception {
"Local::Class"
->new(
small
=> 9,
big
=> 12) },
undef
,
"some values that should pass their type constraint - $state"
,
);
ok(
exception {
"Local::Class"
->new(
small
=> 100) },
"direct violation of type constraint - $state"
,
);
ok(
exception {
"Local::Class"
->new(
small
=> 5.5) },
"violation of parent type constraint - $state"
,
);
ok(
exception {
"Local::Class"
->new(
small
=>
"five point five"
) },
"violation of grandparent type constraint - $state"
,
);
ok(
exception {
"Local::Class"
->new(
small
=> []) },
"violation of great-grandparent type constraint - $state"
,
);
eval
q{
require Moose; Moose->VERSION(2.0000);
"Local::Class"->meta->get_attribute("small");
"Local::Class"->meta->get_attribute("big");
$state = "Moose is loaded";
}
;
}
$state
eq
'Moose is loaded'
? is(
"Local::Class"
->meta->get_attribute(
"small"
)->type_constraint->name,
"SmallInteger"
,
"type constraint metaobject inflates from Moo to Moose"
,
)
: pass(
"redundant test"
);
done_testing;