Mouse::Role improved
[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(
1a72f15c 41 "Baz",
368e3d4a 42 superclasses => [ "FooBar", "Mouse::Object" ],
43 attributes => [
44 Mouse::Meta::Attribute->new(
2608b115 45 "foo" => (
46 is => "rw",
47 default => "yay",
48 ),
368e3d4a 49 )
50 ],
51 methods => {
52 dooo => sub { "iiiit" },
53 }
54 ),
55 "Mouse::Meta::Class"
56);
57isa_ok Baz->new(), "FooBar";
58is Baz->new()->foo, "yay";
59is 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");
0033da82 69 like($meta->name, qr/Class::__ANON__::/);
368e3d4a 70 is $meta->name->new->dooo(), "iiiit";
71
72 my $anon2 = Mouse::Meta::Class->create_anon_class();
0033da82 73 like($anon2->name, qr/Class::__ANON__::/);
368e3d4a 74}