Commit | Line | Data |
---|---|---|
d5424315 DG |
1 | use Test::More; |
2 | ||
3 | # copied over from JSON::PP::PC and modified to use JSON::PP | |
4 | # copied over from JSON::PP::XS and modified to use JSON::PP | |
5 | ||
6 | use strict; | |
7 | BEGIN { plan tests => 20 }; | |
8 | ||
9 | BEGIN { $ENV{PERL_JSON_BACKEND} = 0; } | |
10 | ||
11 | use JSON::PP; | |
12 | ||
13 | my ($js,$obj); | |
14 | ||
15 | my $pc = new JSON::PP; | |
16 | ||
17 | $js = q|{}|; | |
18 | ||
19 | $obj = $pc->decode($js); | |
20 | $js = $pc->encode($obj); | |
21 | is($js,'{}', '{}'); | |
22 | ||
23 | $js = q|[]|; | |
24 | $obj = $pc->decode($js); | |
25 | $js = $pc->encode($obj); | |
26 | is($js,'[]', '[]'); | |
27 | ||
28 | ||
29 | $js = q|{"foo":"bar"}|; | |
30 | $obj = $pc->decode($js); | |
31 | is($obj->{foo},'bar'); | |
32 | $js = $pc->encode($obj); | |
33 | is($js,'{"foo":"bar"}', '{"foo":"bar"}'); | |
34 | ||
35 | $js = q|{"foo":""}|; | |
36 | $obj = $pc->decode($js); | |
37 | $js = $pc->encode($obj); | |
38 | is($js,'{"foo":""}', '{"foo":""}'); | |
39 | ||
40 | $js = q|{"foo":" "}|; | |
41 | $obj = $pc->decode($js); | |
42 | $js = $pc->encode($obj); | |
43 | is($js,'{"foo":" "}' ,'{"foo":" "}'); | |
44 | ||
45 | $js = q|{"foo":"0"}|; | |
46 | $obj = $pc->decode($js); | |
47 | $js = $pc->encode($obj); | |
48 | is($js,'{"foo":"0"}',q|{"foo":"0"} - autoencode (default)|); | |
49 | ||
50 | ||
51 | $js = q|{"foo":"0 0"}|; | |
52 | $obj = $pc->decode($js); | |
53 | $js = $pc->encode($obj); | |
54 | is($js,'{"foo":"0 0"}','{"foo":"0 0"}'); | |
55 | ||
56 | $js = q|[1,2,3]|; | |
57 | $obj = $pc->decode($js); | |
58 | is($obj->[1],2); | |
59 | $js = $pc->encode($obj); | |
60 | is($js,'[1,2,3]'); | |
61 | ||
62 | $js = q|{"foo":{"bar":"hoge"}}|; | |
63 | $obj = $pc->decode($js); | |
64 | is($obj->{foo}->{bar},'hoge'); | |
65 | $js = $pc->encode($obj); | |
66 | is($js,q|{"foo":{"bar":"hoge"}}|); | |
67 | ||
68 | $js = q|[{"foo":[1,2,3]},-0.12,{"a":"b"}]|; | |
69 | $obj = $pc->decode($js); | |
70 | $js = $pc->encode($obj); | |
71 | is($js,q|[{"foo":[1,2,3]},-0.12,{"a":"b"}]|); | |
72 | ||
73 | ||
74 | $obj = ["\x01"]; | |
75 | is($js = $pc->encode($obj),'["\\u0001"]'); | |
76 | $obj = $pc->decode($js); | |
77 | is($obj->[0],"\x01"); | |
78 | ||
79 | $obj = ["\e"]; | |
80 | is($js = $pc->encode($obj),'["\\u001b"]'); | |
81 | $obj = $pc->decode($js); | |
82 | is($obj->[0],"\e"); | |
83 | ||
84 | $js = '{"id":"}'; | |
85 | eval q{ $pc->decode($js) }; | |
86 | like($@, qr/unexpected end/i); | |
87 | ||
88 | $obj = { foo => sub { "bar" } }; | |
89 | eval q{ $js = $pc->encode($obj) }; | |
90 | like($@, qr/JSON can only/i, 'invalid value (coderef)'); | |
91 | ||
92 | #$obj = { foo => bless {}, "Hoge" }; | |
93 | #eval q{ $js = $pc->encode($obj) }; | |
94 | #like($@, qr/JSON::PP can only/i, 'invalid value (blessd object)'); | |
95 | ||
96 | $obj = { foo => \$js }; | |
97 | eval q{ $js = $pc->encode($obj) }; | |
98 | like($@, qr/cannot encode reference/i, 'invalid value (ref)'); | |
99 |