{
my
$exception
= exception {
Moose::Meta::Class->create(
'Made::Of::Fail'
,
superclasses
=> [
'Class'
],
roles
=>
'Foo'
,
);
};
like(
$exception
,
qr/You must pass an ARRAY ref of roles/
,
"create takes an Array of roles"
);
isa_ok(
$exception
,
"Moose::Exception::RolesInCreateTakesAnArrayRef"
,
"create takes an Array of roles"
);
}
{
{
}
my
$exception
= exception {
Foo->meta->add_role(
'Bar'
);
};
like(
$exception
,
qr/Roles must be instances of Moose::Meta::Role/
,
"add_role takes an instance of Moose::Meta::Role"
);
isa_ok(
$exception
,
'Moose::Exception::AddRoleTakesAMooseMetaRoleInstance'
,
"add_role takes an instance of Moose::Meta::Role"
);
is(
$exception
->class_name,
'Foo'
,
"add_role to Moose::Meta::Role takes instances of Moose::Meta::Role"
);
is(
$exception
->role_to_be_added,
"Bar"
,
"add_role to Moose::Meta::Role takes instances of Moose::Meta::Role"
);
}
{
my
$exception
= exception {
Foo->meta->add_role_application();
};
like(
$exception
,
qr/Role applications must be instances of Moose::Meta::Role::Application::ToClass/
,
"bar is not an instance of Moose::Meta::Role::Application::ToClass"
);
isa_ok(
$exception
,
"Moose::Exception::InvalidRoleApplication"
,
"bar is not an instance of Moose::Meta::Role::Application::ToClass"
);
}
{
{
}
my
$exception
= exception {
Foo->meta->does_role;
};
like(
$exception
,
qr/You must supply a role name to look for/
,
"Cannot call does_role without a role name"
);
isa_ok(
$exception
,
'Moose::Exception::RoleNameRequired'
,
"Cannot call does_role without a role name"
);
is(
$exception
->class_name,
'Foo'
,
"Cannot call does_role without a role name"
);
}
{
{
}
my
$exception
= exception {
Foo->meta->excludes_role;
};
like(
$exception
,
qr/You must supply a role name to look for/
,
"Cannot call excludes_role without a role name"
);
isa_ok(
$exception
,
'Moose::Exception::RoleNameRequired'
,
"Cannot call excludes_role without a role name"
);
is(
$exception
->class_name,
'Foo'
,
"Cannot call excludes_role without a role name"
);
}
{
my
$exception
= exception {
__PACKAGE__->meta->make_immutable;
Foo->new([])
};
like(
$exception
,
qr/^\QSingle parameters to new() must be a HASH ref/
,
"A single non-hashref arg to a constructor throws an error"
);
isa_ok(
$exception
,
"Moose::Exception::SingleParamsToNewMustBeHashRef"
,
"A single non-hashref arg to a constructor throws an error"
);
}
{
{
has
'baz'
=> (
is
=>
'ro'
,
isa
=>
'Int'
,
required
=> 1,
);
__PACKAGE__->meta->make_immutable;
}
my
$exception
= exception {
my
$test1
= Foo2->new;
};
like(
$exception
,
qr/\QAttribute (baz) is required/
,
"... must supply all the required attribute"
);
isa_ok(
$exception
,
"Moose::Exception::AttributeIsRequired"
,
"... must supply all the required attribute"
);
is(
$exception
->attribute_name,
'baz'
,
"... must supply all the required attribute"
);
isa_ok(
$exception
->class_name,
'Foo2'
,
"... must supply all the required attribute"
);
}
{
{
}
my
$exception
= exception {
};
like(
$exception
,
qr/^\QYou cannot inherit from a Moose Role (Bar)/
,
"Class cannot extend a role"
);
isa_ok(
$exception
,
'Moose::Exception::CanExtendOnlyClasses'
,
"Class cannot extend a role"
);
is(
$exception
->role_name,
'Bar'
,
"Class cannot extend a role"
);
}
{
my
$exception
= exception {
sub
foo2 {}
override
foo2
=>
sub
{};
};
like(
$exception
,
qr/Cannot add an override method if a local method is already present/
,
"there is already a method named foo2 defined in the class, so you can't override it"
);
isa_ok(
$exception
,
'Moose::Exception::CannotOverrideLocalMethodIsPresent'
,
"there is already a method named foo2 defined in the class, so you can't override it"
);
is(
$exception
->class_name,
'Foo'
,
"there is already a method named foo2 defined in the class, so you can't override it"
);
is(
$exception
->method->name,
'foo2'
,
"there is already a method named foo2 defined in the class, so you can't override it"
);
}
{
my
$exception
= exception {
sub
foo {}
augment
foo
=>
sub
{};
};
like(
$exception
,
qr/Cannot add an augment method if a local method is already present/
,
"there is already a method named foo defined in the class"
);
isa_ok(
$exception
,
'Moose::Exception::CannotAugmentIfLocalMethodPresent'
,
"there is already a method named foo defined in the class"
);
is(
$exception
->class_name,
'Foo'
,
"there is already a method named foo defined in the class"
);
is(
$exception
->method->name,
'foo'
,
"there is already a method named foo defined in the class"
);
}
{
{
}
my
$exception
= exception {
has
'+bar'
=> (
default
=> 100 );
};
like(
$exception
,
qr/Could not find an attribute by the name of 'bar' to inherit from in Test2/
,
"attribute 'bar' is not defined in the super class"
);
isa_ok(
$exception
,
"Moose::Exception::NoAttributeFoundInSuperClass"
,
"attribute 'bar' is not defined in the super class"
);
}
done_testing;