* fix a bug where if a required constructor argument was not serialized, it was
[gitmo/MooseX-Storage.git] / t / 008_do_not_serialize.t
CommitLineData
4fa64e86 1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
186d680b 6use Test::More tests => 11;
4fa64e86 7use Test::Exception;
8
9BEGIN {
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
186d680b 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}
04990d7a 56
186d680b 57### more involved test; required attribute that's not serialized
58{ package Bar;
59 use Moose;
60 use MooseX::Storage;
04990d7a 61
186d680b 62 with Storage;
04990d7a 63
186d680b 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}
04990d7a 75
186d680b 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
4fa64e86 96