* @license http://www.apache.org/licenses/LICENSE-2.0 * @link http://phpsx.org */ class ServerTest extends TestCase { /** * @dataProvider invokeProvider */ public function testInvoke($request, $expect, $callable) { $invoker = new Server($callable); $actual = $invoker->invoke(\json_decode($request)); $this->assertJsonStringEqualsJsonString($expect, \json_encode($actual)); } public function invokeProvider() { return [ [ '{"jsonrpc": "2.0", "method": "subtract", "params": [42, 23], "id": 1}', '{"jsonrpc": "2.0", "result": 19, "id": 1}', function($method, $arguments){ return $arguments[0] - $arguments[1]; } ], [ '{"jsonrpc": "2.0", "method": "subtract", "params": [23, 42], "id": 2}', '{"jsonrpc": "2.0", "result": -19, "id": 2}', function($method, $arguments){ return $arguments[0] - $arguments[1]; } ], [ '{"jsonrpc": "2.0", "method": "subtract", "params": {"subtrahend": 23, "minuend": 42}, "id": 3}', '{"jsonrpc": "2.0", "result": 19, "id": 3}', function($method, $arguments){ return $arguments->minuend - $arguments->subtrahend; } ], [ '{"jsonrpc": "2.0", "method": "subtract", "params": {"minuend": 42, "subtrahend": 23}, "id": 4}', '{"jsonrpc": "2.0", "result": 19, "id": 4}', function($method, $arguments){ return $arguments->minuend - $arguments->subtrahend; } ], [ '{"jsonrpc": "2.0", "method": "update", "params": [1,2,3,4,5]}', '{"jsonrpc":"2.0","result":null,"id":null}', function($method, $arguments){ return null; } ], [ '{"jsonrpc": "2.0", "method": "foobar"}', '{"jsonrpc":"2.0","result":null,"id":null}', function($method, $arguments){ return null; } ], [ '{"jsonrpc": "2.0", "method": "foobar", "id": 1}', '{"jsonrpc": "2.0", "error": {"code": -32601, "message": "Method not found"}, "id": 1}', function($method, $arguments){ throw new MethodNotFoundException('Method not found'); } ], [ '{"jsonrpc": "2.0", "method": "foobar, "params": "bar", "baz]', '{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', function($method, $arguments){ throw new ParseErrorException('Parse error'); } ], [ '{"jsonrpc": "2.0", "method": 1, "params": "bar"}', '{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', function($method, $arguments){ throw new InvalidRequestException('Invalid Request'); } ], [ "[\n {"jsonrpc": "2.0", "method": "sum", "params": [1,2,4], "id": "1"},\n {"jsonrpc": "2.0", "method"\n]", '{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', function($method, $arguments){ throw new ParseErrorException('Parse error'); } ], [ '[]', '{"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}', function($method, $arguments){ throw new InvalidRequestException('Invalid Request'); } ], [ '[1]', "[\n {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}\n]", function($method, $arguments){ throw new InvalidRequestException('Invalid Request'); } ], [ '[1,2,3]', "[\n {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},\n {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null},\n {"jsonrpc": "2.0", "error": {"code": -32600, "message": "Invalid Request"}, "id": null}\n]", function($method, $arguments){ throw new InvalidRequestException('Invalid Request'); } ], ]; } } __halt_compiler();----SIGNATURE:----e5lBmnQiPH+CVVZ4WOW9ShqzhyUAMbcxXPublY/P9p4KwfsoxFitJjVHtNLRcLfO1QeNOaa8qpVWE7htXuUr8DZYr/u5vV2DBT7QsjE7384WcciaD9YaZaHCllN5bmPjSZ+nVCw8HrlCGBZ9v1JMSRG57VvT3bddx8lqPw9BJ/lzVjx39Wsw49oKwY6XOkN1H7QoPsdB+SNFHvBJT4XsmZbj1odC1AVTKCGFOjq030l8SVHk4cXQvR1uNMOM+6ffzrnWzDL5dDsbPSK/CEU0gv+V0P79ilFfksmf9+ddgvTrHuRr3r2TF+QX+EHKejNdON8xG7frBSgPsN2xGhpqRaCJNaZIgugeNWVqTs14usG4qcnAXE5WhMFSB5PYGaY0ANqNHVwT7K89qHAXLzG247d4/r5n6BAWpSWgSCEgUwh70uPxs8Y4RYi7tVBvF8vURIhus/c3nSSzemsX2qlVY8tW0cWGj06GonqM85kYR7QO3/LvJSP/hQFROT6LeH3p9Y5/o01SsqJAmvn3Ysh7sGHP9RcCMQT8+2/2uXrQ6bAaWkRAVhHt/3EjtLeDHhltnoBWppQATXq3ev8fSBAfy2jKXu1L4CkM5BsMEUhWuEe1y+EQIhv4oogx1KPN13xgfQPmgEwMCo2ktOTlmVxVWC5DRgN6LIr03w0UwXZiPnw=----ATTACHMENT:----NTczOTY1Njc0NTk0NTQ4NiA2MDk4NTQwODEwNDcyNTEzIDE2ODkzODMwODEzNjU4NzQ=