added Mouse::Meta::Class->create(_anon_class)?
[gitmo/Mouse.git] / t / 800_shikabased / 007-create_class.t
1 use strict;
2 use warnings;
3 use Mouse;
4 use Test::More tests => 14;
5 use Test::Exception;
6
7 # error handling
8 throws_ok {
9     Mouse::Meta::Class->create(
10         superclasses => "foo"
11     );
12 } qr/You must pass an ARRAY ref of superclasses/;
13
14
15 throws_ok {
16     Mouse::Meta::Class->create(
17         attributes => "foo"
18     );
19 } qr/You must pass an ARRAY ref of attributes/;
20
21 throws_ok {
22     Mouse::Meta::Class->create(
23         methods => "foo"
24     );
25 } qr/You must pass a HASH ref of methods/;
26
27
28 throws_ok {
29     Mouse::Meta::Class->create()
30 } qr/You must pass a package name/;
31
32 # normal cases
33 isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class");
34 is FooBar->meta->name, "FooBar";
35
36 isa_ok(
37     Mouse::Meta::Class->create(
38         package      => "Baz",
39         superclasses => [ "FooBar", "Mouse::Object" ],
40         attributes   => [
41             Mouse::Meta::Attribute->new(
42                 name => "foo", is => "rw", default => "yay"
43             )
44         ],
45         methods => {
46             dooo => sub { "iiiit" },
47         }
48     ),
49     "Mouse::Meta::Class"
50 );
51 isa_ok Baz->new(), "FooBar";
52 is Baz->new()->foo, "yay";
53 is Baz->new()->dooo, "iiiit";
54
55 {
56     my $meta = Mouse::Meta::Class->create_anon_class(
57         superclasses => [ "Mouse::Object" ],
58         methods => {
59             dooo => sub { "iiiit" },
60         }
61     );
62     isa_ok($meta, "Mouse::Meta::Class");
63     is $meta->name, "Mouse::Meta::Class::__ANON__::SERIAL::1";
64     is $meta->name->new->dooo(), "iiiit";
65
66     my $anon2 = Mouse::Meta::Class->create_anon_class();
67     is $anon2->name, "Mouse::Meta::Class::__ANON__::SERIAL::2";
68 }