diff options
Diffstat (limited to 't/cmop/random_eval_bug.t')
-rw-r--r-- | t/cmop/random_eval_bug.t | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/t/cmop/random_eval_bug.t b/t/cmop/random_eval_bug.t new file mode 100644 index 0000000..285edb0 --- /dev/null +++ b/t/cmop/random_eval_bug.t @@ -0,0 +1,51 @@ +use strict; +use warnings; + +use Test::More; + +use Class::MOP; + +=pod + +This tests a bug which is fixed in 0.22 by localizing all the $@'s around any +evals. + +This a real pain to track down. + +Moral of the story: + + ALWAYS localize your globals :) + +=cut + +{ + package Company; + use strict; + use warnings; + use metaclass; + + sub new { + my ($class) = @_; + return bless {} => $class; + } + + sub employees { + die "This didnt work"; + } + + sub DESTROY { + my $self = shift; + foreach + my $method ( $self->meta->find_all_methods_by_name('DEMOLISH') ) { + $method->{code}->($self); + } + } +} + +eval { + my $c = Company->new(); + $c->employees(); +}; +ok( $@, '... we die correctly with bad args' ); + +done_testing; |