Same API as Moose for Mouse::Meta::Attribute->new
[gitmo/Mouse.git] / t / 800_shikabased / 008-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         "ClassName",
11         superclasses => "foo"
12     );
13 } qr/You must pass an ARRAY ref of superclasses/;
14
15
16 throws_ok {
17     Mouse::Meta::Class->create(
18         "ClassName",
19         attributes => "foo"
20     );
21 } qr/You must pass an ARRAY ref of attributes/;
22
23 throws_ok {
24     Mouse::Meta::Class->create(
25         "ClassName",
26         methods => "foo"
27     );
28 } qr/You must pass a HASH ref of methods/;
29
30
31 throws_ok {
32     Mouse::Meta::Class->create()
33 } qr/You must pass a package name/;
34
35 # normal cases
36 isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class");
37 is FooBar->meta->name, "FooBar";
38
39 isa_ok(
40     Mouse::Meta::Class->create(
41         package      => "Baz",
42         superclasses => [ "FooBar", "Mouse::Object" ],
43         attributes   => [
44             Mouse::Meta::Attribute->new(
45                 "foo" => (
46                     is => "rw",
47                     default => "yay",
48                 ),
49             )
50         ],
51         methods => {
52             dooo => sub { "iiiit" },
53         }
54     ),
55     "Mouse::Meta::Class"
56 );
57 isa_ok Baz->new(), "FooBar";
58 is Baz->new()->foo, "yay";
59 is Baz->new()->dooo, "iiiit";
60
61 {
62     my $meta = Mouse::Meta::Class->create_anon_class(
63         superclasses => [ "Mouse::Object" ],
64         methods => {
65             dooo => sub { "iiiit" },
66         }
67     );
68     isa_ok($meta, "Mouse::Meta::Class");
69     is $meta->name, "Mouse::Meta::Class::__ANON__::SERIAL::1";
70     is $meta->name->new->dooo(), "iiiit";
71
72     my $anon2 = Mouse::Meta::Class->create_anon_class();
73     is $anon2->name, "Mouse::Meta::Class::__ANON__::SERIAL::2";
74 }