File: 12-boolean.t

package info (click to toggle)
libjson-any-perl 1.28-1
  • links: PTS, VCS
  • area: main
  • in suites: wheezy
  • size: 252 kB
  • sloc: perl: 2,701; makefile: 2
file content (58 lines) | stat: -rw-r--r-- 1,274 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!perl
$!++;
use strict;
use Data::Dumper;
use Test::More;

eval "use JSON::Any";

if ($@) {
    plan skip_all => "$@";
    exit;
}

$Data::Dumper::Indent = 0;
$Data::Dumper::Terse  = 1;

# JSON::Syck doesn't support bools
my @backends = qw(XS JSON DWIW);

# make sure we test the JSON::PP backend instead of XS, twice
$ENV{PERL_JSON_BACKEND} = 0;

plan tests => @backends * 2 * 4;

test ($_) for @backends;

{
    package Boolean;
    sub true { 1 }
    sub false { '' }
}

sub test {
    my ($backend) = @_;

    SKIP: {
        my $j = eval {
            JSON::Any->import($backend);
            JSON::Any->new;
        };

        diag("$backend: " . $@), skip("Backend $backend failed to load", 8) if $@;

        $j and $j->handler or next;

        diag "handler is " . ( ref( $j->handler ) || $j->handlerType );

        for my $bool ( qw/true false/ ) {
            my $data = eval { JSON::Any->jsonToObj($bool) };
            ok ( !$@,  "inflated '$bool'" );
            ok ( eval { $data xor !Boolean->$bool }, "$bool evaluates to $bool" );

            $data = eval { JSON::Any->$bool };
            ok ( !$@, "JSON::Any->$bool returned a value" );
            ok ( eval { $data xor !Boolean->$bool }, "JSON::Any->$bool evaluates to $bool" );
        }
    };
}