Add tests
parent
9283ba2148
commit
217357e185
|
@ -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;
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,48 @@
|
|||
<?php
|
||||
declare(strict_types = 1);
|
||||
|
||||
namespace LanguageServer\Tests;
|
||||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use LanguageServer\LanguageServer;
|
||||
use LanguageServer\ClientHandler;
|
||||
use LanguageServer\Protocol\Message;
|
||||
use AdvancedJsonRpc;
|
||||
use Sabre\Event\Loop;
|
||||
|
||||
class ClientHandlerTest extends TestCase
|
||||
{
|
||||
public function testRequest()
|
||||
{
|
||||
$reader = new MockProtocolStream;
|
||||
$writer = new MockProtocolStream;
|
||||
$handler = new ClientHandler($reader, $writer);
|
||||
$writer->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'));
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue