{
my
$exception
= exception {
subtype
'Foo-Baz'
=> as
'Item'
};
like(
$exception
,
qr/contains invalid characters/
,
"Type names cannot contain a dash (via subtype sugar)"
);
isa_ok(
$exception
,
"Moose::Exception::InvalidNameForType"
,
"Type names cannot contain a dash (via subtype sugar)"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::create_type_constraint_union();
};
like(
$exception
,
qr/You must pass in at least 2 type names to make a union/
,
"Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments"
);
isa_ok(
$exception
,
"Moose::Exception::UnionTakesAtleastTwoTypeNames"
,
"Moose::Util::TypeConstraints::create_type_constraint_union takes atleast two arguments"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::create_type_constraint_union(
'foo'
,
'bar'
);
};
like(
$exception
,
qr/\QCould not locate type constraint (foo) for the union/
,
"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union"
);
isa_ok(
$exception
,
"Moose::Exception::CouldNotLocateTypeConstraintForUnion"
,
"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union"
);
is(
$exception
->type_name,
'foo'
,
"invalid typeconstraint given to Moose::Util::TypeConstraints::create_type_constraint_union"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::create_parameterized_type_constraint(
"Foo"
);
};
like(
$exception
,
qr/\QCould not parse type name (Foo) correctly/
,
"'Foo' is not a valid type constraint name"
);
isa_ok(
$exception
,
"Moose::Exception::InvalidTypeGivenToCreateParameterizedTypeConstraint"
,
"'Foo' is not a valid type constraint name"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::create_parameterized_type_constraint(
"Foo[Int]"
);
};
like(
$exception
,
qr/\QCould not locate the base type (Foo)/
,
"'Foo' is not a valid base type constraint name"
);
isa_ok(
$exception
,
"Moose::Exception::InvalidBaseTypeGivenToCreateParameterizedTypeConstraint"
,
"'Foo' is not a valid base type constraint name"
);
}
{
{
}
my
$exception
= exception {
Moose::Util::TypeConstraints::class_type(
"Foo1"
);
};
like(
$exception
,
qr/\QThe type constraint 'Foo1' has already been created in Moose::Role and cannot be created again in main/
,
"there is an already defined role of name 'Foo1'"
);
isa_ok(
$exception
,
"Moose::Exception::TypeConstraintIsAlreadyCreated"
,
"there is an already defined role of name 'Foo1'"
);
is(
$exception
->type_name,
'Foo1'
,
"there is an already defined role of name 'Foo1'"
);
is(
(find_type_constraint(
$exception
->type_name))->_package_defined_in,
'Moose::Role'
,
"there is an already defined role of name 'Foo1'"
);
is(
$exception
->package_defined_in,
'main'
,
"there is an already defined role of name 'Foo1'"
);
}
{
{
}
my
$exception
= exception {
Moose::Util::TypeConstraints::role_type(
"Foo2"
);
};
like(
$exception
,
qr/\QThe type constraint 'Foo2' has already been created in Moose and cannot be created again in main/
,
"there is an already defined class of name 'Foo2'"
);
isa_ok(
$exception
,
"Moose::Exception::TypeConstraintIsAlreadyCreated"
,
"there is an already defined class of name 'Foo2'"
);
is(
$exception
->type_name,
'Foo2'
,
"there is an already defined class of name 'Foo2'"
);
is(
(find_type_constraint(
$exception
->type_name))->_package_defined_in,
'Moose'
,
"there is an already defined class of name 'Foo2'"
);
is(
$exception
->package_defined_in,
'main'
,
"there is an already defined class of name 'Foo2'"
);
}
{
my
$exception
= exception {
subtype
'Foo'
;
};
like(
$exception
,
qr/A subtype cannot consist solely of a name, it must have a parent/
,
"no parent given to subtype"
);
isa_ok(
$exception
,
"Moose::Exception::NoParentGivenToSubtype"
,
"no parent given to subtype"
);
is(
$exception
->name,
'Foo'
,
"no parent given to subtype"
);
}
{
my
$exception
= exception {
enum [1,2,3],
"foo"
;
};
like(
$exception
,
qr/\Qenum called with an array reference and additional arguments. Did you mean to parenthesize the enum call's parameters?/
,
"enum expects either a name & an array or only an array"
);
isa_ok(
$exception
,
"Moose::Exception::EnumCalledWithAnArrayRefAndAdditionalArgs"
,
"enum expects either a name & an array or only an array"
);
}
{
my
$exception
= exception {
union [1,2,3],
"foo"
;
};
like(
$exception
,
qr/union called with an array reference and additional arguments/
,
"union expects either a name & an array or only an array"
);
isa_ok(
$exception
,
"Moose::Exception::UnionCalledWithAnArrayRefAndAdditionalArgs"
,
"union expects either a name & an array or only an array"
);
}
{
{
}
my
$exception
= exception {
Moose::Util::TypeConstraints::type(
"Foo3"
);
};
like(
$exception
,
qr/\QThe type constraint 'Foo3' has already been created in Moose and cannot be created again in main/
,
"there is an already defined class of name 'Foo3'"
);
isa_ok(
$exception
,
"Moose::Exception::TypeConstraintIsAlreadyCreated"
,
"there is an already defined class of name 'Foo3'"
);
is(
$exception
->type_name,
'Foo3'
,
"there is an already defined class of name 'Foo3'"
);
is(
find_type_constraint(
$exception
->type_name)->_package_defined_in,
'Moose'
,
"there is an already defined class of name 'Foo3'"
);
is(
$exception
->package_defined_in,
'main'
,
"there is an already defined class of name 'Foo3'"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::coerce
"Foo"
;
};
like(
$exception
,
qr/Cannot find type 'Foo', perhaps you forgot to load it/
,
"'Foo' is not a valid type"
);
isa_ok(
$exception
,
"Moose::Exception::CannotFindType"
,
"'Foo' is not a valid type"
);
}
{
my
$exception
= exception {
Moose::Util::TypeConstraints::add_parameterizable_type
"Foo"
;
};
like(
$exception
,
qr/Type must be a Moose::Meta::TypeConstraint::Parameterizable not Foo/
,
"'Foo' is not a parameterizable type"
);
isa_ok(
$exception
,
"Moose::Exception::AddParameterizableTypeTakesParameterizableType"
,
"'Foo' is not a parameterizable type"
);
is(
$exception
->type_name,
"Foo"
,
"'Foo' is not a parameterizable type"
);
}
done_testing;