trAvis - MANAGER
Edit File: custom_error_class.t
use strict; use warnings; use Test::More; use Test::Requires { 'Test::Output' => '0.01', }; { package My::Exception; use Moose; has error => ( is => 'ro', isa => 'Str', required => 1, ); has [qw( line file package )] => ( is => 'ro', required => 1, ); sub throw { my ($self) = @_; die $self; } } { package My::Error; use base qw( Moose::Error::Default ); sub new { my ( $self, @args ) = @_; $self->create_error_exception(@args)->throw; } sub create_error_exception { my ( $self, %params ) = @_; my $exception = My::Exception->new( error => $params{message}, line => $params{line}, file => $params{file}, package => $params{pack}, ); return $exception; } } { package My::Class; use Moose; __PACKAGE__->meta->error_class("My::Error"); has 'test1' => ( is => 'rw', required => 1, ); ::stderr_is( sub { __PACKAGE__->meta->make_immutable }, q{}, 'no warnings when calling make_immutable with a custom error class' ); } { package My::ClassMutable; use Moose; __PACKAGE__->meta->error_class("My::Error"); has 'test1' => ( is => 'rw', required => 1, ); } { eval { package My::Test; # line 42 My::Class->new; }; my $error = $@; isa_ok( $error, 'My::Exception', 'got exception object (immutable class)' ); is( $error->error, 'Attribute (test1) is required', 'got the right message (immutable class)' ); is( $error->package, 'My::Test', 'got the right package (immutable class)' ); is( $error->line, 42, 'got the right line (immutable class)' ); } { eval { package My::TestMutable; # line 42 My::ClassMutable->new; }; my $error = $@; isa_ok( $error, 'My::Exception', 'got exception object (mutable class)' ); is( $error->error, 'Attribute (test1) is required', 'got the right message (mutable class)' ); } done_testing;