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