1#!perl 2use strict; 3use warnings; 4use Sereal::Decoder qw(decode_sereal); 5use Sereal::Decoder::Constants qw(:all); 6use File::Spec; 7use Devel::Peek; 8 9use lib File::Spec->catdir(qw(t lib)); 10 11BEGIN { 12 lib->import('lib') 13 if !-d 't'; 14} 15 16use Sereal::TestSet qw(:all); 17 18use Data::Dumper; # this thing seems to change the meaning of true?! 19 20# These tests are extraordinarily basic, badly-done and really just 21# for basic sanity testing during development. 22 23use Test::More; 24 25run_tests("plain"); 26done_testing(); 27note("All done folks!"); 28 29sub run_tests { 30 my ( $extra_name, $opt_hash )= @_; 31 my $dec= Sereal::Decoder->new( $opt_hash ? $opt_hash : () ); 32 setup_tests(2); 33 foreach my $bt (@BasicTests) { 34 my ( $in, $exp, $name )= @$bt; 35 36 next if $ENV{SEREAL_TEST} and $ENV{SEREAL_TEST} ne $name; 37 38 $exp= $exp->($opt_hash) if ref($exp) eq 'CODE'; 39 $exp= Header() . $exp; 40 41 my ( $out, $out2, $out3 ); 42 my $ok= eval { decode_sereal( $exp, $opt_hash ? $opt_hash : undef, $out ); 1 }; 43 my $err= $@ || 'Zombie error'; 44 45 ok( $ok, "($extra_name) did not die: $name" ) 46 or do { 47 diag $err; 48 diag "input=", Data::Dumper::qquote($exp); 49 next; 50 }; 51 ok( defined($out) == defined($in), "($extra_name) defined: $name" ); 52 is_deeply( $out, $in, "($extra_name) is_deeply: $name" ); 53 54 my $ok2= eval { $out2= $dec->decode( $exp, $out ); 1 }; 55 my $err2= $@ || 'Zombie error'; 56 ok( $ok2, "($extra_name, OO) did not die: $name" ) 57 or do { 58 diag $err2; 59 diag "input=", Data::Dumper::qquote($exp); 60 next; 61 }; 62 ok( defined($out2) == defined($in), "($extra_name, OO) defined: $name" ); 63 is_deeply( $out2, $in, "($extra_name, OO) is_deeply: $name" ); 64 65 SKIP: { 66 skip "Weak thing alias test cannot work without pass-down", 1 67 if $name eq 'weak thing (aliased root)'; 68 my $ok3= eval { $out3= decode_sereal($exp); 1 }; 69 my $err3= $@ || 'Zombie error'; 70 71 ok( $ok, "($extra_name, non-pass-down) did not die: $name" ) 72 or do { 73 diag $err3; 74 diag "input=", Data::Dumper::qquote($exp); 75 next; 76 }; 77 ok( defined($out3) == defined($in), "($extra_name, non-pass-down) defined: $name" ); 78 is_deeply( $out3, $in, "($extra_name, non-pass-down) is_deeply: $name" ); 79 } 80 } 81} 82 83