Need to specify package names
[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                 name => "foo", is => "rw", default => "yay"
46             )
47         ],
48         methods => {
49             dooo => sub { "iiiit" },
50         }
51     ),
52     "Mouse::Meta::Class"
53 );
54 isa_ok Baz->new(), "FooBar";
55 is Baz->new()->foo, "yay";
56 is Baz->new()->dooo, "iiiit";
57
58 {
59     my $meta = Mouse::Meta::Class->create_anon_class(
60         superclasses => [ "Mouse::Object" ],
61         methods => {
62             dooo => sub { "iiiit" },
63         }
64     );
65     isa_ok($meta, "Mouse::Meta::Class");
66     is $meta->name, "Mouse::Meta::Class::__ANON__::SERIAL::1";
67     is $meta->name->new->dooo(), "iiiit";
68
69     my $anon2 = Mouse::Meta::Class->create_anon_class();
70     is $anon2->name, "Mouse::Meta::Class::__ANON__::SERIAL::2";
71 }