use Test::More;
use strict;
BEGIN { plan tests => 40 };
use JSON;
use CGI;
use IO::File;
my ($obj, $obj2, $js);
$obj = new MyTest;
$js = objToJson($obj);
ok(!defined $js);
{
local $JSON::ConvBlessed = 1;
local $JSON::AUTOCONVERT = 1;
my ($obj, $obj2, $js);
$obj = new MyTest;
$obj2 = new MyTest2;
@{$obj2} = (1,2,3);
$obj->{a} = $obj2;
$obj->{b} = q|{'a' => bless( {}, 'MyTest' )}|;
$obj->{c} = new CGI;
$obj->{d} = JSON::Number(1.3);
$obj->{e} = 1.3;
$js = objToJson($obj);
like($js, qr/"a":\[1,2,3\]/);
like($js, qr/"b":"{'a' => bless\( {}, 'MyTest' \)}"/);
like($js, qr/"d":1.3/);
like($js, qr/"e":1.3/);
my $obj3 = jsonToObj($js);
is($obj3->{a}->[0], $obj->{a}->[0]);
is($obj3->{a}->[1], $obj->{a}->[1]);
is($obj3->{a}->[2], $obj->{a}->[2]);
is($obj3->{b}, $obj->{b});
is($obj3->{d}, "$obj->{d}");
$js = objToJson([$obj]);
like($js, qr/^\[{"[a-e]"/);
like($js, qr/"a":\[1,2,3\]/);
like($js, qr/"b":"{'a' => bless\( {}, 'MyTest' \)}"/);
like($js, qr/"d":1.3/);
$js = objToJson({hoge => $obj});
like($js, qr/^{"hoge":{"[a-e]"/);
like($js, qr/"a":\[1,2,3\]/);
like($js, qr/"b":"{'a' => bless\( {}, 'MyTest' \)}"/);
like($js, qr/"d":1.3/);
}
{
local $JSON::ConvBlessed = 1;
local $JSON::AUTOCONVERT = 1;
$obj = new MyTest;
$obj2 = new MyTest2;
@{$obj2} = (1,2,3);
$obj->{a} = $obj2;
$obj->{b} = q|{'a' => bless( {}, 'MyTest' )}|;
$obj->{c} = new CGI;
$obj->{d} = JSON::Number(1.3);
$obj->{e} = 1.3;
$js = objToJson($obj);
#print $js,"\n";
like($js, qr/"a":\[1,2,3\]/);
like($js, qr/"b":"{'a' => bless\( {}, 'MyTest' \)}"/);
like($js, qr/"d":1.3/);
like($js, qr/"e":1.3/);
my $obj3 = jsonToObj($js);
is($obj3->{a}->[0], $obj->{a}->[0]);
is($obj3->{a}->[1], $obj->{a}->[1]);
is($obj3->{a}->[2], $obj->{a}->[2]);
is($obj3->{b}, $obj->{b});
is($obj3->{d}, "$obj->{d}");
}
{
local $JSON::ConvBlessed = 1;
local $JSON::AUTOCONVERT = 0;
$obj = new MyTest;
$obj2 = new MyTest2;
@{$obj2} = (JSON::Number(1),JSON::Number(2),JSON::Number(3));
$obj->{a} = $obj2;
$obj->{b} = q|{'a' => bless( {}, 'MyTest' )}|;
$obj->{c} = new CGI;
$obj->{d} = JSON::Number(1.3);
$obj->{e} = 1.3;
$js = objToJson($obj);
#print $js,"\n";
like($js, qr/"a":\[1,2,3\]/);
like($js, qr/"b":"{'a' => bless\( {}, 'MyTest' \)}"/);
like($js, qr/"d":1.3/);
like($js, qr/"e":1.3/);
my $obj3 = jsonToObj($js);
is($obj3->{a}->[0], "$obj->{a}->[0]");
is($obj3->{a}->[1], "$obj->{a}->[1]");
is($obj3->{a}->[2], "$obj->{a}->[2]");
is($obj3->{b}, $obj->{b});
is($obj3->{d}, "$obj->{d}");
}
my $json = new JSON;
$obj = new MyTest;
$obj2 = new MyTest2;
@{$obj2} = (1,2,3);
$obj->{a} = $obj2;
$obj->{b} = q|{'a' => bless( {}, 'MyTest' )}|;
$obj->{c} = new CGI;
$obj->{d} = JSON::Number(1.3);
$obj->{e} = 1.3;
$json->convblessed(1);
$js = $json->objToJson($obj);
like($js, qr/"a":\[1,2,3\]/);
$json->convblessed(0);
$js = $json->objToJson($obj);
ok(!defined $js);
$json = JSON->new(convblessed => 0);
$js = $json->objToJson($obj);
ok(!defined $js);
$json = JSON->new(convblessed => 1);
$js = $json->objToJson($obj);
like($js, qr/"a":\[1,2,3\]/);
########################
package MyTest;
use overload (
'""' => sub { 'test' },
);
sub new { bless {}, shift; }
package MyTest2;
use overload (
'""' => sub { 'test' },
);
sub new { bless [], shift; }
__END__