ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/JSON-XS/t/19_incr.t
Revision: 1.5
Committed: Thu May 23 09:31:32 2013 UTC (11 years, 1 month ago) by root
Content type: application/x-troff
Branch: MAIN
CVS Tags: rel-3_0, rel-2_34, rel-3_01, rel-3_02, rel-3_03, rel-3_04
Changes since 1.4: +3 -0 lines
Log Message:
2.34

File Contents

# User Rev Content
1 root 1.1 #! perl
2    
3     use strict;
4     no warnings;
5     use Test::More;
6 root 1.4 BEGIN { plan tests => 697 };
7 root 1.1
8     use JSON::XS;
9    
10     sub splitter {
11     my ($coder, $text) = @_;
12    
13 root 1.5 # work around hash randomisation bug introduced in 5.18
14     $coder->canonical;
15    
16 root 1.1 for (0 .. length $text) {
17     my $a = substr $text, 0, $_;
18     my $b = substr $text, $_;
19    
20     $coder->incr_parse ($a);
21     $coder->incr_parse ($b);
22    
23     my $data = $coder->incr_parse;
24     ok ($data);
25     ok ($coder->encode ($data) eq $coder->encode ($coder->decode ($text)), "data");
26     ok ($coder->incr_text =~ /^\s*$/, "tailws");
27     }
28     }
29    
30     splitter +JSON::XS->new , ' ["x\\"","\\u1000\\\\n\\nx",1,{"\\\\" :5 , "": "x"}]';
31     splitter +JSON::XS->new , '[ "x\\"","\\u1000\\\\n\\nx" , 1,{"\\\\ " :5 , "": " x"} ] ';
32     splitter +JSON::XS->new->allow_nonref, '"test"';
33     splitter +JSON::XS->new->allow_nonref, ' "5" ';
34    
35 root 1.2 {
36     my $text = '[5],{"":1} , [ 1,2, 3], {"3":null}';
37     my $coder = new JSON::XS;
38     for (0 .. length $text) {
39     my $a = substr $text, 0, $_;
40     my $b = substr $text, $_;
41    
42     $coder->incr_parse ($a);
43     $coder->incr_parse ($b);
44    
45     my $j1 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip1");
46     my $j2 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip2");
47     my $j3 = $coder->incr_parse; ok ($coder->incr_text =~ s/^\s*,//, "cskip3");
48     my $j4 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip4");
49     my $j5 = $coder->incr_parse; ok ($coder->incr_text !~ s/^\s*,//, "cskip5");
50    
51     ok ('[5]' eq encode_json $j1, "cjson1");
52     ok ('{"":1}' eq encode_json $j2, "cjson2");
53     ok ('[1,2,3]' eq encode_json $j3, "cjson3");
54     ok ('{"3":null}' eq encode_json $j4, "cjson4");
55     ok (!defined $j5, "cjson5");
56     }
57     }
58    
59     {
60     my $text = '[x][5]';
61     my $coder = new JSON::XS;
62     $coder->incr_parse ($text);
63     ok (!eval { $coder->incr_parse }, "sparse1");
64     ok (!eval { $coder->incr_parse }, "sparse2");
65     $coder->incr_skip;
66     ok ('[5]' eq $coder->encode (scalar $coder->incr_parse), "sparse3");
67 root 1.1 }
68    
69 root 1.3 {
70     my $coder = JSON::XS->new->max_size (5);
71     ok (!$coder->incr_parse ("[ "), "incsize1");
72     eval { !$coder->incr_parse ("] ") }; ok ($@ =~ /6 bytes/, "incsize2 $@");
73     }
74    
75     {
76     my $coder = JSON::XS->new->max_depth (3);
77     ok (!$coder->incr_parse ("[[["), "incdepth1");
78     eval { !$coder->incr_parse (" [] ") }; ok ($@ =~ /maximum nesting/, "incdepth2 $@");
79     }
80    
81 root 1.4 # contributed by yuval kogman, reformatted to fit style
82     {
83     my $coder = JSON::XS->new;
84    
85     my $res = eval { $coder->incr_parse("]") };
86     my $e = $@; # test more clobbers $@, we need it twice
87    
88     ok (!$res, "unbalanced bracket");
89     ok ($e, "got error");
90     like ($e, qr/malformed/, "malformed json string error");
91    
92     $coder->incr_skip;
93    
94     is_deeply (eval { $coder->incr_parse("[42]") }, [42], "valid data after incr_skip");
95     }
96    
97 root 1.3