summaryrefslogtreecommitdiff
path: root/t/cmop/random_eval_bug.t
diff options
context:
space:
mode:
Diffstat (limited to 't/cmop/random_eval_bug.t')
-rw-r--r--t/cmop/random_eval_bug.t51
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;