X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F800_shikabased%2F008-create_class.t;h=76e5bcb99daa817232bc97242271889947b184b0;hb=7a1781ae4d22b7fd52894fc8cbbad2fe55e0295d;hp=99143f3bfe19203aea99e0764a1c124704087728;hpb=b6a2be43c0e055edf7f5a6fc21d98d6be79b13e6;p=gitmo%2FMouse.git diff --git a/t/800_shikabased/008-create_class.t b/t/800_shikabased/008-create_class.t index 99143f3..76e5bcb 100644 --- a/t/800_shikabased/008-create_class.t +++ b/t/800_shikabased/008-create_class.t @@ -1,12 +1,13 @@ use strict; use warnings; use Mouse (); -use Test::More tests => 14; +use Test::More tests => 19; use Test::Exception; # error handling throws_ok { Mouse::Meta::Class->create( + "ClassName", superclasses => "foo" ); } qr/You must pass an ARRAY ref of superclasses/; @@ -14,32 +15,32 @@ throws_ok { 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/; - -throws_ok { - Mouse::Meta::Class->create() -} qr/You must pass a package name/; - # normal cases isa_ok(Mouse::Meta::Class->create("FooBar"), "Mouse::Meta::Class"); is FooBar->meta->name, "FooBar"; isa_ok( Mouse::Meta::Class->create( - package => "Baz", + "Baz", superclasses => [ "FooBar", "Mouse::Object" ], attributes => [ Mouse::Meta::Attribute->new( - name => "foo", is => "rw", default => "yay" + "foo" => ( + is => "rw", + default => "yay", + ), ) ], methods => { @@ -52,6 +53,7 @@ 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" ], @@ -59,10 +61,25 @@ is Baz->new()->dooo, "iiiit"; dooo => sub { "iiiit" }, } ); - isa_ok($meta, "Mouse::Meta::Class"); - is $meta->name, "Mouse::Meta::Class::__ANON__::SERIAL::1"; + $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(); - is $anon2->name, "Mouse::Meta::Class::__ANON__::SERIAL::2"; + 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'; +