xref: /openbsd-src/gnu/usr.bin/perl/cpan/JSON-PP/t/120_incr_parse_truncated.t (revision f2a19305cfc49ea4d1a5feb55cd6c283c6f1e031)
1*f2a19305Safresh1use strict;
2*f2a19305Safresh1use warnings;
3*f2a19305Safresh1use Test::More;
4*f2a19305Safresh1use JSON::PP;
5*f2a19305Safresh1
6*f2a19305Safresh1plan tests => 19 * 3 + 1 * 6;
7*f2a19305Safresh1
8*f2a19305Safresh1sub run_test {
9*f2a19305Safresh1    my ($input, $sub) = @_;
10*f2a19305Safresh1    $sub->($input);
11*f2a19305Safresh1}
12*f2a19305Safresh1
13*f2a19305Safresh1run_test('{"one": 1}', sub {
14*f2a19305Safresh1    my $input = shift;
15*f2a19305Safresh1    my $coder = JSON::PP->new;
16*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
17*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
18*f2a19305Safresh1    ok ($res, "curly braces okay -- '$input'");
19*f2a19305Safresh1    ok (!$e, "no error -- '$input'");
20*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error");
21*f2a19305Safresh1});
22*f2a19305Safresh1
23*f2a19305Safresh1run_test('{"one": 1]', sub {
24*f2a19305Safresh1    my $input = shift;
25*f2a19305Safresh1    my $coder = JSON::PP->new;
26*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
27*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
28*f2a19305Safresh1    ok (!$res, "unbalanced curly braces -- '$input'");
29*f2a19305Safresh1    ok ($e, "got error -- '$input'");
30*f2a19305Safresh1    like ($e, qr/, or \} expected while parsing object\/hash/, "'} expected' json string error");
31*f2a19305Safresh1});
32*f2a19305Safresh1
33*f2a19305Safresh1run_test('"', sub {
34*f2a19305Safresh1    my $input = shift;
35*f2a19305Safresh1    my $coder = JSON::PP->new;
36*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
37*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
38*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
39*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
40*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
41*f2a19305Safresh1});
42*f2a19305Safresh1
43*f2a19305Safresh1run_test('{', sub {
44*f2a19305Safresh1    my $input = shift;
45*f2a19305Safresh1    my $coder = JSON::PP->new;
46*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
47*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
48*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
49*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
50*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
51*f2a19305Safresh1});
52*f2a19305Safresh1
53*f2a19305Safresh1run_test('[', sub {
54*f2a19305Safresh1    my $input = shift;
55*f2a19305Safresh1    my $coder = JSON::PP->new;
56*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
57*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
58*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
59*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
60*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
61*f2a19305Safresh1});
62*f2a19305Safresh1
63*f2a19305Safresh1run_test('}', sub {
64*f2a19305Safresh1    my $input = shift;
65*f2a19305Safresh1    my $coder = JSON::PP->new;
66*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
67*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
68*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
69*f2a19305Safresh1    ok ($e, "no error for input='$input'");
70*f2a19305Safresh1    like ($e, qr/malformed JSON string/, "'malformed JSON string' json string error for input='$input'");
71*f2a19305Safresh1});
72*f2a19305Safresh1
73*f2a19305Safresh1run_test(']', sub {
74*f2a19305Safresh1    my $input = shift;
75*f2a19305Safresh1    my $coder = JSON::PP->new;
76*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
77*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
78*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
79*f2a19305Safresh1    ok ($e, "no error for input='$input'");
80*f2a19305Safresh1    like ($e, qr/malformed JSON string/, "'malformed JSON string' json string error for input='$input'");
81*f2a19305Safresh1});
82*f2a19305Safresh1
83*f2a19305Safresh1run_test('1', sub {
84*f2a19305Safresh1    my $input = shift;
85*f2a19305Safresh1    my $coder = JSON::PP->new;
86*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
87*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
88*f2a19305Safresh1    ok ($res, "truncated input='$input'");
89*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
90*f2a19305Safresh1    unlike ($e, qr/malformed JSON string/, "'malformed JSON string' json string error for input='$input'");
91*f2a19305Safresh1});
92*f2a19305Safresh1
93*f2a19305Safresh1run_test('1', sub {
94*f2a19305Safresh1    my $input = shift;
95*f2a19305Safresh1    my $coder = JSON::PP->new->allow_nonref(0);
96*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
97*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
98*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
99*f2a19305Safresh1    ok ($e, "no error for input='$input'");
100*f2a19305Safresh1    like ($e, qr/JSON text must be an object or array/, "'JSON text must be an object or array' json string error for input='$input'");
101*f2a19305Safresh1});
102*f2a19305Safresh1
103*f2a19305Safresh1run_test('"1', sub {
104*f2a19305Safresh1    my $input = shift;
105*f2a19305Safresh1    my $coder = JSON::PP->new;
106*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
107*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
108*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
109*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
110*f2a19305Safresh1    unlike ($e, qr/malformed JSON string/, "'malformed JSON string' json string error for input='$input'");
111*f2a19305Safresh1});
112*f2a19305Safresh1
113*f2a19305Safresh1run_test('\\', sub {
114*f2a19305Safresh1    my $input = shift;
115*f2a19305Safresh1    my $coder = JSON::PP->new;
116*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
117*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
118*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
119*f2a19305Safresh1    ok ($e, "no error for input='$input'");
120*f2a19305Safresh1    like ($e, qr/malformed JSON string/, "'malformed JSON string' json string error for input='$input'");
121*f2a19305Safresh1});
122*f2a19305Safresh1
123*f2a19305Safresh1run_test('{"one": "', sub {
124*f2a19305Safresh1    my $input = shift;
125*f2a19305Safresh1    my $coder = JSON::PP->new;
126*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
127*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
128*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
129*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
130*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
131*f2a19305Safresh1});
132*f2a19305Safresh1
133*f2a19305Safresh1run_test('{"one": {', sub {
134*f2a19305Safresh1    my $input = shift;
135*f2a19305Safresh1    my $coder = JSON::PP->new;
136*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
137*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
138*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
139*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
140*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
141*f2a19305Safresh1});
142*f2a19305Safresh1
143*f2a19305Safresh1run_test('{"one": [', sub {
144*f2a19305Safresh1    my $input = shift;
145*f2a19305Safresh1    my $coder = JSON::PP->new;
146*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
147*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
148*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
149*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
150*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
151*f2a19305Safresh1});
152*f2a19305Safresh1
153*f2a19305Safresh1run_test('{"one": t', sub {
154*f2a19305Safresh1    my $input = shift;
155*f2a19305Safresh1    my $coder = JSON::PP->new;
156*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
157*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
158*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
159*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
160*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
161*f2a19305Safresh1});
162*f2a19305Safresh1
163*f2a19305Safresh1run_test('{"one": \\', sub {
164*f2a19305Safresh1    my $input = shift;
165*f2a19305Safresh1    my $coder = JSON::PP->new;
166*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
167*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
168*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
169*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
170*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
171*f2a19305Safresh1});
172*f2a19305Safresh1
173*f2a19305Safresh1run_test('{"one": ', sub {
174*f2a19305Safresh1    my $input = shift;
175*f2a19305Safresh1    my $coder = JSON::PP->new;
176*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
177*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
178*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
179*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
180*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
181*f2a19305Safresh1});
182*f2a19305Safresh1
183*f2a19305Safresh1run_test('{"one": 1', sub {
184*f2a19305Safresh1    my $input = shift;
185*f2a19305Safresh1    my $coder = JSON::PP->new;
186*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
187*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
188*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
189*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
190*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
191*f2a19305Safresh1});
192*f2a19305Safresh1
193*f2a19305Safresh1run_test('{"one": {"two": 2', sub {
194*f2a19305Safresh1    my $input = shift;
195*f2a19305Safresh1    my $coder = JSON::PP->new;
196*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
197*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
198*f2a19305Safresh1    ok (!$res, "truncated '$input'");
199*f2a19305Safresh1    ok (!$e, "no error -- '$input'");
200*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error -- $input");
201*f2a19305Safresh1});
202*f2a19305Safresh1
203*f2a19305Safresh1# Test Appending Closing '}' Curly Bracket
204*f2a19305Safresh1run_test('{"one": 1', sub {
205*f2a19305Safresh1    my $input = shift;
206*f2a19305Safresh1    my $coder = JSON::PP->new;
207*f2a19305Safresh1    my $res = eval { $coder->incr_parse($input) };
208*f2a19305Safresh1    my $e = $@; # test more clobbers $@, we need it twice
209*f2a19305Safresh1    ok (!$res, "truncated input='$input'");
210*f2a19305Safresh1    ok (!$e, "no error for input='$input'");
211*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input'");
212*f2a19305Safresh1
213*f2a19305Safresh1    $res = eval { $coder->incr_parse('}') };
214*f2a19305Safresh1    $e = $@; # test more clobbers $@, we need it twice
215*f2a19305Safresh1    ok ($res, "truncated input='$input' . '}'");
216*f2a19305Safresh1    ok (!$e, "no error for input='$input' . '}'");
217*f2a19305Safresh1    unlike ($e, qr/, or \} expected while parsing object\/hash/, "No '} expected' json string error for input='$input' . '}'");
218*f2a19305Safresh1});
219