use
lib
qw( ./lib ./t/lib ../inc ./inc )
;
my
$e
;
my
$o
;
{
::isa_ok(BigInteger,
"Moose::Meta::TypeConstraint"
);
has
small
=> (
is
=>
"rw"
,
isa
=> SmallInteger,
coerce
=> 1);
has
big
=> (
is
=>
"rw"
,
isa
=> BigInteger,
coerce
=> 1);
has
big_nc
=> (
is
=>
"rw"
,
isa
=> BigInteger->no_coercions,
coerce
=> 0);
}
my
$suffix
=
"mutable class"
;
for
my
$i
(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
=> {},
);
};
is(
$e
,
matchfor(
$i
?
'Moose::Exception::ValidationFailedForInlineTypeConstraint'
:
'Moose::Exception::ValidationFailedForTypeConstraint'
,
qr{^Attribute \(big\)}
),
"'big' attribute throws when it cannot coerce in constructor - $suffix"
,
);
$e
= exception {
$o
=
"Local::Class"
->new(
small
=> {},
big
=> [],
);
};
is(
$e
,
matchfor(
$i
?
'Moose::Exception::ValidationFailedForInlineTypeConstraint'
:
'Moose::Exception::ValidationFailedForTypeConstraint'
,
qr{^Attribute \(small\)}
),
"'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({}) };
is(
$e
,
matchfor(
'Moose::Exception::ValidationFailedForInlineTypeConstraint'
,
qr{^Attribute \(big\)}
),
"'big' attribute throws when it cannot coerce in accessor - $suffix"
,
);
$e
= exception {
$o
->small({}) };
is(
$e
,
matchfor(
'Moose::Exception::ValidationFailedForInlineTypeConstraint'
,
qr{^Attribute \(small\)}
),
"'small' attribute throws when it cannot coerce in accessor - $suffix"
,
);
"Local::Class"
->meta->make_immutable;
$suffix
=
"im$suffix"
;
}
done_testing;