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