#!/usr/bin/perl use strict; use warnings; use Test::More 'no_plan'; use Test::Exception; use JSON; use ok 'JSON::RPC::Common::Marshal::Text'; { my $m_json = JSON::RPC::Common::Marshal::Text->new; isa_ok( $m_json, "JSON::RPC::Common::Marshal::Text" ); my $call = $m_json->json_to_call(<version, "2.0", "version" ); is( $call->id, "dancing", "id" ); my $res = $call->return_result("bah"); my $text = $m_json->return_to_json($res); is_deeply( from_json($text), { jsonrpc => "2.0", id => "dancing", result => "bah", }, "result encoding", ); ok( $m_json->json_to_call('{"jsonrpc":"2.0","params":{"foo":3},"method":"hello"}'), "notification (2.0)" ); my $no_ver = $m_json->json_to_call('{"id":"moo","params":[],"method":"hello"}'); ok( $no_ver, "missing version parsed" ); is( $no_ver->version, "1.0", "version 1.0" ); my %required = ( method => '{"jsonrpc":"2.0","params":{},"id":3}', # missing method params => '{"method":"hello","id":3}', # missing params id => '{"params":[],"method":"hello"}', # missing id (version 1.0) ); foreach my $req ( keys %required ) { throws_ok { $m_json->json_to_call($required{$req}); } qr/\Q$req\E.*required/, "required param $req"; } dies_ok { $m_json->json_to_call("adtjhat3!!!!") } "JSON parse error"; }