use strict; use warnings; use Test::More; use Test::Fatal; use Moose(); { { package Foo; use Moose::Role; } my $exception = exception { Foo->meta->has_method; }; like( $exception, qr/\QYou must define a method name/, "no method name is given"); isa_ok( $exception, "Moose::Exception::MustDefineAMethodName", "no method name is given"); is( $exception->instance, Foo->meta, "no method name is given"); } { { package Foo; use Moose::Role; } my $exception = exception { Foo->meta->add_method; }; like( $exception, qr/\QYou must define a method name/, "no method name is given"); isa_ok( $exception, "Moose::Exception::MustDefineAMethodName", "no method name is given"); is( $exception->instance, Foo->meta, "no method name is given"); } { { package Foo; use Moose::Role; } my $exception = exception { Foo->meta->get_method; }; like( $exception, qr/\QYou must define a method name/, "no method name is given"); isa_ok( $exception, "Moose::Exception::MustDefineAMethodName", "no method name is given"); is( $exception->instance, Foo->meta, "no method name is given"); } { { package Foo; use Moose::Role; } my $exception = exception { Foo->meta->remove_method; }; like( $exception, qr/\QYou must define a method name/, "no method name is given"); isa_ok( $exception, "Moose::Exception::MustDefineAMethodName", "no method name is given"); is( $exception->instance, Foo->meta, "no method name is given"); } { { package Bar::Role; use Moose::Role; } my $meta = Bar::Role->meta; my $exception = exception { $meta->wrap_method_body; }; like( $exception, qr/Your code block must be a CODE reference/, "no arguments passed to wrap_method_body"); isa_ok( $exception, "Moose::Exception::CodeBlockMustBeACodeRef", "no arguments passed to wrap_method_body"); is( $exception->instance, $meta, "no arguments passed to wrap_method_body"); } done_testing;