sub _generate_isa_check {
my ($self, $name, $value, $check) = @_;
- $self->_generate_call_code($name, 'isa_check', $value, $check);
+ "{\n"
+ .' my $sig_die = $SIG{__DIE__} || sub { die $_[0] };'."\n"
+ .' local $SIG{__DIE__} = sub {'."\n"
+ .' $sig_die->(ref($_[0]) ? $_[0] : q{isa check for '.perlstring($name).' failed: }.$_[0]);'."\n"
+ .' };'."\n"
+ .$self->_generate_call_code($name, 'isa_check', $value, $check)
+ ."}\n"
}
sub _generate_call_code {
like(
exception { $obj->less_than_three(4) },
- qr/4 is not less than three/, "exception thrown on bad set (${class})"
+ qr/isa check for "less_than_three" failed: 4 is not less than three/,
+ "exception thrown on bad set (${class})"
);
is($obj->less_than_three, 1, "initial value remains after bad set (${class})");
is(exception { $class->new }, undef, "no exception with no value (${class})");
like(
exception { $class->new(less_than_three => 12) },
- qr/12 is not less than three/,
+ qr/isa check for "less_than_three" failed: 12 is not less than three/,
"exception thrown on bad constructor arg (${class})"
);
}
like(
exception { LazyFoo->new->less_than_three },
- qr/4 is not less than three/,
+ qr/isa check for "less_than_three" failed: 4 is not less than three/,
"exception thrown on bad builder return value (LazyFoo)"
);