add cache attribute to M::Meta::Class->create_anon_class
[gitmo/Moose.git] / t / 010_basics / 014_create_anon.t
CommitLineData
17594769 1use strict;
2use warnings;
3use Test::More tests => 11;
4
5BEGIN {
6 use_ok('Moose::Meta::Class');
7 use_ok('Moose');
8 use_ok('Moose::Role');
9}
10
11{
12 package Class;
13 use Moose;
14
15 package Foo;
16 use Moose::Role;
17 sub foo_role_applied { 1 }
18
19 package Bar;
20 use Moose::Role;
21 sub bar_role_applied { 1 }
22}
23
24# try without caching first
25
26{
27 my $class_and_foo_1 = Moose::Meta::Class->create_anon_class(
28 superclasses => ['Class'],
29 roles => ['Foo'],
30 );
31
32 my $class_and_foo_2 = Moose::Meta::Class->create_anon_class(
33 superclasses => ['Class'],
34 roles => ['Foo'],
35 );
36
37 isnt $class_and_foo_1->name, $class_and_foo_2->name,
38 'creating the same class twice without caching results in 2 classes';
39
40 map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
41}
42
43# now try with caching
44
45{
46 my $class_and_foo_1 = Moose::Meta::Class->create_anon_class(
47 superclasses => ['Class'],
48 roles => ['Foo'],
49 cache => 1,
50 );
51
52 my $class_and_foo_2 = Moose::Meta::Class->create_anon_class(
53 superclasses => ['Class'],
54 roles => ['Foo'],
55 cache => 1,
56 );
57
58 is $class_and_foo_1->name, $class_and_foo_2->name,
59 'with cache, the same class is the same class';
60
61 map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
62
63 my $class_and_bar = Moose::Meta::Class->create_anon_class(
64 superclasses => ['Class'],
65 roles => ['Bar'],
66 cache => 1,
67 );
68
69 isnt $class_and_foo_1->name, $class_and_bar,
70 'class_and_foo and class_and_bar are different';
71
72 ok $class_and_bar->name->bar_role_applied;
73}