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