Need to specify package names
[gitmo/Mouse.git] / t / 800_shikabased / 008-create_class.t
CommitLineData
368e3d4a 1use strict;
2use warnings;
b6a2be43 3use Mouse ();
368e3d4a 4use Test::More tests => 14;
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
30
31throws_ok {
32 Mouse::Meta::Class->create()
33} qr/You must pass a package name/;
34
35# normal cases
36isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class");
37is FooBar->meta->name, "FooBar";
38
39isa_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);
54isa_ok Baz->new(), "FooBar";
55is Baz->new()->foo, "yay";
56is 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}