From 217357e1855a3b8b59147cae3ba75fc542c8bccb Mon Sep 17 00:00:00 2001 From: Felix Becker Date: Mon, 31 Oct 2016 11:04:44 +0100 Subject: [PATCH] Add tests --- src/ClientHandler.php | 32 ++++++++++++------------- tests/ClientHandlerTest.php | 48 +++++++++++++++++++++++++++++++++++++ 2 files changed, 64 insertions(+), 16 deletions(-) create mode 100644 tests/ClientHandlerTest.php diff --git a/src/ClientHandler.php b/src/ClientHandler.php index c0e2740..7b5a702 100644 --- a/src/ClientHandler.php +++ b/src/ClientHandler.php @@ -11,17 +11,17 @@ class ClientHandler /** * @var ProtocolReader */ - private $protocolReader; + public $protocolReader; /** * @var ProtocolWriter */ - private $protocolWriter; + public $protocolWriter; /** * @var IdGenerator */ - private $idGenerator; + public $idGenerator; public function __construct(ProtocolReader $protocolReader, ProtocolWriter $protocolWriter) { @@ -45,20 +45,20 @@ class ClientHandler new AdvancedJsonRpc\Request($id, $method, (object)$params) ) )->then(function () use ($id) { - return new Promise(function ($resolve, $reject) use ($id) { - $listener = function (Protocol\Message $msg) use ($id, $listener) { - if (AdvancedJsonRpc\Response::isResponse($msg->body) && $msg->body->id === $id) { - // Received a response - $this->protocolReader->removeListener($listener); - if (AdvancedJsonRpc\SuccessResponse::isSuccessResponse($msg->body)) { - $resolve($msg->body->result); - } else { - $reject($msg->body->error); - } + $promise = new Promise; + $listener = function (Protocol\Message $msg) use ($id, $promise, &$listener) { + if (AdvancedJsonRpc\Response::isResponse($msg->body) && $msg->body->id === $id) { + // Received a response + $this->protocolReader->removeListener('message', $listener); + if (AdvancedJsonRpc\SuccessResponse::isSuccessResponse($msg->body)) { + $promise->fulfill($msg->body->result); + } else { + $promise->reject($msg->body->error); } - }; - $this->protocolReader->on('message', $listener); - }); + } + }; + $this->protocolReader->on('message', $listener); + return $promise; }); } diff --git a/tests/ClientHandlerTest.php b/tests/ClientHandlerTest.php new file mode 100644 index 0000000..85ba7e8 --- /dev/null +++ b/tests/ClientHandlerTest.php @@ -0,0 +1,48 @@ +once('message', function (Message $msg) use ($reader) { + // Respond to request + Loop\setTimeout(function () use ($reader, $msg) { + $reader->write(new Message(new AdvancedJsonRpc\SuccessResponse($msg->body->id, 'pong'))); + }, 0); + }); + $promise = $handler->request('testMethod', ['ping'])->then(function ($result) { + $this->assertEquals('pong', $result); + }); + Loop\tick(); + $promise->wait(); + // No event listeners + $this->assertEquals([], $reader->listeners('message')); + $this->assertEquals([], $writer->listeners('message')); + } + + public function testNotify() + { + $reader = new MockProtocolStream; + $writer = new MockProtocolStream; + $handler = new ClientHandler($reader, $writer); + $promise = $handler->notify('testMethod', ['ping']); + Loop\tick(); + $promise->wait(); + // No event listeners + $this->assertEquals([], $reader->listeners('message')); + $this->assertEquals([], $writer->listeners('message')); + } +}