#!/usr/bin/perl use strict; use warnings; use Test::More tests => 47; BEGIN { use_ok('MooseX::Storage'); } =pod This test checks the single level expansion and collpasing of the ArrayRef and HashRef type handlers. =cut { package Bar; use Moose; use MooseX::Storage; with Storage; has 'number' => (is => 'ro', isa => 'Int'); package Foo; use Moose; use MooseX::Storage; with Storage; has 'bars' => ( is => 'ro', isa => 'ArrayRef' ); package Baz; use Moose; use MooseX::Storage; with Storage; has 'bars' => ( is => 'ro', isa => 'HashRef' ); } { my $foo = Foo->new( bars => [ map { Bar->new(number => $_) } (1 .. 10) ] ); isa_ok( $foo, 'Foo' ); is_deeply( $foo->pack, { __CLASS__ => 'Foo', bars => [ map { { __CLASS__ => 'Bar', number => $_, } } (1 .. 10) ], }, '... got the right frozen class' ); } { my $foo = Foo->unpack( { __CLASS__ => 'Foo', bars => [ map { { __CLASS__ => 'Bar', number => $_, } } (1 .. 10) ], } ); isa_ok( $foo, 'Foo' ); foreach my $i (1 .. scalar @{$foo->bars}) { isa_ok($foo->bars->[$i - 1], 'Bar'); is($foo->bars->[$i - 1]->number, $i, "... got the right number ($i) in the Bar in Foo"); } } { my $baz = Baz->new( bars => { map { ($_ => Bar->new(number => $_)) } (1 .. 10) } ); isa_ok( $baz, 'Baz' ); is_deeply( $baz->pack, { __CLASS__ => 'Baz', bars => { map { ($_ => { __CLASS__ => 'Bar', number => $_, }) } (1 .. 10) }, }, '... got the right frozen class' ); } { my $baz = Baz->unpack( { __CLASS__ => 'Baz', bars => { map { ($_ => { __CLASS__ => 'Bar', number => $_, }) } (1 .. 10) }, } ); isa_ok( $baz, 'Baz' ); foreach my $k (keys %{$baz->bars}) { isa_ok($baz->bars->{$k}, 'Bar'); is($baz->bars->{$k}->number, $k, "... got the right number ($k) in the Bar in Baz"); } }