use strict; use warnings; use Test::More tests => 9; use Data::FlexSerializer; use Sereal::Encoder qw(); use Sereal::Decoder qw(); use Scalar::Util qw(blessed); # Make sure we properly build Sereal objects at object construction time { my $flex_enc = Data::FlexSerializer->new(output_format => 'sereal'); ok(blessed($flex_enc->{sereal_encoder}), "We have a Sereal encoder object"); ok(!exists $flex_enc->{sereal_decoder}, "No need for a decoder, we're only encoding"); my $flex_dec = Data::FlexSerializer->new(detect_sereal => 1); ok(blessed($flex_dec->{sereal_decoder}), "We have a Sereal decoder object"); ok(!exists $flex_dec->{sereal_encoder}, "No need for a decoder, we're only encoding"); my $flex_both = Data::FlexSerializer->new(detect_sereal => 1, output_format => 'sereal'); ok(blessed($flex_both->{sereal_decoder}), "We have a Sereal decoder object"); ok(blessed($flex_both->{sereal_encoder}), "We have a Sereal encoder object "); } # Check that we can provide a custom objects { my $encoder = Sereal::Encoder->new; my $decoder = Sereal::Decoder->new; my $flex_both = Data::FlexSerializer->new( detect_sereal => 1, output_format => 'sereal', sereal_encoder => $encoder, sereal_decoder => $decoder, ); ok($encoder == $flex_both->{sereal_encoder}, "We use encoder objects passed to us"); ok($decoder == $flex_both->{sereal_decoder}, "We use decoder objects passed to us"); } # Check that we can dynamically change the output format { my $flex_dynamic = Data::FlexSerializer->new( detect_sereal => 1, ); $flex_dynamic->output_format('sereal'); my $value = []; my $serialize = $flex_dynamic->serialize($value); my $deserialize = $flex_dynamic->deserialize($serialize); is_deeply($value, $deserialize, "We can dynamically change the output format"); }