42 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			42 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| declare(strict_types = 1);
 | |
| 
 | |
| namespace LanguageServer\Tests\Server\Workspace;
 | |
| 
 | |
| use LanguageServer\ContentRetriever\FileSystemContentRetriever;
 | |
| use LanguageServer\{DefinitionResolver, LanguageClient, PhpDocumentLoader, Server};
 | |
| use LanguageServer\Index\{DependenciesIndex, Index, ProjectIndex};
 | |
| use LanguageServer\Protocol\{FileChangeType, FileEvent, Message};
 | |
| use LanguageServer\Tests\MockProtocolStream;
 | |
| use LanguageServer\Tests\Server\ServerTestCase;
 | |
| use LanguageServer\Server\Workspace;
 | |
| use Sabre\Event\Loop;
 | |
| 
 | |
| class DidChangeWatchedFilesTest extends ServerTestCase
 | |
| {
 | |
|     public function testDeletingFileClearsAllDiagnostics()
 | |
|     {
 | |
|         $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);
 | |
| 
 | |
|         $fileEvent = new FileEvent('my uri', FileChangeType::DELETED);
 | |
| 
 | |
|         $isDiagnosticsCleared = false;
 | |
|         $writer->on('message', function (Message $message) use ($fileEvent, &$isDiagnosticsCleared) {
 | |
|             if ($message->body->method === "textDocument/publishDiagnostics") {
 | |
|                 $this->assertEquals($message->body->params->uri, $fileEvent->uri);
 | |
|                 $this->assertEquals($message->body->params->diagnostics, []);
 | |
|                 $isDiagnosticsCleared = true;
 | |
|             }
 | |
|         });
 | |
| 
 | |
|         $workspace->didChangeWatchedFiles([$fileEvent]);
 | |
|         Loop\tick(true);
 | |
| 
 | |
|         $this->assertTrue($isDiagnosticsCleared, "Deleting file should clear all diagnostics.");
 | |
|     }
 | |
| }
 |