1
0
Fork 0

Add tests

pull/128/head
Felix Becker 2016-10-31 11:04:44 +01:00
parent 9283ba2148
commit 217357e185
2 changed files with 64 additions and 16 deletions

View File

@ -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;
});
}

View File

@ -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'));
}
}