Commit | Line | Data |
17594769 |
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 | } |