| 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 | |