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 => 689 }; |
6 | BEGIN { plan tests => 697 }; |
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) = @_; |
… | |
… | |
61 | ok (!eval { $coder->incr_parse }, "sparse2"); |
61 | ok (!eval { $coder->incr_parse }, "sparse2"); |
62 | $coder->incr_skip; |
62 | $coder->incr_skip; |
63 | ok ('[5]' eq $coder->encode (scalar $coder->incr_parse), "sparse3"); |
63 | ok ('[5]' eq $coder->encode (scalar $coder->incr_parse), "sparse3"); |
64 | } |
64 | } |
65 | |
65 | |
|
|
66 | { |
|
|
67 | my $coder = JSON::XS->new->max_size (5); |
|
|
68 | ok (!$coder->incr_parse ("[ "), "incsize1"); |
|
|
69 | eval { !$coder->incr_parse ("] ") }; ok ($@ =~ /6 bytes/, "incsize2 $@"); |
|
|
70 | } |
|
|
71 | |
|
|
72 | { |
|
|
73 | my $coder = JSON::XS->new->max_depth (3); |
|
|
74 | ok (!$coder->incr_parse ("[[["), "incdepth1"); |
|
|
75 | eval { !$coder->incr_parse (" [] ") }; ok ($@ =~ /maximum nesting/, "incdepth2 $@"); |
|
|
76 | } |
|
|
77 | |
|
|
78 | # contributed by yuval kogman, reformatted to fit style |
|
|
79 | { |
|
|
80 | my $coder = JSON::XS->new; |
|
|
81 | |
|
|
82 | my $res = eval { $coder->incr_parse("]") }; |
|
|
83 | my $e = $@; # test more clobbers $@, we need it twice |
|
|
84 | |
|
|
85 | ok (!$res, "unbalanced bracket"); |
|
|
86 | ok ($e, "got error"); |
|
|
87 | like ($e, qr/malformed/, "malformed json string error"); |
|
|
88 | |
|
|
89 | $coder->incr_skip; |
|
|
90 | |
|
|
91 | is_deeply (eval { $coder->incr_parse("[42]") }, [42], "valid data after incr_skip"); |
|
|
92 | } |
|
|
93 | |
|
|
94 | |