Add tests
parent
9283ba2148
commit
217357e185
|
@ -11,17 +11,17 @@ class ClientHandler
|
||||||
/**
|
/**
|
||||||
* @var ProtocolReader
|
* @var ProtocolReader
|
||||||
*/
|
*/
|
||||||
private $protocolReader;
|
public $protocolReader;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var ProtocolWriter
|
* @var ProtocolWriter
|
||||||
*/
|
*/
|
||||||
private $protocolWriter;
|
public $protocolWriter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @var IdGenerator
|
* @var IdGenerator
|
||||||
*/
|
*/
|
||||||
private $idGenerator;
|
public $idGenerator;
|
||||||
|
|
||||||
public function __construct(ProtocolReader $protocolReader, ProtocolWriter $protocolWriter)
|
public function __construct(ProtocolReader $protocolReader, ProtocolWriter $protocolWriter)
|
||||||
{
|
{
|
||||||
|
@ -45,20 +45,20 @@ class ClientHandler
|
||||||
new AdvancedJsonRpc\Request($id, $method, (object)$params)
|
new AdvancedJsonRpc\Request($id, $method, (object)$params)
|
||||||
)
|
)
|
||||||
)->then(function () use ($id) {
|
)->then(function () use ($id) {
|
||||||
return new Promise(function ($resolve, $reject) use ($id) {
|
$promise = new Promise;
|
||||||
$listener = function (Protocol\Message $msg) use ($id, $listener) {
|
$listener = function (Protocol\Message $msg) use ($id, $promise, &$listener) {
|
||||||
if (AdvancedJsonRpc\Response::isResponse($msg->body) && $msg->body->id === $id) {
|
if (AdvancedJsonRpc\Response::isResponse($msg->body) && $msg->body->id === $id) {
|
||||||
// Received a response
|
// Received a response
|
||||||
$this->protocolReader->removeListener($listener);
|
$this->protocolReader->removeListener('message', $listener);
|
||||||
if (AdvancedJsonRpc\SuccessResponse::isSuccessResponse($msg->body)) {
|
if (AdvancedJsonRpc\SuccessResponse::isSuccessResponse($msg->body)) {
|
||||||
$resolve($msg->body->result);
|
$promise->fulfill($msg->body->result);
|
||||||
} else {
|
} else {
|
||||||
$reject($msg->body->error);
|
$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