1 | #! perl |
1 | #! perl |
2 | |
2 | |
3 | use strict; |
3 | use strict; |
4 | no warnings; |
4 | no warnings; |
5 | use Test::More; |
5 | use Test::More; |
6 | BEGIN { plan tests => 686 }; |
6 | BEGIN { plan tests => 689 }; |
7 | |
7 | |
8 | use JSON::XS; |
8 | use JSON::XS; |
9 | |
9 | |
10 | sub splitter { |
10 | sub splitter { |
11 | my ($coder, $text) = @_; |
11 | my ($coder, $text) = @_; |
… | |
… | |
27 | splitter +JSON::XS->new , ' ["x\\"","\\u1000\\\\n\\nx",1,{"\\\\" :5 , "": "x"}]'; |
27 | splitter +JSON::XS->new , ' ["x\\"","\\u1000\\\\n\\nx",1,{"\\\\" :5 , "": "x"}]'; |
28 | splitter +JSON::XS->new , '[ "x\\"","\\u1000\\\\n\\nx" , 1,{"\\\\ " :5 , "": " x"} ] '; |
28 | splitter +JSON::XS->new , '[ "x\\"","\\u1000\\\\n\\nx" , 1,{"\\\\ " :5 , "": " x"} ] '; |
29 | splitter +JSON::XS->new->allow_nonref, '"test"'; |
29 | splitter +JSON::XS->new->allow_nonref, '"test"'; |
30 | splitter +JSON::XS->new->allow_nonref, ' "5" '; |
30 | splitter +JSON::XS->new->allow_nonref, ' "5" '; |
31 | |
31 | |
|
|
32 | { |
32 | my $text = '[5],{"":1} , [ 1,2, 3], {"3":null}'; |
33 | my $text = '[5],{"":1} , [ 1,2, 3], {"3":null}'; |
33 | my $coder = new JSON::XS; |
34 | my $coder = new JSON::XS; |
34 | for (0 .. length $text) { |
35 | for (0 .. length $text) { |
35 | my $a = substr $text, 0, $_; |
36 | my $a = substr $text, 0, $_; |
36 | my $b = substr $text, $_; |
37 | my $b = substr $text, $_; |
37 | |
38 | |
38 | $coder->incr_parse ($a); |
39 | $coder->incr_parse ($a); |
39 | $coder->incr_parse ($b); |
40 | $coder->incr_parse ($b); |
40 | |
41 | |
41 | my $j1 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip1"); |
42 | my $j1 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip1"); |
42 | my $j2 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip2"); |
43 | my $j2 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip2"); |
43 | my $j3 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip3"); |
44 | my $j3 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip3"); |
44 | my $j4 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip4"); |
45 | my $j4 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip4"); |
45 | my $j5 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip5"); |
46 | my $j5 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip5"); |
46 | |
47 | |
47 | ok ('[5]' eq encode_json $j1, "cjson1"); |
48 | ok ('[5]' eq encode_json $j1, "cjson1"); |
48 | ok ('{"":1}' eq encode_json $j2, "cjson2"); |
49 | ok ('{"":1}' eq encode_json $j2, "cjson2"); |
49 | ok ('[1,2,3]' eq encode_json $j3, "cjson3"); |
50 | ok ('[1,2,3]' eq encode_json $j3, "cjson3"); |
50 | ok ('{"3":null}' eq encode_json $j4, "cjson4"); |
51 | ok ('{"3":null}' eq encode_json $j4, "cjson4"); |
51 | ok (!defined $j5, "cjson5"); |
52 | ok (!defined $j5, "cjson5"); |
|
|
53 | } |
52 | } |
54 | } |
53 | |
55 | |
|
|
56 | { |
|
|
57 | my $text = '[x][5]'; |
|
|
58 | my $coder = new JSON::XS; |
|
|
59 | $coder->incr_parse ($text); |
|
|
60 | ok (!eval { $coder->incr_parse }, "sparse1"); |
|
|
61 | ok (!eval { $coder->incr_parse }, "sparse2"); |
|
|
62 | $coder->incr_skip; |
|
|
63 | ok ('[5]' eq $coder->encode (scalar $coder->incr_parse), "sparse3"); |
|
|
64 | } |
|
|
65 | |