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