got rid of all the use_ok junk except for 000_load.t
[gitmo/Class-MOP.git] / t / 019_anon_class_keep_alive.t
CommitLineData
a06797b0 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
efd3d14c 6use Test::More tests => 10;
a06797b0 7use Test::Exception;
8
efd3d14c 9use Class::MOP;
a06797b0 10
11my $anon_class_name;
12my $anon_meta_name;
13{
14 package Foo;
15 use strict;
16 use warnings;
17 use metaclass;
18
19 sub make_anon_instance{
20 my $self = shift;
21 my $class = ref $self || $self;
22
23 my $anon_class = Class::MOP::Class->create_anon_class(superclasses => [$class]);
24 $anon_class_name = $anon_class->name;
11b56828 25 $anon_meta_name = Scalar::Util::blessed($anon_class);
a06797b0 26 $anon_class->add_attribute( $_, reader => $_ ) for qw/bar baz/;
27
28 my $obj = $anon_class->new_object(bar => 'a', baz => 'b');
a06797b0 29 return $obj;
30 }
31
32 sub foo{ 'foo' }
33
34 1;
35}
36
37my $instance = Foo->make_anon_instance;
38
39isa_ok($instance, $anon_class_name);
40isa_ok($instance->meta, $anon_meta_name);
41isa_ok($instance, 'Foo', '... Anonymous instance isa Foo');
42
43ok($instance->can('foo'), '... Anonymous instance can foo');
44ok($instance->meta->find_method_by_name('foo'), '... Anonymous instance has method foo');
45
46ok($instance->meta->has_attribute('bar'), '... Anonymous instance still has attribute bar');
47ok($instance->meta->has_attribute('baz'), '... Anonymous instance still has attribute baz');
48is($instance->bar, 'a', '... Anonymous instance still has correct bar value');
49is($instance->baz, 'b', '... Anonymous instance still has correct baz value');
50
51is_deeply([$instance->meta->class_precedence_list],
52 [$anon_class_name, 'Foo'],
53 '... Anonymous instance has class precedence list',
54 );