#!/usr/bin/perl use strict; use warnings; use Test::More; use Test::Moose; use constant HAVE_YAML => eval { require YAML::XS } ? 1 : 0; use ok 'KiokuDB::Serializer'; use ok 'KiokuDB::Serializer::JSON'; use ok 'KiokuDB::Serializer::Storable'; use if HAVE_YAML, ok => 'KiokuDB::Serializer::YAML'; use ok 'KiokuDB::Entry'; sub KiokuDB::Entry::BUILD { shift->root }; # force building of root for is_deeply $_->make_mutable, $_->make_immutable for KiokuDB::Entry->meta; # recreate new { foreach my $serializer ( qw(JSON Storable), HAVE_YAML ? "YAML" : () ) { my $s = "KiokuDB::Serializer::$serializer"->new; does_ok( $s, "KiokuDB::Serializer" ); does_ok( $s, "KiokuDB::Backend::Serialize" ); my $entry = KiokuDB::Entry->new( class => "KiokuDB_Test_Foo", data => { foo => "bar" }, ); my $ser = $s->serialize( $entry ); ok( !ref($ser), "non ref" ); ok( length($ser), "got data" ); is_deeply( $s->deserialize($ser), $entry, "round tripping" ); my $buf = ''; open my $out, ">", \$buf; $s->serialize_to_stream($out, $entry) for 1 .. 3; close $out; ok( length($buf), "serialize_to_stream" ); open my $in, "<", \$buf; my @entries; my $n; while ( my @got = $s->deserialize_from_stream($in) ) { $n++; push @entries, @got; } is( scalar(@entries), 3, "three entries from stream ($n reads)" ); isa_ok( $_, "KiokuDB::Entry" ) for @entries; is_deeply( $entries[0], $entry, "round tripping" ); } } done_testing;