test array delegation edge cases
[gitmo/Moose.git] / t / 030_roles / 036_free_anonymous_roles.t
CommitLineData
db121d24 1#!/usr/bin/env perl
2use strict;
3use warnings;
a28e50e4 4use Test::More;
db121d24 5use Moose ();
6use Scalar::Util 'weaken';
7
8my $weak;
941d8c32 9my $name;
db121d24 10do {
11 my $anon_class;
12
13 do {
941d8c32 14 my $role = Moose::Meta::Role->create_anon_role(
15 methods => {
16 improperly_freed => sub { 1 },
17 },
18 );
db121d24 19 weaken($weak = $role);
20
941d8c32 21 $name = $role->name;
22
db121d24 23 $anon_class = Moose::Meta::Class->create_anon_class(
24 roles => [ $role->name ],
25 );
26 };
27
28 ok($weak, "we still have the role metaclass because the anonymous class that consumed it is still alive");
941d8c32 29 ok($name->can('improperly_freed'), "we have not blown away the role's symbol table");
db121d24 30};
31
d1765290 32ok(!$weak, "the role metaclass is freed after its last reference (from a consuming anonymous class) is freed");
db121d24 33
941d8c32 34ok(!$name->can('improperly_freed'), "we blew away the role's symbol table entries");
a28e50e4 35
36done_testing;