Commit | Line | Data |
113a9693 |
1 | #!perl |
2 | # This is based on Class-MOP/t/312_anon_class_leak.t |
3 | use strict; |
4 | use warnings; |
5 | use Test::More; |
6 | |
7 | BEGIN { |
8 | eval "use Test::LeakTrace 0.10;"; |
9 | plan skip_all => "Test::LeakTrace 0.10 is required for this test" if $@; |
10 | } |
11 | |
12 | plan tests => 6; |
13 | |
14 | use Mouse (); |
15 | { |
16 | package MyRole; |
17 | use Mouse::Role; |
18 | |
19 | sub my_role_method{ } |
20 | } |
21 | |
22 | # 5.10.0 has a bug on weaken($hash_ref) which leaks an AV. |
23 | my $expected = ( $] == 5.010_000 ? 1 : 0 ); |
24 | |
25 | leaks_cmp_ok { |
26 | Mouse::Meta::Class->create_anon_class(); |
27 | } '<=', $expected, 'create_anon_class()'; |
28 | |
29 | leaks_cmp_ok { |
30 | Mouse::Meta::Class->create_anon_class(superclasses => ['Mouse::Meta::Class']); |
31 | } '<=', $expected, 'create_anon_class() with superclasses'; |
32 | |
33 | leaks_cmp_ok { |
34 | Mouse::Meta::Class->create_anon_class(attributes => [ |
35 | Mouse::Meta::Attribute->new('foo', is => 'bare'), |
36 | ]); |
37 | } '<=', $expected, 'create_anon_class() with attributes'; |
38 | |
39 | leaks_cmp_ok { |
40 | Mouse::Meta::Class->create_anon_class(roles => [qw(MyRole)]); |
41 | } '<=', $expected, 'create_anon_class() with roles'; |
42 | |
43 | |
44 | leaks_cmp_ok { |
45 | Mouse::Meta::Role->create_anon_role(); |
46 | } '<=', $expected, 'create_anon_role()'; |
47 | |
48 | if($] < 5.010){ |
49 | $expected = 2; # in MRO::Compat::get_linear_isa, maybe harmless |
50 | } |
51 | leaks_cmp_ok { |
52 | Mouse::Meta::Role->create_anon_role(roles => [qw(MyRole)]); |
53 | } '<=', $expected, 'create_anon_role() with roles'; |
54 | |