8 use Moose::Meta::Class;
16 sub foo_role_applied { 1 }
20 sub bar_role_applied { 1 }
23 # try without caching first
26 my $class_and_foo_1 = Moose::Meta::Class->create_anon_class(
27 superclasses => ['Class'],
31 my $class_and_foo_2 = Moose::Meta::Class->create_anon_class(
32 superclasses => ['Class'],
36 isnt $class_and_foo_1->name, $class_and_foo_2->name,
37 'creating the same class twice without caching results in 2 classes';
39 map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
42 # now try with caching
45 my $class_and_foo_1 = Moose::Meta::Class->create_anon_class(
46 superclasses => ['Class'],
51 my $class_and_foo_2 = Moose::Meta::Class->create_anon_class(
52 superclasses => ['Class'],
57 is $class_and_foo_1->name, $class_and_foo_2->name,
58 'with cache, the same class is the same class';
60 map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
62 my $class_and_bar = Moose::Meta::Class->create_anon_class(
63 superclasses => ['Class'],
68 isnt $class_and_foo_1->name, $class_and_bar,
69 'class_and_foo and class_and_bar are different';
71 ok $class_and_bar->name->bar_role_applied;
74 # This tests that a cached metaclass can be reinitialized and still retain its
77 my $name = Moose::Meta::Class->create_anon_class(
78 superclasses => ['Class'],
82 $name->meta->reinitialize( $name );
84 can_ok( $name, 'meta' );
90 my $meta = Moose::Meta::Class->create_anon_class(
91 superclasses => ['Class'],
95 ok(!Class::MOP::metaclass_is_weak($name), "cache implies weaken => 0");
97 ok(Class::MOP::class_of($name), "cache implies weaken => 0");
98 Class::MOP::remove_metaclass_by_name($name);
104 my $meta = Moose::Meta::Class->create_anon_class(
105 superclasses => ['Class'],
109 my $name = $meta->name;
110 ok(Class::MOP::metaclass_is_weak($name), "but we can override this");
112 ok(!Class::MOP::class_of($name), "but we can override this");
116 my $meta = Moose::Meta::Class->create_anon_class(
117 superclasses => ['Class'],
120 ok(!Class::MOP::metaclass_is_weak($meta->name),
121 "creates a nonweak metaclass");
122 Scalar::Util::weaken($meta);
123 Class::MOP::remove_metaclass_by_name($meta->name);
124 ok(!$meta, "removing a cached anon class means it's actually gone");