Add various things
[gitmo/Mouse.git] / t / 030_roles / 036_free_anonymous_roles.t
1 #!/usr/bin/env perl
2 use strict;
3 use warnings;
4 use Test::More tests => 4;
5 use Mouse ();
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");