#!/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");
}
}