| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | declare(strict_types = 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace LanguageServer\Tests\Server; | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  | use LanguageServer\{ | 
					
						
							|  |  |  |     PhpDocument, DefinitionResolver | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | use LanguageServer\Index\{ | 
					
						
							|  |  |  |     Index | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | use LanguageServer\Protocol\{ | 
					
						
							|  |  |  |     Position | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | use Microsoft\PhpParser; | 
					
						
							|  |  |  | use Microsoft\PhpParser\Node; | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  | use phpDocumentor\Reflection\DocBlockFactory; | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  | use PHPUnit\Framework\TestCase; | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  | use function LanguageServer\isVendored; | 
					
						
							| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | class PhpDocumentTest extends TestCase | 
					
						
							|  |  |  | { | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |     public function createDocument(string $uri, string $content) | 
					
						
							| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  |     { | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $parser = new PhpParser\Parser(); | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $docBlockFactory = DocBlockFactory::createInstance(); | 
					
						
							|  |  |  |         $index = new Index; | 
					
						
							|  |  |  |         $definitionResolver = new DefinitionResolver($index); | 
					
						
							|  |  |  |         return new PhpDocument($uri, $content, $index, $parser, $docBlockFactory, $definitionResolver); | 
					
						
							| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testParsesVariableVariables() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('whatever', "<?php\n$\$a = 'foo';\n\$bar = 'baz';\n"); | 
					
						
							| 
									
										
										
										
											2016-10-08 11:34:49 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-11 12:42:56 +00:00
										 |  |  |         $this->assertEquals([], $document->getDefinitions()); | 
					
						
							| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-10-08 11:34:49 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function testGetNodeAtPosition() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('whatever', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2016-10-08 11:34:49 +00:00
										 |  |  |         $node = $document->getNodeAtPosition(new Position(1, 13)); | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         $this->assertQualifiedName($node); | 
					
						
							| 
									
										
										
										
											2016-10-08 11:34:49 +00:00
										 |  |  |         $this->assertEquals('SomeClass', (string)$node); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |     private function assertQualifiedName($node) | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         $this->assertInstanceOf(Node\QualifiedName::class, $node); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  |     public function testIsVendored() | 
					
						
							|  |  |  |     { | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('file:///dir/vendor/x.php', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  |         $this->assertEquals(true, isVendored($document)); | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('file:///c:/dir/vendor/x.php', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  |         $this->assertEquals(true, isVendored($document)); | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('file:///vendor/x.php', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  |         $this->assertEquals(true, isVendored($document)); | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('file:///dir/vendor.php', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  |         $this->assertEquals(false, isVendored($document)); | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 00:51:02 +00:00
										 |  |  |         $document = $this->createDocument('file:///dir/x.php', "<?php\n$\$a = new SomeClass;"); | 
					
						
							| 
									
										
										
										
											2017-02-07 22:20:12 +00:00
										 |  |  |         $this->assertEquals(false, isVendored($document)); | 
					
						
							| 
									
										
										
										
											2016-11-14 19:00:10 +00:00
										 |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-09-30 13:13:54 +00:00
										 |  |  | } |