Skip tests for strict constructor on Moose
[gitmo/Mouse.git] / t / 001_mouse / 808-create_class.t
CommitLineData
368e3d4a 1use strict;
2use warnings;
b6a2be43 3use Mouse ();
d88e198a 4use Test::More tests => 25;
368e3d4a 5use Test::Exception;
6
7# error handling
8throws_ok {
9 Mouse::Meta::Class->create(
475666e5 10 "ClassName",
368e3d4a 11 superclasses => "foo"
12 );
13} qr/You must pass an ARRAY ref of superclasses/;
14
15
16throws_ok {
17 Mouse::Meta::Class->create(
475666e5 18 "ClassName",
368e3d4a 19 attributes => "foo"
20 );
21} qr/You must pass an ARRAY ref of attributes/;
22
23throws_ok {
24 Mouse::Meta::Class->create(
475666e5 25 "ClassName",
368e3d4a 26 methods => "foo"
27 );
28} qr/You must pass a HASH ref of methods/;
29
368e3d4a 30# normal cases
31isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class");
32is FooBar->meta->name, "FooBar";
33
34isa_ok(
35 Mouse::Meta::Class->create(
1a72f15c 36 "Baz",
368e3d4a 37 superclasses => [ "FooBar", "Mouse::Object" ],
38 attributes => [
39 Mouse::Meta::Attribute->new(
2608b115 40 "foo" => (
41 is => "rw",
42 default => "yay",
43 ),
368e3d4a 44 )
45 ],
46 methods => {
47 dooo => sub { "iiiit" },
48 }
49 ),
50 "Mouse::Meta::Class"
51);
52isa_ok Baz->new(), "FooBar";
53is Baz->new()->foo, "yay";
54is Baz->new()->dooo, "iiiit";
55
ad022aac 56my($anon_pkg1, $anon_pkg2);
368e3d4a 57{
58 my $meta = Mouse::Meta::Class->create_anon_class(
59 superclasses => [ "Mouse::Object" ],
60 methods => {
61 dooo => sub { "iiiit" },
62 }
63 );
ad022aac 64 $anon_pkg1 = $meta->name;
65
66 isa_ok($meta, "Mouse::Meta::Class", 'create_anon_class');
67 ok($meta->is_anon_class, 'is_anon_class');
368e3d4a 68 is $meta->name->new->dooo(), "iiiit";
69
ad022aac 70 my $anon2 = Mouse::Meta::Class->create_anon_class(cache => 1);
71 $anon_pkg2 = $anon2->name;
72
73 ok($anon2->is_anon_class);
74
75 isnt $meta, $anon2;
76 isnt $meta->name, $anon2->name;
368e3d4a 77}
ad022aac 78
79# all the stuff are removed?
80ok !$anon_pkg1->isa('Mouse::Object');
81ok !$anon_pkg1->can('dooo');
82ok !$anon_pkg1->can('meta');
83
84ok $anon_pkg2->can('meta'), 'cache => 1 makes it immortal';
85
d88e198a 86my $anon = Mouse::Meta::Class->create_anon_class(
87 constructor_class => 'ConstructorX',
88 destructor_class => 'DestructorX',
89);
90
91is $anon->constructor_class, 'ConstructorX';
92is $anon->destructor_class, 'DestructorX';
93
6cc6c673 94my $obj;
95{
96 my $anon = Mouse::Meta::Class->create_anon_class(superclasses => ['Mouse::Object']);
97 lives_ok{ $anon->make_immutable() } 'make anon class immutable';
98 $obj = $anon->name->new();
99}
100
85dcdab5 101SKIP:{
102 skip 'Moose has a bug', 3 if 'Mouse' eq 'Moose';
103
104 isa_ok $obj, 'Mouse::Object';
105 can_ok $obj, 'meta';
106 lives_and{
107 isa_ok $obj->meta, 'Mouse::Meta::Class';
108 };
109}