83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			83 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| declare(strict_types = 1);
 | |
| 
 | |
| namespace LanguageServer\Tests\Diagnostics;
 | |
| 
 | |
| use PHPUnit\Framework\TestCase;
 | |
| use phpDocumentor\Reflection\DocBlockFactory;
 | |
| use LanguageServer\{
 | |
|     DefinitionResolver, TreeAnalyzer
 | |
| };
 | |
| use LanguageServer\Index\{Index};
 | |
| use LanguageServer\Protocol\{
 | |
|     Diagnostic, DiagnosticSeverity, Position, Range
 | |
| };
 | |
| use function LanguageServer\pathToUri;
 | |
| use Microsoft\PhpParser\Parser;
 | |
| 
 | |
| class InvalidThisUsageTest extends TestCase
 | |
| {
 | |
|     /**
 | |
|      * Parse the given file and return diagnostics.
 | |
|      *
 | |
|      * @param string $path
 | |
|      * @return Diagnostic[]
 | |
|      */
 | |
|     private function collectDiagnostics(string $path): array
 | |
|     {
 | |
|         $uri = pathToUri($path);
 | |
|         $parser = new Parser();
 | |
| 
 | |
|         $docBlockFactory = DocBlockFactory::createInstance();
 | |
|         $index = new Index;
 | |
|         $definitionResolver = new DefinitionResolver($index);
 | |
|         $content = file_get_contents($path);
 | |
| 
 | |
|         $treeAnalyzer = new TreeAnalyzer($parser, $content, $docBlockFactory, $definitionResolver, $uri);
 | |
|         return $treeAnalyzer->getDiagnostics();
 | |
|     }
 | |
| 
 | |
|     /**
 | |
|      * Assertions about a diagnostic.
 | |
|      *
 | |
|      * @param Diagnostic|null $diagnostic
 | |
|      * @param int $message
 | |
|      * @param string $severity
 | |
|      * @param Range $range
 | |
|      */
 | |
|     private function assertDiagnostic($diagnostic, $message, $severity, $range)
 | |
|     {
 | |
|         $this->assertInstanceOf(Diagnostic::class, $diagnostic);
 | |
|         $this->assertEquals($message, $diagnostic->message);
 | |
|         $this->assertEquals($severity, $diagnostic->severity);
 | |
|         $this->assertEquals($range, $diagnostic->range);
 | |
|     }
 | |
| 
 | |
|     public function testThisInStaticMethodProducesError()
 | |
|     {
 | |
|         $diagnostics = $this->collectDiagnostics(
 | |
|             __DIR__ . '/../../fixtures/diagnostics/errors/this_in_static_method.php'
 | |
|         );
 | |
| 
 | |
|         $this->assertCount(1, $diagnostics);
 | |
|         $this->assertDiagnostic(
 | |
|             $diagnostics[0],
 | |
|             '$this can not be used in static methods.',
 | |
|             DiagnosticSeverity::ERROR,
 | |
|             new Range(
 | |
|                 new Position(6, 15),
 | |
|                 new Position(6, 20)
 | |
|             )
 | |
|         );
 | |
|     }
 | |
| 
 | |
|     public function testThisInMethodProducesNoError()
 | |
|     {
 | |
|         $diagnostics = $this->collectDiagnostics(
 | |
|             __DIR__ . '/../../fixtures/diagnostics/baselines/this_in_method.php'
 | |
|         );
 | |
| 
 | |
|         $this->assertCount(0, $diagnostics);
 | |
|     }
 | |
| }
 |