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