5 'Test::LeakTrace' => '0.01',
6 'Test::Memory::Cycle' => '0',
12 use Moose::Util qw( apply_all_roles );
17 sub myname { "I'm a role" }
20 my $o = Data::Dumper->can('_dump'); *Data::Dumper::_dump = sub { Scalar::Util::isweak($_[1]) ? 'WEAK<'.&$o.'>' : &$o };
23 Moose::Meta::Class->create_anon_class->new_object;
25 'anonymous class with no roles is leak-free'
30 Moose::Meta::Role->initialize('MyRole2');
32 'Moose::Meta::Role->initialize is leak-free'
37 Moose::Meta::Class->create('MyClass2')->new_object;
39 'creating named class is leak-free'
44 Moose::Meta::Class->create( 'MyClass', roles => ['MyRole'] );
46 'named class with roles is leak-free'
51 Moose::Meta::Role->create( 'MyRole2', roles => ['MyRole'] );
53 'named role with roles is leak-free'
58 my $object = Moose::Meta::Class->create('MyClass2')->new_object;
59 apply_all_roles( $object, 'MyRole' );
61 'applying role to an instance is leak-free'
66 Moose::Meta::Role->create_anon_role;
68 'anonymous role is leak-free'
73 my $meta = Moose::Meta::Class->create_anon_class;
74 $meta->make_immutable;
76 'making an anon class immutable is leak-free'
80 my $meta3 = Class::MOP::Class->create('MyClass3');
81 memory_cycle_ok( $meta3, 'named metaclass object is cycle-free' );
82 memory_cycle_ok( $meta3->new_object, 'MyClass3 object is cycle-free' );
84 my $anon = Class::MOP::Class->create_anon_class;
85 memory_cycle_ok($anon, 'anon metaclass object is cycle-free' );
86 memory_cycle_ok( $anon->new_object, 'object from anon metaclass is cycle-free' );
88 $anon->make_immutable;
89 memory_cycle_ok($anon, 'immutable anon metaclass object is cycle-free' );
90 memory_cycle_ok( $anon->new_object, 'object from immutable anon metaclass is cycle-free' );