49b3690eede52adf6db9085fe99ef75bded0d508
[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     },
44     'named class with roles is leak-free'
45 );
46
47 no_leaks_ok(
48     sub {
49         Moose::Meta::Role->create( 'MyRole2', roles => ['MyRole'] );
50     },
51     'named role with roles is leak-free'
52 );
53
54 no_leaks_ok(
55     sub {
56         my $object = Moose::Meta::Class->create('MyClass2')->new_object;
57         apply_all_roles( $object, 'MyRole' );
58     },
59     'applying role to an instance is leak-free'
60 );
61
62 no_leaks_ok(
63     sub {
64         Moose::Meta::Role->create_anon_role;
65     },
66     'anonymous role is leak-free'
67 );
68
69 no_leaks_ok(
70     sub {
71         my $meta = Moose::Meta::Class->create_anon_class;
72         $meta->make_immutable;
73     },
74     'making an anon class immutable is leak-free'
75 );
76
77 done_testing;