trAvis - MANAGER
Edit File: 808-create_class.t
use strict; use warnings; use Test::More tests => 25; use Test::Exception; use Mouse (); # error handling throws_ok { Mouse::Meta::Class->create( "ClassName", superclasses => "foo" ); } qr/You must pass an ARRAY ref of superclasses/; throws_ok { Mouse::Meta::Class->create( "ClassName", attributes => "foo" ); } qr/You must pass an ARRAY ref of attributes/; throws_ok { Mouse::Meta::Class->create( "ClassName", methods => "foo" ); } qr/You must pass a HASH ref of methods/; # normal cases isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class"); is FooBar->meta->name, "FooBar"; isa_ok( Mouse::Meta::Class->create( "Baz", superclasses => [ "FooBar", "Mouse::Object" ], attributes => [ Mouse::Meta::Attribute->new( "foo" => ( is => "rw", default => "yay", ), ) ], methods => { dooo => sub { "iiiit" }, } ), "Mouse::Meta::Class" ); isa_ok Baz->new(), "FooBar"; is Baz->new()->foo, "yay"; is Baz->new()->dooo, "iiiit"; my($anon_pkg1, $anon_pkg2); { my $meta = Mouse::Meta::Class->create_anon_class( superclasses => [ "Mouse::Object" ], methods => { dooo => sub { "iiiit" }, } ); $anon_pkg1 = $meta->name; isa_ok($meta, "Mouse::Meta::Class", 'create_anon_class'); ok($meta->is_anon_class, 'is_anon_class'); is $meta->name->new->dooo(), "iiiit"; my $anon2 = Mouse::Meta::Class->create_anon_class(cache => 1); $anon_pkg2 = $anon2->name; ok($anon2->is_anon_class); isnt $meta, $anon2; isnt $meta->name, $anon2->name; } # all the stuff are removed? ok !$anon_pkg1->isa('Mouse::Object'); ok !$anon_pkg1->can('dooo'); ok !$anon_pkg1->can('meta'); ok $anon_pkg2->can('meta'), 'cache => 1 makes it immortal'; my $anon = Mouse::Meta::Class->create_anon_class( constructor_class => 'ConstructorX', destructor_class => 'DestructorX', ); is $anon->constructor_class, 'ConstructorX'; is $anon->destructor_class, 'DestructorX'; my $obj; { my $anon = Mouse::Meta::Class->create_anon_class(superclasses => ['Mouse::Object']); lives_ok{ $anon->make_immutable() } 'make anon class immutable'; $obj = $anon->name->new(); } SKIP:{ skip 'Moose has a bug', 3 if 'Mouse' eq 'Moose'; isa_ok $obj, 'Mouse::Object'; can_ok $obj, 'meta'; lives_and{ isa_ok $obj->meta, 'Mouse::Meta::Class'; }; }