Redid conversion to Test::Fatal
[gitmo/Moose.git] / t / 100_bugs / 023_DEMOLISH_fails_without_metaclass.t
CommitLineData
633776d0 1use strict;
2use warnings;
3
a28e50e4 4use Test::More;
b10dde3a 5use Test::Fatal;
633776d0 6
7{
8 package MyClass;
9 use Moose;
10
11 sub DEMOLISH { }
12}
13
14my $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.
19Class::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.
b10dde3a 24is( exception { $object->DESTROY }, undef, 'can call DESTROY on an object without a metaclass object in the CMOP cache' );
633776d0 25
26
27MyClass->meta->make_immutable;
28Class::MOP::remove_metaclass_by_name('MyClass');
29
30# The bug didn't manifest for immutable objects, but this test should
31# help us prevent it happening in the future.
b10dde3a 32is( exception { $object->DESTROY }, undef, 'can call DESTROY on an object without a metaclass object in the CMOP cache (immutable version)' );
a28e50e4 33
34done_testing;