The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#
# $Id: 02-storable.t,v 0.3 2006/03/22 22:10:28 dankogai Exp $
#
use strict;
use Data::Dumper;
use Test::More 'no_plan';
BEGIN{ use_ok('Tie::Storable') };

my $scalar = 7;
my @array  = qw(Sun Mon Tue Wed Thu Fri Sat);
my %hash   = map { $_ => 7 } @array;
my $src;
{
    tie my %dst => 'Tie::Storable', 'hash.po';
    $src = { scalar => $scalar, array => [@array], hash=>{%hash} };
    %dst = %{$src};
}{
    tie my %dst => 'Tie::Storable', 'hash.po';
    is_deeply(\%dst, $src, 'Tie::Storable - hash');
}
{
    tie my @dst => 'Tie::Storable', 'array.po';
    $src = [ $scalar, [@array], {%hash} ];
    @dst = @{$src};
}{
    tie my @dst => 'Tie::Storable', 'array.po';
    is_deeply(\@dst, $src, 'Tie::Storable - array');
}
{
    tie my $dst => 'Tie::Storable', 'scalar.po';
    $src = $scalar;
    $dst = $src;
}{
    tie my $dst => 'Tie::Storable', 'scalar.po';
    is_deeply($dst, $src, 'Tie::Storable - scalar');
}
{
    tie my $dst => 'Tie::Storable', 'scalar.po';
    $src = { scalar => $scalar, array => [@array], hash=>{%hash} };
    bless $src, 'object';
    $dst = $src;
}{
    tie my $dst => 'Tie::Storable', 'scalar.po';
    is_deeply($dst, $src, 'Tie::Storable - object');
}
{
    tie my $dst => 'Tie::Storable::More', 'scalar.po', 0666;
    $src = { scalar => $scalar, array => [@array], hash=>{%hash} };
    $dst = $src;
}{
    tie my $dst => 'Tie::Storable::More', 'scalar.po', 0444;
    is_deeply($dst, $src, 'Tie::Storable::More');
    eval{ $dst = '' };
    ok($@, 'Tie::Storable::More - readonly');
}
unlink 'hash.po', 'array.po', 'scalar.po';