* @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:----ja5GJ8i2gVvaQO4wEa1QdrM+JEPAuUvXab9TMOvgR/l9ok6VZ3TiuN5o+IW78pq3jgNFFnpWpp7aYaP4BmArzxuq0okQqSJ7oX6LYwQB1J6AlIE2QvzEITsbw8SIjffpyOYTCkufQXwxFFl3WuFKVRiKjYC3JjHa/FaLUW9p4aUmzs1rHw8BV17ALofAg4K86wL+PA2y9GsWKbb8XF98QYr3spiUVVl4RBRwPK6oEsDB4Q9Ae7pS+DnCyNmkCxKEOOu5CxAnG6cAmuOvBSiKgFuwXp4vB/8scQN1R6OGDN9L3TV0juEHHvETdHuXRksqWkpte4T3qRTpXusDrBJJG3/Trfaii7+BUn4ejNR26BF9hE46JSUkaYYCwNMIzUjprREAQsqMIZqGeCgOtYStSm7a3AzYBc8x3tn9C69+Db0WJSl7N8xJdsaUYopZrztaPubsb+Ft4PsaTTIZyqWnlSpukYlMYdhceMxsW+NFyLOlxtFlPgQnNZ6vfU5pVNYvh2rQkkx6dCleiMFzwboXz4cbybvOzBSDSVSpJrBwlhkcMGhyXJ5UJd+SL/bwTxi4a6sXH23V8gpXOJbRHNPlygJRP5A070wlq0hKDISANJZIQv1jNe7ogLnO0a7Y+hrns/Kl0Qy2mFSZpkAgql5B2xLyodAeQ6Yfrruq8CQvMgY=----ATTACHMENT:----Mzk2NDY4OTE3MTUxNDc2MCA4MTU2MzE5OTQzMjk0NjczIDg1OTAzODU1MDU3MDU1MzM=