X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F060_instance.t;h=75a374e8193ce33c8467461abf7d21819886531c;hb=52e5f955631bd1734feae3659100757b7925cbb7;hp=9362034e6ee933caf13ea9c3f7d2d1aa8b627ed4;hpb=ee7c04677234b6bfa7eddc0896ef4255e713d1b2;p=gitmo%2FClass-MOP.git diff --git a/t/060_instance.t b/t/060_instance.t index 9362034..75a374e 100644 --- a/t/060_instance.t +++ b/t/060_instance.t @@ -3,59 +3,60 @@ use strict; use warnings; -use Test::More tests => 39; +use Test::More tests => 45; use Test::Exception; use Scalar::Util qw/isweak reftype/; -BEGIN { - use_ok('Class::MOP::Instance'); -} +use Class::MOP::Instance; can_ok( "Class::MOP::Instance", $_ ) for qw/ - new - - create_instance - bless_instance_structure + new + + create_instance + bless_instance_structure get_all_slots - - initialize_all_slots - - get_slot_value - set_slot_value - initialize_slot - is_slot_initialized - weaken_slot_value - strengthen_slot_value - - inline_get_slot_value - inline_set_slot_value - inline_initialize_slot - inline_is_slot_initialized - inline_weaken_slot_value - inline_strengthen_slot_value + + initialize_all_slots + deinitialize_all_slots + + get_slot_value + set_slot_value + initialize_slot + deinitialize_slot + is_slot_initialized + weaken_slot_value + strengthen_slot_value + + inline_get_slot_value + inline_set_slot_value + inline_initialize_slot + inline_deinitialize_slot + inline_is_slot_initialized + inline_weaken_slot_value + inline_strengthen_slot_value /; { - package Foo; - use metaclass; - - Foo->meta->add_attribute('moosen'); + package Foo; + use metaclass; - package Bar; - use metaclass; - use base qw/Foo/; + Foo->meta->add_attribute('moosen'); - Bar->meta->add_attribute('elken'); + package Bar; + use metaclass; + use base qw/Foo/; + + Bar->meta->add_attribute('elken'); } my $mi_foo = Foo->meta->get_meta_instance; isa_ok($mi_foo, "Class::MOP::Instance"); is_deeply( - [ $mi_foo->get_all_slots ], - [ "moosen" ], + [ $mi_foo->get_all_slots ], + [ "moosen" ], '... get all slots for Foo'); my $mi_bar = Bar->meta->get_meta_instance; @@ -64,8 +65,8 @@ isa_ok($mi_bar, "Class::MOP::Instance"); isnt($mi_foo, $mi_bar, '... they are not the same instance'); is_deeply( - [ sort $mi_bar->get_all_slots ], - [ "elken", "moosen" ], + [ sort $mi_bar->get_all_slots ], + [ "elken", "moosen" ], '... get all slots for Bar'); my $i_foo = $mi_foo->create_instance; @@ -73,13 +74,22 @@ isa_ok($i_foo, "Foo"); { my $i_foo_2 = $mi_foo->create_instance; - isa_ok($i_foo_2, "Foo"); + isa_ok($i_foo_2, "Foo"); isnt($i_foo_2, $i_foo, '... not the same instance'); is_deeply($i_foo, $i_foo_2, '... but the same structure'); } +ok(!$mi_foo->is_slot_initialized( $i_foo, "moosen" ), "slot not initialized"); + ok(!defined($mi_foo->get_slot_value( $i_foo, "moosen" )), "... no value for slot"); +$mi_foo->initialize_slot( $i_foo, "moosen" ); + +#Removed becayse slot initialization works differently now (groditi) +#ok($mi_foo->is_slot_initialized( $i_foo, "moosen" ), "slot initialized"); + +ok(!defined($mi_foo->get_slot_value( $i_foo, "moosen" )), "... but no value for slot"); + $mi_foo->set_slot_value( $i_foo, "moosen", "the value" ); is($mi_foo->get_slot_value( $i_foo, "moosen" ), "the value", "... get slot value"); @@ -122,3 +132,9 @@ undef $ref; is( reftype( $mi_foo->get_slot_value( $i_foo, "moosen" ) ), "ARRAY", "weak value can be strengthened" ); +$mi_foo->deinitialize_slot( $i_foo, "moosen" ); + +ok(!$mi_foo->is_slot_initialized( $i_foo, "moosen" ), "slot deinitialized"); + +ok(!defined($mi_foo->get_slot_value( $i_foo, "moosen" )), "... no value for slot"); +