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=c9313657717f78bd96f0325c6aa1c93d0b0d41a5;hp=6d6bad5855c62ca7134f09a2d38f25f1231d2d19;hpb=475666e5b0caa50e870b29d537b6c868a7223ab8;p=gitmo%2FMouse.git diff --git a/t/800_shikabased/008-create_class.t b/t/800_shikabased/008-create_class.t index 6d6bad5..76e5bcb 100644 --- a/t/800_shikabased/008-create_class.t +++ b/t/800_shikabased/008-create_class.t @@ -1,7 +1,7 @@ use strict; use warnings; use Mouse (); -use Test::More tests => 14; +use Test::More tests => 19; use Test::Exception; # error handling @@ -27,22 +27,20 @@ throws_ok { ); } 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 => { @@ -55,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" ], @@ -62,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'; +