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.");
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 |