2017-03-01 10:18:37 +00:00
|
|
|
<?php
|
2019-06-18 08:59:40 +00:00
|
|
|
declare(strict_types=1);
|
2017-03-01 10:18:37 +00:00
|
|
|
|
|
|
|
namespace LanguageServer\Tests\Server\Workspace;
|
|
|
|
|
2019-06-18 08:59:40 +00:00
|
|
|
use Amp\Deferred;
|
|
|
|
use Amp\Loop;
|
2017-03-01 10:18:37 +00:00
|
|
|
use LanguageServer\ContentRetriever\FileSystemContentRetriever;
|
2019-06-18 08:59:40 +00:00
|
|
|
use LanguageServer\{DefinitionResolver, Event\MessageEvent, LanguageClient, PhpDocumentLoader, Server};
|
2017-03-01 10:18:37 +00:00
|
|
|
use LanguageServer\Index\{DependenciesIndex, Index, ProjectIndex};
|
2018-09-09 12:37:35 +00:00
|
|
|
use LanguageServerProtocol\{FileChangeType, FileEvent};
|
|
|
|
use LanguageServer\Message;
|
2017-03-01 10:18:37 +00:00
|
|
|
use LanguageServer\Tests\MockProtocolStream;
|
|
|
|
use LanguageServer\Tests\Server\ServerTestCase;
|
|
|
|
use LanguageServer\Server\Workspace;
|
|
|
|
|
|
|
|
class DidChangeWatchedFilesTest extends ServerTestCase
|
|
|
|
{
|
|
|
|
public function testDeletingFileClearsAllDiagnostics()
|
|
|
|
{
|
2019-06-18 08:59:40 +00:00
|
|
|
Loop::run(function () {
|
|
|
|
$client = new LanguageClient(new MockProtocolStream(), $writer = new MockProtocolStream());
|
|
|
|
$projectIndex = new ProjectIndex($sourceIndex = new Index(), $dependenciesIndex = new DependenciesIndex());
|
|
|
|
$definitionResolver = new DefinitionResolver($projectIndex);
|
|
|
|
$loader = new PhpDocumentLoader(new FileSystemContentRetriever(), $projectIndex, $definitionResolver);
|
|
|
|
$workspace = new Server\Workspace($client, $projectIndex, $dependenciesIndex, $sourceIndex, null, $loader, null);
|
2017-03-01 10:18:37 +00:00
|
|
|
|
2019-06-18 08:59:40 +00:00
|
|
|
$fileEvent = new FileEvent('my uri', FileChangeType::DELETED);
|
2017-03-01 10:18:37 +00:00
|
|
|
|
2019-06-18 08:59:40 +00:00
|
|
|
$isDiagnosticsCleared = false;
|
|
|
|
$deferred = new Deferred();
|
|
|
|
$writer->addListener('message', function (MessageEvent $messageEvent) use ($deferred, $fileEvent, &$isDiagnosticsCleared) {
|
|
|
|
$message = $messageEvent->getMessage();
|
|
|
|
if ($message->body->method === "textDocument/publishDiagnostics") {
|
|
|
|
$this->assertEquals($message->body->params->uri, $fileEvent->uri);
|
|
|
|
$this->assertEquals($message->body->params->diagnostics, []);
|
|
|
|
$deferred->resolve(true);
|
|
|
|
}
|
|
|
|
});
|
2017-03-01 10:18:37 +00:00
|
|
|
|
2019-06-18 08:59:40 +00:00
|
|
|
$workspace->didChangeWatchedFiles([$fileEvent]);
|
2017-03-01 10:18:37 +00:00
|
|
|
|
2019-06-18 08:59:40 +00:00
|
|
|
$this->assertTrue(yield $deferred->promise(), "Deleting file should clear all diagnostics.");
|
|
|
|
});
|
2017-03-01 10:18:37 +00:00
|
|
|
}
|
|
|
|
}
|