#!perl use strict; use warnings; use Sereal::Decoder qw(decode_sereal looks_like_sereal); use Sereal::Decoder::Constants qw(:all); use Data::Dumper; use File::Spec; use Devel::Peek; use Test::More; # Simple tests for looks_like_sereal. my @tests = ( # input, bool outcome, name ["", 0, "empty string is not Sereal"], [undef, 0, "undef string is not Sereal"], [SRL_MAGIC_STRING, 0, "SRL_MAGIC_STRING alone is not Sereal"], [SRL_MAGIC_STRING . chr(1) . chr(0), 0, "SRL_MAGIC_STRING with header is not Sereal"], [SRL_MAGIC_STRING . chr(1) . chr(0) . chr(SRL_HDR_UNDEF), 1, "SRL_MAGIC_STRING with header and small payload is Sereal"], [SRL_MAGIC_STRING . chr(0) . chr(0) . chr(SRL_HDR_UNDEF), 0, "SRL_MAGIC_STRING with bad header is not Sereal"], ["=Srl". chr(1) . chr(0) . chr(SRL_HDR_UNDEF), 0, "wrong magic string is not Sereal"], ); plan tests => @tests * 3; my $decoder = Sereal::Decoder->new; foreach my $t (@tests) { my ($input, $outcome, $name) = @$t; ok(looks_like_sereal($input) == $outcome, $name . " (function)"); ok($decoder->looks_like_sereal($input) == $outcome, $name . " (object method)"); ok(Sereal::Decoder->looks_like_sereal($input) == $outcome, $name . " (class method)"); }