| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | declare(strict_types = 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace LanguageServer\Tests; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use PHPUnit\Framework\TestCase; | 
					
						
							|  |  |  | use LanguageServer\Index\Index; | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  | use LanguageServer\DefinitionResolver; | 
					
						
							|  |  |  | use Microsoft\PhpParser; | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class DefinitionResolverTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function testCreateDefinitionFromNode() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $parser = new PhpParser\Parser; | 
					
						
							|  |  |  |         $doc = new MockPhpDocument; | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri()); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $index = new Index; | 
					
						
							|  |  |  |         $definitionResolver = new DefinitionResolver($index); | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $def = $definitionResolver->createDefinitionFromNode($sourceFileNode->statementList[1]->expression, '\TEST_DEFINE'); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->assertInstanceOf(\phpDocumentor\Reflection\Types\Boolean::class, $def->type); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testGetTypeFromNode() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $parser = new PhpParser\Parser; | 
					
						
							|  |  |  |         $doc = new MockPhpDocument; | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri()); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $index = new Index; | 
					
						
							|  |  |  |         $definitionResolver = new DefinitionResolver($index); | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $type = $definitionResolver->getTypeFromNode($sourceFileNode->statementList[1]->expression); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->assertInstanceOf(\phpDocumentor\Reflection\Types\Boolean::class, $type); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testGetDefinedFqnForIncompleteDefine() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // define('XXX') (only one argument) must not introduce a new symbol
 | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $parser = new PhpParser\Parser; | 
					
						
							|  |  |  |         $doc = new MockPhpDocument; | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE');", $doc->getUri()); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $index = new Index; | 
					
						
							|  |  |  |         $definitionResolver = new DefinitionResolver($index); | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $fqn = $definitionResolver->getDefinedFqn($sourceFileNode->statementList[1]->expression); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->assertNull($fqn); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testGetDefinedFqnForDefine() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $parser = new PhpParser\Parser; | 
					
						
							|  |  |  |         $doc = new MockPhpDocument; | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $sourceFileNode = $parser->parseSourceFile("<?php\ndefine('TEST_DEFINE', true);", $doc->getUri()); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $index = new Index; | 
					
						
							|  |  |  |         $definitionResolver = new DefinitionResolver($index); | 
					
						
							| 
									
										
										
										
											2017-06-10 19:36:16 +00:00
										 |  |  |         $fqn = $definitionResolver->getDefinedFqn($sourceFileNode->statementList[1]->expression); | 
					
						
							| 
									
										
										
										
											2017-04-24 09:11:40 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |         $this->assertEquals('TEST_DEFINE', $fqn); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | } |