c5bcfd318c0065098d38cc814bead75599faaea2
[gitmo/Moose.git] / t / bugs / memory_leaks.t
1 use strict;
2 use warnings;
3
4 use Test::Requires {
5     'Test::LeakTrace' => '0.01',
6 };
7
8 use Test::More;
9
10 use Moose ();
11 use Moose::Util qw( apply_all_roles );
12
13 {
14     package MyRole;
15     use Moose::Role;
16     sub myname { "I'm a role" }
17 }
18
19 no_leaks_ok(
20     sub {
21         Moose::Meta::Class->create_anon_class->new_object;
22     },
23     'anonymous class with no roles is leak-free'
24 );
25
26 no_leaks_ok(
27     sub {
28         Moose::Meta::Role->initialize('MyRole2');
29     },
30     'Moose::Meta::Role->initialize is leak-free'
31 );
32
33 no_leaks_ok(
34     sub {
35         Moose::Meta::Class->create('MyClass2')->new_object;
36     },
37     'creating named class is leak-free'
38 );
39
40 no_leaks_ok(
41     sub {
42         Moose::Meta::Class->create( 'MyClass', roles => ['MyRole'] )
43             ->new_object;
44     },
45     'named class with roles is leak-free'
46 );
47
48 no_leaks_ok(
49     sub {
50         Moose::Meta::Role->create( 'MyRole2', roles => ['MyRole'] );
51     },
52     'named role with roles is leak-free'
53 );
54
55 no_leaks_ok(
56     sub {
57         my $object = Moose::Meta::Class->create('MyClass2')->new_object;
58         apply_all_roles( $object, 'MyRole' );
59     },
60     'applying role to an instance is leak-free'
61 );
62
63 no_leaks_ok(
64     sub {
65         Moose::Meta::Role->create_anon_role;
66     },
67     'anonymous role is leak-free'
68 );
69
70 no_leaks_ok(
71     sub {
72         my $meta = Moose::Meta::Class->create_anon_class;
73         $meta->make_immutable;
74         $meta->new_object;
75     },
76     'making an anon class immutable is leak-free'
77 );
78
79 done_testing;