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