X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?p=gitmo%2FMouse.git;a=blobdiff_plain;f=t%2F001_mouse%2F007-attributes.t;fp=t%2F001_mouse%2F007-attributes.t;h=e4afacbb16a1600127c8602aa34e95000f1355bf;hp=f4c60ee95985d456b264c8e13529240b6c6102f1;hb=cfdb93c63c45d0e81e858631b62a7d4d7be87842;hpb=51b0597dcccaadf7fe2a6ff3ab9bd54c39e8bf47 diff --git a/t/001_mouse/007-attributes.t b/t/001_mouse/007-attributes.t index f4c60ee..e4afacb 100644 --- a/t/001_mouse/007-attributes.t +++ b/t/001_mouse/007-attributes.t @@ -30,54 +30,54 @@ do { writer => 'write_attr', ); }; - -ok(!Class->can('x'), "No accessor is injected if 'is' has no value"); -can_ok('Class', 'y', 'z'); - -has_attribute_ok 'Class', 'x'; -has_attribute_ok 'Class', 'y'; -has_attribute_ok 'Class', 'z'; - -my $object = Class->new; - -ok(!$object->can('x'), "No accessor is injected if 'is' has no value"); -can_ok($object, 'y', 'z'); - -is($object->y, undef); - -throws_ok { - $object->y(10); -} qr/Cannot assign a value to a read-only accessor/; - -is($object->y, undef); - -is($object->z, undef); -is($object->z(10), 10); -is($object->z, 10); - -can_ok($object, qw(rw_attr read_attr write_attr)); -$object->write_attr(42); -is $object->rw_attr, 42; -is $object->read_attr, 42; -$object->rw_attr(100); -is $object->rw_attr, 100; -is $object->read_attr, 100; - -is $object->write_attr("piyo"), "piyo"; -is $object->rw_attr("yopi"), "yopi"; - -dies_ok { - Class->rw_attr(); -}; -dies_ok { - Class->read_attr(); -}; -dies_ok { - Class->write_attr(42); -}; - -my @attrs = map { $_->name } - sort { $a->insertion_order <=> $b->insertion_order } $object->meta->get_all_attributes; -is join(' ', @attrs), 'x y z attr', 'insertion_order'; - +with_immutable { + ok(!Class->can('x'), "No accessor is injected if 'is' has no value"); + can_ok('Class', 'y', 'z'); + + has_attribute_ok 'Class', 'x'; + has_attribute_ok 'Class', 'y'; + has_attribute_ok 'Class', 'z'; + + my $object = Class->new; + + ok(!$object->can('x'), "No accessor is injected if 'is' has no value"); + can_ok($object, 'y', 'z'); + + is($object->y, undef); + + throws_ok { + $object->y(10); + } qr/Cannot assign a value to a read-only accessor/; + + is($object->y, undef); + + is($object->z, undef); + is($object->z(10), 10); + is($object->z, 10); + + can_ok($object, qw(rw_attr read_attr write_attr)); + $object->write_attr(42); + is $object->rw_attr, 42; + is $object->read_attr, 42; + $object->rw_attr(100); + is $object->rw_attr, 100; + is $object->read_attr, 100; + + is $object->write_attr("piyo"), "piyo"; + is $object->rw_attr("yopi"), "yopi"; + + dies_ok { + Class->rw_attr(); + }; + dies_ok { + Class->read_attr(); + }; + dies_ok { + Class->write_attr(42); + }; + + my @attrs = map { $_->name } + sort { $a->insertion_order <=> $b->insertion_order } $object->meta->get_all_attributes; + is join(' ', @attrs), 'x y z attr', 'insertion_order'; +} qw(Class); done_testing;