Commit | Line | Data |
7a50b450 |
1 | #!/usr/bin/env perl |
2 | use strict; |
3 | use warnings; |
4 | use Test::More tests => 4; |
43408273 |
5 | use Mouse::Role (); |
7a50b450 |
6 | use Scalar::Util 'weaken'; |
7 | |
8 | my $weak; |
9 | my $name; |
10 | do { |
11 | my $anon_class; |
12 | |
13 | do { |
14 | my $role = Mouse::Meta::Role->create_anon_role( |
15 | methods => { |
16 | improperly_freed => sub { 1 }, |
17 | }, |
18 | ); |
19 | weaken($weak = $role); |
20 | |
21 | $name = $role->name; |
22 | |
23 | $anon_class = Mouse::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"); |
29 | ok($name->can('improperly_freed'), "we have not blown away the role's symbol table"); |
30 | }; |
31 | |
32 | ok(!$weak, "the role metaclass is freed after its last reference (from a consuming anonymous class) is freed"); |
33 | |
34 | ok(!$name->can('improperly_freed'), "we blew away the role's symbol table entries"); |