From 4231195ec35373eba923cb731ab38e9a460748e4 Mon Sep 17 00:00:00 2001 From: sboyette Date: Tue, 15 Sep 2009 16:19:46 +0000 Subject: [PATCH 1/1] WIP git-svn-id: svn://svn.open-ils.org/OpenSRF/trunk@1788 9efc2488-bf62-4759-914b-345cdb29e865 --- src/perl/t/09-Utils-JSON.t | 105 ++++++++++++++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 2 deletions(-) diff --git a/src/perl/t/09-Utils-JSON.t b/src/perl/t/09-Utils-JSON.t index 8f87ea9..c063ecd 100644 --- a/src/perl/t/09-Utils-JSON.t +++ b/src/perl/t/09-Utils-JSON.t @@ -1,9 +1,14 @@ #!perl -T -use Test::More tests => 6; +use Test::More tests => 38; use OpenSRF::Utils::JSON; + +# +# initial state from use +# + # do we have a JSON::XS object? is (ref $OpenSRF::Utils::JSON::parser, 'JSON::XS'); @@ -16,4 +21,100 @@ is (OpenSRF::Utils::JSON::true, 1); is (OpenSRF::Utils::JSON->true, 1); is (OpenSRF::Utils::JSON->false, 0); -# shove some hints in + +# +# register_class_hint +my $testmap = { hints => { osrfException => + { hint => 'osrfException', + name => 'OpenSRF::DomainObject::oilsException' } + }, + classes => { OpenSRF::DomainObject::oilsException => + { hint => 'osrfException', + name => 'OpenSRF::DomainObject::oilsException' } + } + }; +OpenSRF::Utils::JSON->register_class_hint( hint => 'osrfException', + name => 'OpenSRF::DomainObject::oilsException'); +is_deeply (\%OpenSRF::Utils::JSON::_class_map, $testmap); + + +# +# lookup_class +is (OpenSRF::Utils::JSON->lookup_class('osrfException'), 'OpenSRF::DomainObject::oilsException'); +is (OpenSRF::Utils::JSON->lookup_class(37), undef, "Argument doesn't exist"); +is (OpenSRF::Utils::JSON->lookup_class(''), undef, "Null string lookup"); +is (OpenSRF::Utils::JSON->lookup_class(), undef, "Null request"); + + +# +# lookup_hint +is (OpenSRF::Utils::JSON->lookup_hint('OpenSRF::DomainObject::oilsException'), 'osrfException'); +is (OpenSRF::Utils::JSON->lookup_hint(37), undef, "Argument doesn't exist"); +is (OpenSRF::Utils::JSON->lookup_hint(''), undef, "Null string lookup"); +is (OpenSRF::Utils::JSON->lookup_hint(), undef, "Null request"); + + +# +# rawPerl2JSON +my $struct = [ { foo => 'bar' }, 'baz', 'quux', 'x']; +is (OpenSRF::Utils::JSON->rawPerl2JSON($struct), + '[{"foo":"bar"},"baz","quux","x"]'); +is (OpenSRF::Utils::JSON->rawPerl2JSON(''), '""', "Null string as argument"); + + +# +# rawJSON2perl +is_deeply (OpenSRF::Utils::JSON->rawJSON2perl(OpenSRF::Utils::JSON->rawPerl2JSON($struct)), + [ { foo => 'bar' }, 'baz', 'quux', 'x']); +is (OpenSRF::Utils::JSON->rawJSON2perl(), undef, "Null argument"); +is (OpenSRF::Utils::JSON->rawJSON2perl(''), undef, "Null string as argument"); + + +# +# perl2JSONObject +is (OpenSRF::Utils::JSON->perl2JSONObject(), undef, "Returns argument unless it's a ref"); +is (OpenSRF::Utils::JSON->perl2JSONObject(3), 3, "Returns argument unless it's a ref"); +is (OpenSRF::Utils::JSON->perl2JSONObject('foo'), 'foo', "Returns argument unless it's a ref"); + +is (ref OpenSRF::Utils::JSON->true, 'JSON::XS::Boolean'); +is (OpenSRF::Utils::JSON->perl2JSONObject(OpenSRF::Utils::JSON->true), '1', "Returns argument if it's a JSON::XS::Boolean"); + +my $hashref = { foo => 'bar' }; +is (UNIVERSAL::isa($hashref,'HASH'), 1); +is_deeply (OpenSRF::Utils::JSON->perl2JSONObject($hashref), { foo => 'bar' }, "Passing in unblessed hashref"); + +my $arryref = [ 11, 12 ]; +is (UNIVERSAL::isa($arryref,'ARRAY'), 1); +is_deeply (OpenSRF::Utils::JSON->perl2JSONObject($arryref), [ 11, 12 ], "Passing in unblessed arrayref"); + +my $coderef = sub { return 0 }; # this is almost certainly undesired behavior, but the +is (UNIVERSAL::isa($coderef,'CODE'), 1); # code doesn't stop me from doing it +is_deeply (OpenSRF::Utils::JSON->perl2JSONObject($coderef), + { __c => 'CODE', __p => undef }, "Passing in coderef"); + +my $fakeobj = bless { foo => 'bar' }, 'OpenSRF::DomainObject::oilsException'; +is (UNIVERSAL::isa($fakeobj,'HASH'), 1); +my $jsonobj = OpenSRF::Utils::JSON->perl2JSONObject($fakeobj); +is_deeply ($jsonobj, { __c => 'osrfException', __p => { foo => 'bar' } }, + "Wrap object into an OpenSRF-shaped packet"); + + +# +# perl2JSON +my $jsonstr = OpenSRF::Utils::JSON->perl2JSON($fakeobj); +is ($jsonstr, '{"__c":"osrfException","__p":{"foo":"bar"}}'); + + +# +# JSONObject2Perl +is (OpenSRF::Utils::JSON->JSONObject2Perl(), undef, "Returns argument unless it's a ref"); +is (OpenSRF::Utils::JSON->JSONObject2Perl(3), 3, "Returns argument unless it's a ref"); +is (OpenSRF::Utils::JSON->JSONObject2Perl('foo'), 'foo', "Returns argument unless it's a ref"); +is (OpenSRF::Utils::JSON->JSONObject2Perl($coderef), $coderef, "Returns argument unless it's a ref"); + +is_deeply (OpenSRF::Utils::JSON->JSONObject2Perl([11, 12]), [11, 12], "Arrayrefs get reconstructed as themselves"); +is_deeply (OpenSRF::Utils::JSON->JSONObject2Perl([11, OpenSRF::Utils::JSON->true, 12]), [11, OpenSRF::Utils::JSON->true, 12], + "Even when they contain JSON::XS::Booleans; those just don't get recursed upon"); + # note: [11, 1, 12] doesn't work here, even though you can + # do math on J:X:Booleans + -- 2.43.2