adc8e140d3899f46efe1d0f47a4c3485051d4a3c
[gitmo/MooseX-Storage.git] / t / 008_do_not_serialize.t
1 #!/usr/bin/perl
2
3 use strict;
4 use warnings;
5
6 use Test::More tests => 11;
7 use Test::Exception;
8
9 BEGIN {
10     use_ok('MooseX::Storage');
11 }
12
13 {
14     package Foo;
15     use Moose;
16     use MooseX::Storage;
17
18     with Storage;
19
20     has 'bar' => (
21         metaclass => 'DoNotSerialize',
22         is        => 'rw',
23         default   => sub { 'BAR' }        
24     );
25     
26     has 'baz' => (
27         traits  => [ 'DoNotSerialize' ],
28         is      => 'rw',
29         default => sub { 'BAZ' }        
30     );    
31     
32     has 'gorch' => (
33         is      => 'rw', 
34         default => sub { 'GORCH' }
35     );    
36
37     1;
38 }
39
40 {   my $foo = Foo->new;
41     isa_ok($foo, 'Foo');
42     
43     is($foo->bar, 'BAR', '... got the value we expected');
44     is($foo->baz, 'BAZ', '... got the value we expected');
45     is($foo->gorch, 'GORCH', '... got the value we expected');
46     
47     is_deeply(
48         $foo->pack,
49         {
50             __CLASS__ => 'Foo',
51             gorch     => 'GORCH'
52         },
53         '... got the right packed class data'
54     );
55 }
56
57 ### more involved test; required attribute that's not serialized
58 {   package Bar;
59     use Moose;
60     use MooseX::Storage;
61
62     with Storage;
63
64     has foo => (
65         metaclass   => 'DoNotSerialize',
66         required    => 1,
67         is          => 'rw',
68     );
69     
70     has zot => (
71         default     => sub { $$ },
72         is          => 'rw',
73     );        
74 }
75
76 {   my $bar = Bar->new( foo => $$ );
77     
78     ok( $bar,                   "New object created" );
79     is( $bar->foo, $$,          "   ->foo => $$" );
80     is( $bar->zot, $$,          "   ->zot => $$" );
81     
82     my $bpack = $bar->pack;
83     is_deeply(
84         $bpack,
85         {   __CLASS__   => 'Bar',
86             zot         => $$,
87         },                      "   Packed correctly" );
88         
89     my $bar2 = Bar->unpack({ %$bpack, foo => $$ });
90     ok( $bar2,                  "   Unpacked correctly by supplying foo => $$"); 
91 }        
92             
93         
94         
95     
96