add cache attribute to M::Meta::Class->create_anon_class
[gitmo/Moose.git] / t / 010_basics / 014_create_anon.t
1 use strict;
2 use warnings;
3 use Test::More tests => 11;
4
5 BEGIN {
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 }