Regenerate test files
[gitmo/Mouse.git] / t / 010_basics / 014_create_anon.t
1 #!/usr/bin/perl
2 # This is automatically generated by author/import-moose-test.pl.
3 # DO NOT EDIT THIS FILE. ANY CHANGES WILL BE LOST!!!
4 use t::lib::MooseCompat;
5
6 use strict;
7 use warnings;
8
9 use Test::More;
10
11 use Mouse::Meta::Class;
12
13 {
14     package Class;
15     use Mouse;
16
17     package Foo;
18     use Mouse::Role;
19     sub foo_role_applied { 1 }
20
21     package Bar;
22     use Mouse::Role;
23     sub bar_role_applied { 1 }
24 }
25
26 # try without caching first
27
28 {
29     my $class_and_foo_1 = Mouse::Meta::Class->create_anon_class(
30         superclasses => ['Class'],
31         roles        => ['Foo'],
32     );
33
34     my $class_and_foo_2 = Mouse::Meta::Class->create_anon_class(
35         superclasses => ['Class'],
36         roles        => ['Foo'],
37     );
38
39     isnt $class_and_foo_1->name, $class_and_foo_2->name,
40       'creating the same class twice without caching results in 2 classes';
41
42     map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
43 }
44
45 # now try with caching
46
47 {
48     my $class_and_foo_1 = Mouse::Meta::Class->create_anon_class(
49         superclasses => ['Class'],
50         roles        => ['Foo'],
51         cache        => 1,
52     );
53
54     my $class_and_foo_2 = Mouse::Meta::Class->create_anon_class(
55         superclasses => ['Class'],
56         roles        => ['Foo'],
57         cache        => 1,
58     );
59
60     is $class_and_foo_1->name, $class_and_foo_2->name,
61       'with cache, the same class is the same class';
62
63     map { ok $_->name->foo_role_applied } ($class_and_foo_1, $class_and_foo_2);
64
65     my $class_and_bar = Mouse::Meta::Class->create_anon_class(
66         superclasses => ['Class'],
67         roles        => ['Bar'],
68         cache        => 1,
69     );
70
71     isnt $class_and_foo_1->name, $class_and_bar,
72       'class_and_foo and class_and_bar are different';
73
74     ok $class_and_bar->name->bar_role_applied;
75 }
76
77 # This tests that a cached metaclass can be reinitialized and still retain its
78 # metaclass object.
79 {
80     my $name = Mouse::Meta::Class->create_anon_class(
81         superclasses => ['Class'],
82         cache        => 1,
83     )->name;
84
85     $name->meta->reinitialize( $name );
86
87     can_ok( $name, 'meta' );
88 }
89
90 done_testing;