From: Dave Rolsky Date: Mon, 6 Apr 2009 17:42:24 +0000 (-0500) Subject: Add a test for t0m's DEMOLISH bug X-Git-Tag: 0.73_02~5 X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=633776d05c3bbfd3c003e3bcab43ed8984156aca;p=gitmo%2FMoose.git Add a test for t0m's DEMOLISH bug --- diff --git a/t/100_bugs/023_DEMOLISH_fails_without_metaclass.t b/t/100_bugs/023_DEMOLISH_fails_without_metaclass.t new file mode 100644 index 0000000..7e9b9b9 --- /dev/null +++ b/t/100_bugs/023_DEMOLISH_fails_without_metaclass.t @@ -0,0 +1,34 @@ +use strict; +use warnings; + +use Test::More tests => 2; +use Test::Exception; + +{ + package MyClass; + use Moose; + + sub DEMOLISH { } +} + +my $object = MyClass->new; + +# Removing the metaclass simulates the case where the metaclass object +# goes out of scope _before_ the object itself, which under normal +# circumstances only happens during global destruction. +Class::MOP::remove_metaclass_by_name('MyClass'); + +# The bug happened when DEMOLISHALL called +# Class::MOP::class_of($object) and did not get a metaclass object +# back. +lives_ok { $object->DESTROY } +'can call DESTROY on an object without a metaclass object in the CMOP cache'; + + +MyClass->meta->make_immutable; +Class::MOP::remove_metaclass_by_name('MyClass'); + +# The bug didn't manifest for immutable objects, but this test should +# help us prevent it happening in the future. +lives_ok { $object->DESTROY } +'can call DESTROY on an object without a metaclass object in the CMOP cache (immutable version)';