diff options
Diffstat (limited to 't/exceptions/stringify.t')
-rw-r--r-- | t/exceptions/stringify.t | 111 |
1 files changed, 111 insertions, 0 deletions
diff --git a/t/exceptions/stringify.t b/t/exceptions/stringify.t new file mode 100644 index 0000000..7a7f0c4 --- /dev/null +++ b/t/exceptions/stringify.t @@ -0,0 +1,111 @@ +use strict; +use warnings; + +use Test::More; +use Try::Tiny; + +{ + my $e; + { + package Foo; + use Moose; + use Try::Tiny; + + try { + has '+foo' => ( is => 'ro' ); + } + catch { + $e = $_; + }; + } + + ok( $e, q{got an exception from a bad has '+foo' declaration} ); + like( + $e->as_string, + qr/\QCould not find an attribute by the name of 'foo' to inherit from in Foo/, + 'stringification includes the error message' + ); + like( + $e->as_string, + qr/\s+Moose::has/, + 'stringification includes the call to Moose::has' + ); + unlike( + $e->as_string, + qr/Moose::Meta/, + 'stringification does not include internal calls to Moose meta classes' + ); + + try { + Foo->meta->clone_object( [] ); + } + catch { + $e = $_; + }; + + like( + $e->as_string, + qr/Class::MOP::Class::clone_object/, + 'exception include first Class::MOP::Class frame' + ); + unlike( + $e->as_string, + qr/Class::MOP::Mixin::_throw_exception/, + 'exception does not include internal calls toClass::MOP::Class meta classes' + ); +} + +local $ENV{MOOSE_FULL_EXCEPTION} = 1; +{ + my $e; + { + package Bar; + use Moose; + use Try::Tiny; + + try { + has '+foo' => ( is => 'ro' ); + } + catch { + $e = $_; + }; + } + + ok( $e, q{got an exception from a bad has '+foo' declaration} ); + like( + $e->as_string, + qr/\QCould not find an attribute by the name of 'foo' to inherit from in Bar/, + 'stringification includes the error message' + ); + like( + $e->as_string, + qr/\s+Moose::has/, + 'stringification includes the call to Moose::has' + ); + like( + $e->as_string, + qr/Moose::Meta/, + 'stringification includes internal calls to Moose meta classes when MOOSE_FULL_EXCEPTION env var is true' + ); + + + try { + Foo->meta->clone_object( [] ); + } + catch { + $e = $_; + }; + + like( + $e->as_string, + qr/Class::MOP::Class::clone_object/, + 'exception include first Class::MOP::Class frame' + ); + like( + $e->as_string, + qr/Class::MOP::Mixin::_throw_exception/, + 'exception includes internal calls toClass::MOP::Class meta classes when MOOSE_FULL_EXCEPTION env var is true' + ); +} + +done_testing; |