Commit | Line | Data |
368e3d4a |
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 | } |