66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
			
		
		
	
	
			66 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			PHP
		
	
	
<?php
 | 
						|
declare(strict_types = 1);
 | 
						|
 | 
						|
namespace LanguageServer\Tests;
 | 
						|
 | 
						|
use PHPUnit\Framework\TestCase;
 | 
						|
use LanguageServer\Index\Index;
 | 
						|
use LanguageServer\DefinitionResolver;
 | 
						|
use Microsoft\PhpParser;
 | 
						|
 | 
						|
class DefinitionResolverTest extends TestCase
 | 
						|
{
 | 
						|
    public function testCreateDefinitionFromNode()
 | 
						|
    {
 | 
						|
        $parser = new PhpParser\Parser;
 | 
						|
        $doc = new MockPhpDocument;
 | 
						|
        $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri());
 | 
						|
 | 
						|
        $index = new Index;
 | 
						|
        $definitionResolver = new DefinitionResolver($index);
 | 
						|
        $def = $definitionResolver->createDefinitionFromNode($sourceFileNode->statementList[1]->expression, '\TEST_DEFINE');
 | 
						|
 | 
						|
        $this->assertInstanceOf(\phpDocumentor\Reflection\Types\Boolean::class, $def->type);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testGetTypeFromNode()
 | 
						|
    {
 | 
						|
        $parser = new PhpParser\Parser;
 | 
						|
        $doc = new MockPhpDocument;
 | 
						|
        $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri());
 | 
						|
 | 
						|
        $index = new Index;
 | 
						|
        $definitionResolver = new DefinitionResolver($index);
 | 
						|
        $type = $definitionResolver->getTypeFromNode($sourceFileNode->statementList[1]->expression);
 | 
						|
 | 
						|
        $this->assertInstanceOf(\phpDocumentor\Reflection\Types\Boolean::class, $type);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testGetDefinedFqnForIncompleteDefine()
 | 
						|
    {
 | 
						|
        // define('XXX') (only one argument) must not introduce a new symbol
 | 
						|
        $parser = new PhpParser\Parser;
 | 
						|
        $doc = new MockPhpDocument;
 | 
						|
        $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE');", $doc->getUri());
 | 
						|
 | 
						|
        $index = new Index;
 | 
						|
        $definitionResolver = new DefinitionResolver($index);
 | 
						|
        $fqn = $definitionResolver->getDefinedFqn($sourceFileNode->statementList[1]->expression);
 | 
						|
 | 
						|
        $this->assertNull($fqn);
 | 
						|
    }
 | 
						|
 | 
						|
    public function testGetDefinedFqnForDefine()
 | 
						|
    {
 | 
						|
        $parser = new PhpParser\Parser;
 | 
						|
        $doc = new MockPhpDocument;
 | 
						|
        $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri());
 | 
						|
 | 
						|
        $index = new Index;
 | 
						|
        $definitionResolver = new DefinitionResolver($index);
 | 
						|
        $fqn = $definitionResolver->getDefinedFqn($sourceFileNode->statementList[1]->expression);
 | 
						|
 | 
						|
        $this->assertEquals('TEST_DEFINE', $fqn);
 | 
						|
    }
 | 
						|
}
 |