The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#===============================================================================
#
#         FILE:  69-to-experimental.t
#===============================================================================

use lib 't';
use strict;
use warnings;
use ExtUtils::testlib;
use Storable::AMF qw(thaw0 thaw3 freeze0 freeze3);
use Storable::AMF::Mapper;
eval 'use Test::More tests => 8;';

sub serialize0{
	my $mapper = Storable::AMF::Mapper->new(to_amf=>1);
	my @values = Storable::AMF0::freeze($_[0], $mapper);
	if (@values != 1) {
		print STDERR "many returned values\n";
	}
	return $values[0];
}
sub serialize3{
	my $mapper = Storable::AMF::Mapper->new(to_amf=>1);
	my @values = Storable::AMF3::freeze($_[0], $mapper);
	if (@values != 1) {
		print STDERR "many returned values\n";
	}
	return $values[0];
}
{{
package Test::ToAMF;

sub new{
	bless {foo => 'bar'};
}

sub TO_AMF {
    return { %{ $_[0] }, a => 1 };
}
}}
sub MyDump{
	join "", map { ord >31 ? $_ : "\\x". unpack "H*", $_ }  split "", $_[0];
}
my $obj = Test::ToAMF->new();
my $bank_0 = serialize0($obj);
my $newobj_0 = thaw0($bank_0);
my $bank_3 = serialize3($obj);
my $newobj_3 = thaw3($bank_3);

ok(defined($bank_0), 'froze ok' );
ok(defined($bank_3), 'froze ok' );
ok(defined($newobj_0), 'thawed ok' );
ok(defined($newobj_3), 'thawed ok' );

my $expected = { foo => 'bar', a => 1 };
is_deeply( $newobj_0, $expected, 'thawed TO_AMF version');
is_deeply( $newobj_3, $expected, 'thawed TO_AMF version');
is(ref ($newobj_0), 'HASH', 'TO_AMF version is unblessed' );
is(ref ($newobj_3), 'HASH', 'TO_AMF version is unblessed' );