use strict; use warnings; use Test::More; use Test::Fatal; use Moose(); { my $xyz = bless [], "Bar"; my $class; my $exception = exception { $class = Class::MOP::Class->create("Foo", (attributes => [$xyz])); }; like( $exception, qr/\QYour attribute must be an instance of Class::MOP::Mixin::AttributeCore (or a subclass)/, "an Array ref blessed into Bar is given to create"); isa_ok( $exception, "Moose::Exception::AttributeMustBeAnClassMOPMixinAttributeCoreOrSubclass", "an Array ref blessed into Bar is given to create"); is( $exception->attribute, $xyz, "an Array ref blessed into Bar is given to create"); } { my $class = Class::MOP::Class->create("Foo"); my $exception = exception { $class->has_attribute; }; like( $exception, qr/You must define an attribute name/, "attribute name is not given"); isa_ok( $exception, "Moose::Exception::MustDefineAnAttributeName", "attribute name is not given"); is( $exception->class_name, 'Foo', "attribute name is not given"); } { my $class = Class::MOP::Class->create("Foo"); my $exception = exception { $class->get_attribute; }; like( $exception, qr/You must define an attribute name/, "attribute name is not given"); isa_ok( $exception, "Moose::Exception::MustDefineAnAttributeName", "attribute name is not given"); is( $exception->class_name, "Foo", "attribute name is not given"); } { my $class = Class::MOP::Class->create("Foo"); my $exception = exception { $class->remove_attribute; }; like( $exception, qr/You must define an attribute name/, "attribute name is not given"); isa_ok( $exception, "Moose::Exception::MustDefineAnAttributeName", "attribute name is not given"); is( $exception->class_name, "Foo", "attribute name is not given"); } done_testing;