Commit | Line | Data |
4c98ebb0 |
1 | use strict; |
2 | use warnings; |
3 | |
4 | use Test::More tests => 2; |
5 | use Test::Exception; |
6 | |
7 | { |
8 | package MyClass; |
9 | use Mouse; |
10 | |
11 | sub DEMOLISH { } |
12 | } |
13 | |
14 | my $object = MyClass->new; |
15 | |
16 | # Removing the metaclass simulates the case where the metaclass object |
17 | # goes out of scope _before_ the object itself, which under normal |
18 | # circumstances only happens during global destruction. |
19 | Class::MOP::remove_metaclass_by_name('MyClass'); |
20 | |
21 | # The bug happened when DEMOLISHALL called |
22 | # Class::MOP::class_of($object) and did not get a metaclass object |
23 | # back. |
24 | lives_ok { $object->DESTROY } |
25 | 'can call DESTROY on an object without a metaclass object in the CMOP cache'; |
26 | |
27 | |
28 | MyClass->meta->make_immutable; |
29 | Class::MOP::remove_metaclass_by_name('MyClass'); |
30 | |
31 | # The bug didn't manifest for immutable objects, but this test should |
32 | # help us prevent it happening in the future. |
33 | lives_ok { $object->DESTROY } |
34 | 'can call DESTROY on an object without a metaclass object in the CMOP cache (immutable version)'; |