X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=t%2F008_do_not_serialize.t;h=4df388928faa15e0749199be1da99cac4d34f35c;hb=b5f363acfcf077778dd4f3b59460a0cbb9e51400;hp=527bc744a91e1764a40ccfe983fbf16fa08eb4e0;hpb=04990d7a1d61ecde1238e6fd224b6b23b462d05a;p=gitmo%2FMooseX-Storage.git diff --git a/t/008_do_not_serialize.t b/t/008_do_not_serialize.t index 527bc74..4df3889 100644 --- a/t/008_do_not_serialize.t +++ b/t/008_do_not_serialize.t @@ -3,7 +3,7 @@ use strict; use warnings; -use Test::More no_plan => 6; +use Test::More tests => 13; use Test::Exception; BEGIN { @@ -37,22 +37,66 @@ BEGIN { 1; } -my $foo = Foo->new; -isa_ok($foo, 'Foo'); - -is($foo->bar, 'BAR', '... got the value we expected'); -is($foo->baz, 'BAZ', '... got the value we expected'); -is($foo->gorch, 'GORCH', '... got the value we expected'); +{ my $foo = Foo->new; + isa_ok($foo, 'Foo'); + + is($foo->bar, 'BAR', '... got the value we expected'); + is($foo->baz, 'BAZ', '... got the value we expected'); + is($foo->gorch, 'GORCH', '... got the value we expected'); + + is_deeply( + $foo->pack, + { + __CLASS__ => 'Foo', + gorch => 'GORCH' + }, + '... got the right packed class data' + ); +} -is_deeply( - $foo->pack, - { - __CLASS__ => 'Foo', - gorch => 'GORCH' - }, - '... got the right packed class data' -); +### more involved test; required attribute that's not serialized +{ package Bar; + use Moose; + use MooseX::Storage; + with Storage; + has foo => ( + metaclass => 'DoNotSerialize', + required => 1, + is => 'rw', + isa => 'Object', # type constraint is important + ); + + has zot => ( + default => sub { $$ }, + is => 'rw', + ); +} +{ my $obj = bless {}; + my $bar = Bar->new( foo => $obj ); + + ok( $bar, "New object created" ); + is( $bar->foo, $obj, " ->foo => $obj" ); + is( $bar->zot, $$, " ->zot => $$" ); + + my $bpack = $bar->pack; + is_deeply( + $bpack, + { __CLASS__ => 'Bar', + zot => $$, + }, " Packed correctly" ); + + eval { Bar->unpack( $bpack ) }; + ok( $@, " Unpack without required attribute fails" ); + like( $@, qr/foo/, " Proper error recorded" ); + + my $bar2 = Bar->unpack( $bpack, inject => { foo => bless {} } ); + ok( $bar2, " Unpacked correctly with foo => Object"); +} + + + +