xref: /openbsd-src/gnu/usr.bin/perl/cpan/JSON-PP/t/003_types.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1# copied over from JSON::XS and modified to use JSON::PP
2
3use strict;
4use warnings;
5use Test::More;
6BEGIN { plan tests => 78 + 2 };
7
8BEGIN { $ENV{PERL_JSON_BACKEND} = 0; }
9
10use utf8;
11use JSON::PP;
12
13
14ok (!defined JSON::PP->new->allow_nonref (1)->decode ('null'));
15ok (JSON::PP->new->allow_nonref (1)->decode ('true') == 1);
16ok (JSON::PP->new->allow_nonref (1)->decode ('false') == 0);
17
18my $true  = JSON::PP->new->allow_nonref (1)->decode ('true');
19ok ($true eq 1);
20ok (JSON::PP::is_bool $true);
21my $false = JSON::PP->new->allow_nonref (1)->decode ('false');
22ok ($false == !$true);
23ok (JSON::PP::is_bool $false);
24ok (++$false == 1);
25ok (!JSON::PP::is_bool $false);
26ok (!JSON::PP::is_bool "JSON::PP::Boolean");
27ok (!JSON::PP::is_bool {}); # GH-34
28
29ok (JSON::PP->new->allow_nonref (1)->decode ('5') == 5);
30ok (JSON::PP->new->allow_nonref (1)->decode ('-5') == -5);
31ok (JSON::PP->new->allow_nonref (1)->decode ('5e1') == 50);
32ok (JSON::PP->new->allow_nonref (1)->decode ('-333e+0') == -333);
33ok (JSON::PP->new->allow_nonref (1)->decode ('2.5') == 2.5);
34
35ok (JSON::PP->new->allow_nonref (1)->decode ('""') eq "");
36ok ('[1,2,3,4]' eq encode_json decode_json ('[1,2, 3,4]'));
37ok ('[{},[],[],{}]' eq encode_json decode_json ('[{},[], [ ] ,{ }]'));
38ok ('[{"1":[5]}]' eq encode_json [{1 => [5]}]);
39ok ('{"1":2,"3":4}' eq JSON::PP->new->canonical (1)->encode (decode_json '{ "1" : 2, "3" : 4 }'));
40ok ('{"1":2,"3":1.2}' eq JSON::PP->new->canonical (1)->encode (decode_json '{ "1" : 2, "3" : 1.2 }'));
41
42ok ('[true]'  eq encode_json [JSON::PP::true]);
43ok ('[false]' eq encode_json [JSON::PP::false]);
44ok ('[true]'  eq encode_json [\1]);
45ok ('[false]' eq encode_json [\0]);
46ok ('[null]'  eq encode_json [undef]);
47ok ('[true]'  eq encode_json [JSON::PP::true]);
48ok ('[false]' eq encode_json [JSON::PP::false]);
49
50SKIP: {
51  skip "core booleans not supported", 2
52    unless JSON::PP->can("CORE_BOOL") && JSON::PP::CORE_BOOL();
53
54  ok ('[true]'  eq encode_json [!!1]);
55  ok ('[false]' eq encode_json [!!0]);
56}
57
58for my $v (1, 2, 3, 5, -1, -2, -3, -4, 100, 1000, 10000, -999, -88, -7, 7, 88, 999, -1e5, 1e6, 1e7, 1e8) {
59   ok ($v == ((decode_json "[$v]")->[0]));
60   ok ($v == ((decode_json encode_json [$v])->[0]));
61}
62
63ok (30123 == ((decode_json encode_json [30123])->[0]));
64ok (32123 == ((decode_json encode_json [32123])->[0]));
65ok (32456 == ((decode_json encode_json [32456])->[0]));
66ok (32789 == ((decode_json encode_json [32789])->[0]));
67ok (32767 == ((decode_json encode_json [32767])->[0]));
68ok (32768 == ((decode_json encode_json [32768])->[0]));
69
70my @sparse; @sparse[0,3] = (1, 4);
71ok ("[1,null,null,4]" eq encode_json \@sparse);
72
73