use
lib
qw( ./lib ./t/lib ../inc ./inc )
;
{
::isa_ok(BigInteger,
"Mouse::Meta::TypeConstraint"
);
has
small
=> (
is
=>
"rw"
,
isa
=> SmallInteger,
coerce
=> 1);
has
big
=> (
is
=>
"rw"
,
isa
=> BigInteger,
coerce
=> 1);
}
my
(
$e
,
$o
);
my
$suffix
=
"mutable class"
;
for
(0..1)
{
$e
= exception {
$o
=
"Local::Class"
->new(
small
=> 104,
big
=> 9,
);
};
is(
$e
,
undef
,
"no exception on coercion in constructor - $suffix"
);
is(
$o
&&
$o
->big, 19,
"'big' attribute coerces in constructor - $suffix"
);
is(
$o
&&
$o
->small, 4,
"'small' attribute coerces in constructor - $suffix"
);
$e
= exception {
$o
=
"Local::Class"
->new(
small
=> [],
big
=> {},
);
};
isnt(
$e
,
undef
,
"'big' attribute throws when it cannot coerce in constructor - $suffix"
);
$e
= exception {
$o
=
"Local::Class"
->new(
small
=> {},
big
=> [],
);
};
isnt(
$e
,
undef
,
"'small' attribute throws when it cannot coerce in constructor - $suffix"
);
$o
=
"Local::Class"
->new;
$e
= exception {
$o
->big([]);
$o
->small([]);
};
is(
$o
&&
$o
->big, 100,
"'big' attribute coerces in accessor - $suffix"
);
is(
$o
&&
$o
->small, 1,
"'small' attribute coerces in accessor - $suffix"
);
$e
= exception {
$o
->big({}) };
isnt(
$e
,
undef
,
"'big' attribute throws when it cannot coerce in accessor - $suffix"
);
$e
= exception {
$o
->small({}) };
isnt(
$e
,
undef
,
"'small' attribute throws when it cannot coerce in accessor - $suffix"
);
"Local::Class"
->meta->make_immutable;
$suffix
=
"im$suffix"
;
}
done_testing;