diff options
Diffstat (limited to 't/exceptions/moose-util-metarole.t')
-rw-r--r-- | t/exceptions/moose-util-metarole.t | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/t/exceptions/moose-util-metarole.t b/t/exceptions/moose-util-metarole.t new file mode 100644 index 0000000..11e30af --- /dev/null +++ b/t/exceptions/moose-util-metarole.t @@ -0,0 +1,129 @@ +use strict; +use warnings; + +use Test::More; +use Test::Fatal; + +{ + { + package Foo; + use Moose; + } + + my $foo = Foo->new; + my $blessed_foo = blessed $foo; + my %args = ( "for" => $foo ); + + my $exception = exception { + Moose::Util::MetaRole::apply_metaroles( %args ); + }; + + my $message = "When using Moose::Util::MetaRole, " + ."you must pass a Moose class name, role name, metaclass object, or metarole object." + ." You passed $foo, and we resolved this to a $blessed_foo object."; + + like( + $exception, + qr/\Q$message/, + "$foo is an object, not a class"); + #When using Moose::Util::MetaRole, you must pass a Moose class name, role name, metaclass object, or metarole object. You passed Foo=HASH(0x16adb58), and we resolved this to a Foo object. + + isa_ok( + $exception, + 'Moose::Exception::InvalidArgPassedToMooseUtilMetaRole', + "$foo is an object, not a class"); + + is( + $exception->argument, + $foo, + "$foo is an object, not a class"); +} + +{ + my $array_ref = [1, 2, 3]; + my %args = ( "for" => $array_ref ); + + my $exception = exception { + Moose::Util::MetaRole::apply_metaroles( %args ); + }; + + my $message = "When using Moose::Util::MetaRole, " + ."you must pass a Moose class name, role name, metaclass object, or metarole object." + ." You passed $array_ref, and this did not resolve to a metaclass or metarole." + ." Maybe you need to call Moose->init_meta to initialize the metaclass first?"; + + like( + $exception, + qr/\Q$message/, + "an Array ref is passed to apply_metaroles"); + #When using Moose::Util::MetaRole, you must pass a Moose class name, role name, metaclass object, or metarole object. You passed ARRAY(0x21eb868), and this did not resolve to a metaclass or metarole. Maybe you need to call Moose->init_meta to initialize the metaclass first? + + isa_ok( + $exception, + 'Moose::Exception::InvalidArgPassedToMooseUtilMetaRole', + "an Array ref is passed to apply_metaroles"); + + is( + $exception->argument, + $array_ref, + "an Array ref is passed to apply_metaroles"); +} + +{ + my %args = ( "for" => undef ); + + my $exception = exception { + Moose::Util::MetaRole::apply_metaroles( %args ); + }; + + my $message = "When using Moose::Util::MetaRole, " + ."you must pass a Moose class name, role name, metaclass object, or metarole object." + ." You passed undef, and this did not resolve to a metaclass or metarole." + ." Maybe you need to call Moose->init_meta to initialize the metaclass first?"; + + like( + $exception, + qr/\Q$message/, + "undef passed to apply_metaroles"); + #When using Moose::Util::MetaRole, you must pass a Moose class name, role name, metaclass object, or metarole object. You passed undef, and this did not resolve to a metaclass or metarole. Maybe you need to call Moose->init_meta to initialize the metaclass first? + + isa_ok( + $exception, + 'Moose::Exception::InvalidArgPassedToMooseUtilMetaRole', + "undef passed to apply_metaroles"); + + is( + $exception->argument, + undef, + "undef passed to apply_metaroles"); +} + +{ + { + package Foo::Role; + use Moose::Role; + } + + my %args = ('for' => "Foo::Role" ); + + my $exception = exception { + Moose::Util::MetaRole::apply_base_class_roles( %args ); + }; + + like( + $exception, + qr/\QYou can only apply base class roles to a Moose class, not a role./, + "Moose::Util::MetaRole::apply_base_class_roles expects a class for 'for'"); + + isa_ok( + $exception, + 'Moose::Exception::CannotApplyBaseClassRolesToRole', + "Moose::Util::MetaRole::apply_base_class_roles expects a class for 'for'"); + + is( + $exception->role_name, + 'Foo::Role', + "Moose::Util::MetaRole::apply_base_class_roles expects a class for 'for'"); +} + +done_testing; |