70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
| <?php
 | |
| declare(strict_types = 1);
 | |
| 
 | |
| namespace LanguageServer\Tests\Server;
 | |
| 
 | |
| use LanguageServer\{
 | |
|     PhpDocument, DefinitionResolver
 | |
| };
 | |
| use LanguageServer\Index\{
 | |
|     Index
 | |
| };
 | |
| use LanguageServer\Protocol\{
 | |
|     Position
 | |
| };
 | |
| use Microsoft\PhpParser;
 | |
| use Microsoft\PhpParser\Node;
 | |
| use phpDocumentor\Reflection\DocBlockFactory;
 | |
| use PHPUnit\Framework\TestCase;
 | |
| use function LanguageServer\isVendored;
 | |
| 
 | |
| class PhpDocumentTest extends TestCase
 | |
| {
 | |
|     public function createDocument(string $uri, string $content)
 | |
|     {
 | |
|         $parser = new PhpParser\Parser();
 | |
|         $docBlockFactory = DocBlockFactory::createInstance();
 | |
|         $index = new Index;
 | |
|         $definitionResolver = new DefinitionResolver($index);
 | |
|         return new PhpDocument($uri, $content, $index, $parser, $docBlockFactory, $definitionResolver);
 | |
|     }
 | |
| 
 | |
|     public function testParsesVariableVariables()
 | |
|     {
 | |
|         $document = $this->createDocument('whatever', "<?php\n$\$a = 'foo';\n\$bar = 'baz';\n");
 | |
| 
 | |
|         $this->assertEquals([], $document->getDefinitions());
 | |
|     }
 | |
| 
 | |
|     public function testGetNodeAtPosition()
 | |
|     {
 | |
|         $document = $this->createDocument('whatever', "<?php\n$\$a = new SomeClass;");
 | |
|         $node = $document->getNodeAtPosition(new Position(1, 13));
 | |
|         $this->assertQualifiedName($node);
 | |
|         $this->assertEquals('SomeClass', (string)$node);
 | |
|     }
 | |
| 
 | |
|     private function assertQualifiedName($node)
 | |
|     {
 | |
|         $this->assertInstanceOf(Node\QualifiedName::class, $node);
 | |
|     }
 | |
| 
 | |
|     public function testIsVendored()
 | |
|     {
 | |
|         $document = $this->createDocument('file:///dir/vendor/x.php', "<?php\n$\$a = new SomeClass;");
 | |
|         $this->assertEquals(true, isVendored($document));
 | |
| 
 | |
|         $document = $this->createDocument('file:///c:/dir/vendor/x.php', "<?php\n$\$a = new SomeClass;");
 | |
|         $this->assertEquals(true, isVendored($document));
 | |
| 
 | |
|         $document = $this->createDocument('file:///vendor/x.php', "<?php\n$\$a = new SomeClass;");
 | |
|         $this->assertEquals(true, isVendored($document));
 | |
| 
 | |
|         $document = $this->createDocument('file:///dir/vendor.php', "<?php\n$\$a = new SomeClass;");
 | |
|         $this->assertEquals(false, isVendored($document));
 | |
| 
 | |
|         $document = $this->createDocument('file:///dir/x.php', "<?php\n$\$a = new SomeClass;");
 | |
|         $this->assertEquals(false, isVendored($document));
 | |
|     }
 | |
| }
 |