xref: /openbsd-src/gnu/usr.bin/perl/cpan/JSON-PP/t/118_boolean_values.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1f3efcd01Safresh1use strict;
2*256a93a4Safresh1use warnings;
3f3efcd01Safresh1use Test::More;
4f3efcd01Safresh1BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
5f3efcd01Safresh1use JSON::PP;
6f3efcd01Safresh1
7f3efcd01Safresh1#SKIP_ALL_UNLESS_XS4_COMPAT
8f3efcd01Safresh1
9f3efcd01Safresh1package #
10f3efcd01Safresh1    Dummy::True;
11f3efcd01Safresh1*Dummy::True:: = *JSON::PP::Boolean::;
12f3efcd01Safresh1
13f3efcd01Safresh1package #
14f3efcd01Safresh1    Dummy::False;
15f3efcd01Safresh1*Dummy::False:: = *JSON::PP::Boolean::;
16f3efcd01Safresh1
17f3efcd01Safresh1package main;
18f3efcd01Safresh1
19f3efcd01Safresh1my $dummy_true = bless \(my $dt = 1), 'Dummy::True';
20f3efcd01Safresh1my $dummy_false = bless \(my $df = 0), 'Dummy::False';
21f3efcd01Safresh1
22f3efcd01Safresh1my @tests = ([$dummy_true, $dummy_false, 'Dummy::True', 'Dummy::False']);
23f3efcd01Safresh1
24f3efcd01Safresh1# extra boolean classes
25f3efcd01Safresh1if (eval "require boolean; 1") {
26f3efcd01Safresh1    push @tests, [boolean::true(), boolean::false(), 'boolean', 'boolean', 1];
27f3efcd01Safresh1}
28f3efcd01Safresh1if (eval "require JSON::PP; 1") {
29f3efcd01Safresh1    push @tests, [JSON::PP::true(), JSON::PP::false(), 'JSON::PP::Boolean', 'JSON::PP::Boolean'];
30f3efcd01Safresh1}
31f3efcd01Safresh1if (eval "require Data::Bool; 1") {
32f3efcd01Safresh1    push @tests, [Data::Bool::true(), Data::Bool::false(), 'Data::Bool::Impl', 'Data::Bool::Impl'];
33f3efcd01Safresh1}
34f3efcd01Safresh1if (eval "require Types::Serialiser; 1") {
35f3efcd01Safresh1    push @tests, [Types::Serialiser::true(), Types::Serialiser::false(), 'Types::Serialiser::BooleanBase', 'Types::Serialiser::BooleanBase'];
36f3efcd01Safresh1}
37f3efcd01Safresh1
38*256a93a4Safresh1plan tests => 15 * @tests;
39f3efcd01Safresh1
40f3efcd01Safresh1my $json = JSON::PP->new;
41f3efcd01Safresh1for my $test (@tests) {
42f3efcd01Safresh1    my ($true, $false, $true_class, $false_class, $incompat) = @$test;
43f3efcd01Safresh1
44*256a93a4Safresh1    my $ret = $json->boolean_values($false, $true);
45*256a93a4Safresh1    is $ret => $json, "returns the same object";
46f3efcd01Safresh1    my ($new_false, $new_true) = $json->get_boolean_values;
47f3efcd01Safresh1    ok defined $new_true, "new true class is defined";
48f3efcd01Safresh1    ok defined $new_false, "new false class is defined";
49f3efcd01Safresh1    ok $new_true->isa($true_class), "new true class is $true_class";
50f3efcd01Safresh1    ok $new_false->isa($false_class), "new false class is $false_class";
51f3efcd01Safresh1    SKIP: {
52f3efcd01Safresh1        skip "$true_class is not compatible with JSON::PP::Boolean", 2 if $incompat;
53f3efcd01Safresh1        ok $new_true->isa('JSON::PP::Boolean'), "new true class is also JSON::PP::Boolean";
54f3efcd01Safresh1        ok $new_false->isa('JSON::PP::Boolean'), "new false class is also JSON::PP::Boolean";
55f3efcd01Safresh1    }
56f3efcd01Safresh1
57f3efcd01Safresh1    my $should_true = $json->allow_nonref(1)->decode('true');
58f3efcd01Safresh1    ok $should_true->isa($true_class), "JSON true turns into a $true_class object";
59f3efcd01Safresh1
60f3efcd01Safresh1    my $should_false = $json->allow_nonref(1)->decode('false');
61f3efcd01Safresh1    ok $should_false->isa($false_class), "JSON false turns into a $false_class object";
62f3efcd01Safresh1
63f3efcd01Safresh1    SKIP: {
64f3efcd01Safresh1        skip "$true_class is not compatible with JSON::PP::Boolean", 2 if $incompat;
65f3efcd01Safresh1        my $should_true_json = eval { $json->allow_nonref(1)->encode($new_true); };
66f3efcd01Safresh1        is $should_true_json => 'true', "A $true_class object turns into JSON true";
67f3efcd01Safresh1
68f3efcd01Safresh1        my $should_false_json = eval { $json->allow_nonref(1)->encode($new_false); };
69f3efcd01Safresh1        is $should_false_json => 'false', "A $false_class object turns into JSON false";
70f3efcd01Safresh1    }
71f3efcd01Safresh1
72*256a93a4Safresh1    $ret = $json->boolean_values();
73*256a93a4Safresh1    is $ret => $json, "returns the same object";
74f3efcd01Safresh1    ok !$json->get_boolean_values, "reset boolean values";
75f3efcd01Safresh1
76f3efcd01Safresh1    $should_true = $json->allow_nonref(1)->decode('true');
77f3efcd01Safresh1    ok $should_true->isa('JSON::PP::Boolean'), "JSON true turns into a JSON::PP::Boolean object";
78f3efcd01Safresh1
79f3efcd01Safresh1    $should_false = $json->allow_nonref(1)->decode('false');
80f3efcd01Safresh1    ok $should_false->isa('JSON::PP::Boolean'), "JSON false turns into a JSON::PP::Boolean object";
81f3efcd01Safresh1}
82