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