Blame t/18_json_checker.t

Packit Service 639957
# use the testsuite from http://www.json.org/JSON_checker/
Packit Service 639957
# except for fail18.json, as we do not support a depth of 20 (but 16 and 32).
Packit Service 639957
Packit Service 639957
# copied over from JSON::XS and modified to use JSON
Packit Service 639957
Packit Service 639957
use strict;
Packit Service 639957
#no warnings;
Packit Service 639957
local $^W = undef;
Packit Service 639957
use Test::More;
Packit Service 639957
BEGIN { plan tests => 39 };
Packit Service 639957
BEGIN { $ENV{PERL_JSON_BACKEND} ||= "JSON::backportPP"; }
Packit Service 639957
Packit Service 639957
use JSON;
Packit Service 639957
Packit Service 639957
my $json = JSON->new->utf8->max_depth(32)->canonical;
Packit Service 639957
Packit Service 639957
my $vax_float = (pack("d",1) =~ /^[\x80\x10]\x40/);
Packit Service 639957
Packit Service 639957
binmode DATA;
Packit Service 639957
my $num = 1;
Packit Service 639957
for (;;) {
Packit Service 639957
Packit Service 639957
   $/ = "\n# ";
Packit Service 639957
   chomp (my $test = <DATA>)
Packit Service 639957
      or last;
Packit Service 639957
   $/ = "\n";
Packit Service 639957
   my $name = <DATA>;
Packit Service 639957
   if ($vax_float && $name =~ /pass1.json/) {
Packit Service 639957
       $test =~ s/\b23456789012E66\b/23456789012E20/;
Packit Service 639957
   }
Packit Service 639957
   if (my $perl = eval { $json->decode ($test) }) {
Packit Service 639957
      ok ($name =~ /^pass/, $name);
Packit Service 639957
#print $json->encode ($perl), "\n";
Packit Service 639957
      is ($json->encode ($json->decode ($json->encode ($perl))), $json->encode ($perl));
Packit Service 639957
   } else {
Packit Service 639957
      ok ($name =~ /^fail/, "$name ($@)");
Packit Service 639957
   }
Packit Service 639957
Packit Service 639957
}
Packit Service 639957
Packit Service 639957
__DATA__
Packit Service 639957
"A JSON payload should be an object or array, not a string."
Packit Service 639957
# fail1.json
Packit Service 639957
{"Extra value after close": true} "misplaced quoted value"
Packit Service 639957
# fail10.json
Packit Service 639957
{"Illegal expression": 1 + 2}
Packit Service 639957
# fail11.json
Packit Service 639957
{"Illegal invocation": alert()}
Packit Service 639957
# fail12.json
Packit Service 639957
{"Numbers cannot have leading zeroes": 013}
Packit Service 639957
# fail13.json
Packit Service 639957
{"Numbers cannot be hex": 0x14}
Packit Service 639957
# fail14.json
Packit Service 639957
["Illegal backslash escape: \x15"]
Packit Service 639957
# fail15.json
Packit Service 639957
[\naked]
Packit Service 639957
# fail16.json
Packit Service 639957
["Illegal backslash escape: \017"]
Packit Service 639957
# fail17.json
Packit Service 639957
[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[["Too deep"]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]
Packit Service 639957
# fail18.json
Packit Service 639957
{"Missing colon" null}
Packit Service 639957
# fail19.json
Packit Service 639957
["Unclosed array"
Packit Service 639957
# fail2.json
Packit Service 639957
{"Double colon":: null}
Packit Service 639957
# fail20.json
Packit Service 639957
{"Comma instead of colon", null}
Packit Service 639957
# fail21.json
Packit Service 639957
["Colon instead of comma": false]
Packit Service 639957
# fail22.json
Packit Service 639957
["Bad value", truth]
Packit Service 639957
# fail23.json
Packit Service 639957
['single quote']
Packit Service 639957
# fail24.json
Packit Service 639957
["	tab	character	in	string	"]
Packit Service 639957
# fail25.json
Packit Service 639957
["tab\   character\   in\  string\  "]
Packit Service 639957
# fail26.json
Packit Service 639957
["line
Packit Service 639957
break"]
Packit Service 639957
# fail27.json
Packit Service 639957
["line\
Packit Service 639957
break"]
Packit Service 639957
# fail28.json
Packit Service 639957
[0e]
Packit Service 639957
# fail29.json
Packit Service 639957
{unquoted_key: "keys must be quoted"}
Packit Service 639957
# fail3.json
Packit Service 639957
[0e+]
Packit Service 639957
# fail30.json
Packit Service 639957
[0e+-1]
Packit Service 639957
# fail31.json
Packit Service 639957
{"Comma instead if closing brace": true,
Packit Service 639957
# fail32.json
Packit Service 639957
["mismatch"}
Packit Service 639957
# fail33.json
Packit Service 639957
["extra comma",]
Packit Service 639957
# fail4.json
Packit Service 639957
["double extra comma",,]
Packit Service 639957
# fail5.json
Packit Service 639957
[   , "<-- missing value"]
Packit Service 639957
# fail6.json
Packit Service 639957
["Comma after the close"],
Packit Service 639957
# fail7.json
Packit Service 639957
["Extra close"]]
Packit Service 639957
# fail8.json
Packit Service 639957
{"Extra comma": true,}
Packit Service 639957
# fail9.json
Packit Service 639957
[
Packit Service 639957
    "JSON Test Pattern pass1",
Packit Service 639957
    {"object with 1 member":["array with 1 element"]},
Packit Service 639957
    {},
Packit Service 639957
    [],
Packit Service 639957
    -42,
Packit Service 639957
    true,
Packit Service 639957
    false,
Packit Service 639957
    null,
Packit Service 639957
    {
Packit Service 639957
        "integer": 1234567890,
Packit Service 639957
        "real": -9876.543210,
Packit Service 639957
        "e": 0.123456789e-12,
Packit Service 639957
        "E": 1.234567890E+34,
Packit Service 639957
        "":  23456789012E66,
Packit Service 639957
        "zero": 0,
Packit Service 639957
        "one": 1,
Packit Service 639957
        "space": " ",
Packit Service 639957
        "quote": "\"",
Packit Service 639957
        "backslash": "\\",
Packit Service 639957
        "controls": "\b\f\n\r\t",
Packit Service 639957
        "slash": "/ & \/",
Packit Service 639957
        "alpha": "abcdefghijklmnopqrstuvwyz",
Packit Service 639957
        "ALPHA": "ABCDEFGHIJKLMNOPQRSTUVWYZ",
Packit Service 639957
        "digit": "0123456789",
Packit Service 639957
        "0123456789": "digit",
Packit Service 639957
        "special": "`1~!@#$%^&*()_+-={':[,]}|;.?",
Packit Service 639957
        "hex": "\u0123\u4567\u89AB\uCDEF\uabcd\uef4A",
Packit Service 639957
        "true": true,
Packit Service 639957
        "false": false,
Packit Service 639957
        "null": null,
Packit Service 639957
        "array":[  ],
Packit Service 639957
        "object":{  },
Packit Service 639957
        "address": "50 St. James Street",
Packit Service 639957
        "url": "http://www.JSON.org/",
Packit Service 639957
        "comment": "// /* 
Packit Service 639957
        "# -- --> */": " ",
Packit Service 639957
        " s p a c e d " :[1,2 , 3
Packit Service 639957
Packit Service 639957
,
Packit Service 639957
Packit Service 639957
4 , 5        ,          6           ,7        ],"compact":[1,2,3,4,5,6,7],
Packit Service 639957
        "jsontext": "{\"object with 1 member\":[\"array with 1 element\"]}",
Packit Service 639957
        "quotes": "" \u0022 %22 0x22 034 "",
Packit Service 639957
        "\/\\\"\uCAFE\uBABE\uAB98\uFCDE\ubcda\uef4A\b\f\n\r\t`1~!@#$%^&*()_+-=[]{}|;:',./<>?"
Packit Service 639957
: "A key can be any string"
Packit Service 639957
    },
Packit Service 639957
    0.5 ,98.6
Packit Service 639957
,
Packit Service 639957
99.44
Packit Service 639957
,
Packit Service 639957
Packit Service 639957
1066,
Packit Service 639957
1e1,
Packit Service 639957
0.1e1,
Packit Service 639957
1e-1,
Packit Service 639957
1e00,2e+00,2e-00
Packit Service 639957
,"rosebud"]
Packit Service 639957
# pass1.json
Packit Service 639957
[[[[[[[[[[[[[[[[[[["Not too deep"]]]]]]]]]]]]]]]]]]]
Packit Service 639957
# pass2.json
Packit Service 639957
{
Packit Service 639957
    "JSON Test Pattern pass3": {
Packit Service 639957
        "The outermost value": "must be an object or array.",
Packit Service 639957
        "In this test": "It is an object."
Packit Service 639957
    }
Packit Service 639957
}
Packit Service 639957
Packit Service 639957
# pass3.json