| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  | <?php | 
					
						
							|  |  |  | declare(strict_types = 1); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | namespace LanguageServer\Tests\Server\TextDocument; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | use LanguageServer\Tests\MockProtocolStream; | 
					
						
							|  |  |  | use LanguageServer\Tests\Server\ServerTestCase; | 
					
						
							|  |  |  | use LanguageServer\{Server, LanguageClient, Project}; | 
					
						
							|  |  |  | use LanguageServer\Protocol\{TextDocumentIdentifier, Position, Range, Hover, MarkedString}; | 
					
						
							|  |  |  | use function LanguageServer\pathToUri; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class HoverTest extends ServerTestCase | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  |     public function testHoverForClassLike() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // $obj = new TestClass();
 | 
					
						
							|  |  |  |         // Get hover for TestClass
 | 
					
						
							| 
									
										
										
										
											2017-11-19 00:59:57 +00:00
										 |  |  |         $reference = $this->getReferenceLocations('TestClass')[1]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->start | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             new MarkedString('php', "<?php\nclass TestClass implements TestInterface"), | 
					
						
							| 
									
										
										
										
											2017-03-19 11:15:39 +00:00
										 |  |  |             'Pariatur ut laborum tempor voluptate consequat ea deserunt.' . "\n\n" . | 
					
						
							|  |  |  |             'Deserunt enim minim sunt sint ea nisi. Deserunt excepteur tempor id nostrud' . "\n" . | 
					
						
							|  |  |  |             'laboris commodo ad commodo velit mollit qui non officia id. Nulla duis veniam' . "\n" . | 
					
						
							|  |  |  |             'veniam officia deserunt et non dolore mollit ea quis eiusmod sit non. Occaecat' . "\n" . | 
					
						
							|  |  |  |             'consequat sunt culpa exercitation pariatur id reprehenderit nisi incididunt Lorem' . "\n" . | 
					
						
							|  |  |  |             'sint. Officia culpa pariatur laborum nostrud cupidatat consequat mollit.' | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-13 02:08:52 +00:00
										 |  |  |     public function testHoverForClassLikeDefinition() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // class TestClass implements TestInterface
 | 
					
						
							|  |  |  |         // Get hover for TestClass
 | 
					
						
							|  |  |  |         $definition = $this->getDefinitionLocation('TestClass'); | 
					
						
							|  |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($definition->uri), | 
					
						
							|  |  |  |             $definition->range->start | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							|  |  |  |         $this->assertEquals(new Hover([ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             new MarkedString('php', "<?php\nclass TestClass implements TestInterface"), | 
					
						
							| 
									
										
										
										
											2017-03-19 11:15:39 +00:00
										 |  |  |             'Pariatur ut laborum tempor voluptate consequat ea deserunt.' . "\n\n" . | 
					
						
							|  |  |  |             'Deserunt enim minim sunt sint ea nisi. Deserunt excepteur tempor id nostrud' . "\n" . | 
					
						
							|  |  |  |             'laboris commodo ad commodo velit mollit qui non officia id. Nulla duis veniam' . "\n" . | 
					
						
							|  |  |  |             'veniam officia deserunt et non dolore mollit ea quis eiusmod sit non. Occaecat' . "\n" . | 
					
						
							|  |  |  |             'consequat sunt culpa exercitation pariatur id reprehenderit nisi incididunt Lorem' . "\n" . | 
					
						
							|  |  |  |             'sint. Officia culpa pariatur laborum nostrud cupidatat consequat mollit.' | 
					
						
							| 
									
										
										
										
											2016-12-13 02:08:52 +00:00
										 |  |  |         ], $definition->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |     public function testHoverForMethod() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // $obj->testMethod();
 | 
					
						
							|  |  |  |         // Get hover for testMethod
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TestClass::testMethod()')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             new MarkedString('php', "<?php\npublic function testMethod(\$testParameter): TestInterface"), | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |             'Non culpa nostrud mollit esse sunt laboris in irure ullamco cupidatat amet.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForProperty() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo $obj->testProperty;
 | 
					
						
							|  |  |  |         // Get hover for testProperty
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TestClass::testProperty')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\npublic \$testProperty;"), | 
					
						
							|  |  |  |             'Reprehenderit magna velit mollit ipsum do.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForStaticMethod() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // TestClass::staticTestMethod();
 | 
					
						
							|  |  |  |         // Get hover for staticTestMethod
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TestClass::staticTestMethod()')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\npublic static function staticTestMethod()"), | 
					
						
							|  |  |  |             'Do magna consequat veniam minim proident eiusmod incididunt aute proident.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForStaticProperty() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo TestClass::staticTestProperty;
 | 
					
						
							|  |  |  |         // Get hover for staticTestProperty
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TestClass::staticTestProperty')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\npublic static \$staticTestProperty;"), | 
					
						
							|  |  |  |             'Lorem excepteur officia sit anim velit veniam enim.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForClassConstant() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo TestClass::TEST_CLASS_CONST;
 | 
					
						
							|  |  |  |         // Get hover for TEST_CLASS_CONST
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TestClass::TEST_CLASS_CONST')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\nconst TEST_CLASS_CONST = 123;"), | 
					
						
							|  |  |  |             'Anim labore veniam consectetur laboris minim quis aute aute esse nulla ad.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForFunction() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // test_function();
 | 
					
						
							|  |  |  |         // Get hover for test_function
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('test_function()')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\nfunction test_function()"), | 
					
						
							|  |  |  |             'Officia aliquip adipisicing et nulla et laboris dolore labore.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForConstant() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo TEST_CONST;
 | 
					
						
							|  |  |  |         // Get hover for TEST_CONST
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TEST_CONST')[0]; | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							|  |  |  |             new MarkedString('php', "<?php\nconst TEST_CONST = 123;"), | 
					
						
							|  |  |  |             'Esse commodo excepteur pariatur Lorem est aute incididunt reprehenderit.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-17 15:03:08 +00:00
										 |  |  |     public function testHoverForGlobalConstant() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // print TEST_DEFINE_CONSTANT ? 'true' : 'false';
 | 
					
						
							|  |  |  |         // Get hover for TEST_DEFINE_CONSTANT
 | 
					
						
							|  |  |  |         $reference = $this->getReferenceLocations('TEST_DEFINE_CONSTANT')[0]; | 
					
						
							|  |  |  |         $result = $this->textDocument->hover( | 
					
						
							|  |  |  |             new TextDocumentIdentifier($reference->uri), | 
					
						
							|  |  |  |             $reference->range->end | 
					
						
							|  |  |  |         )->wait(); | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |         // TODO - should pretty print with fqns, like \define, \false. Not yet supported by tolerant-php-parser
 | 
					
						
							| 
									
										
										
										
											2017-04-17 15:03:08 +00:00
										 |  |  |         $this->assertEquals(new Hover([ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             new MarkedString('php', "<?php\ndefine('TEST_DEFINE_CONSTANT', false)"), | 
					
						
							| 
									
										
										
										
											2017-04-17 15:03:08 +00:00
										 |  |  |             'Lorem ipsum dolor sit amet, consectetur.' | 
					
						
							|  |  |  |         ], $reference->range), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |     public function testHoverForVariable() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo $var;
 | 
					
						
							|  |  |  |         // Get hover for $var
 | 
					
						
							|  |  |  |         $uri = pathToUri(realpath(__DIR__ . '/../../../fixtures/references.php')); | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover(new TextDocumentIdentifier($uri), new Position(13, 7))->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover( | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             [new MarkedString('php', "<?php\n\$var = 123")], | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |             new Range(new Position(13, 5), new Position(13, 9)) | 
					
						
							|  |  |  |         ), $result); | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForParam() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // echo $param;
 | 
					
						
							|  |  |  |         // Get hover for $param
 | 
					
						
							|  |  |  |         $uri = pathToUri(realpath(__DIR__ . '/../../../fixtures/references.php')); | 
					
						
							| 
									
										
										
										
											2016-11-14 09:25:44 +00:00
										 |  |  |         $result = $this->textDocument->hover(new TextDocumentIdentifier($uri), new Position(22, 11))->wait(); | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |         $this->assertEquals(new Hover( | 
					
						
							|  |  |  |             [ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |                 new MarkedString('php', "<?php\nTestClass \$param"), | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  |                 'Adipisicing non non cillum sint incididunt cillum enim mollit.' | 
					
						
							|  |  |  |             ], | 
					
						
							|  |  |  |             new Range(new Position(22, 9), new Position(22, 15)) | 
					
						
							|  |  |  |         ), $result); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2017-01-19 14:47:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  |     public function testHoverForThis() | 
					
						
							|  |  |  |     { | 
					
						
							|  |  |  |         // $this;
 | 
					
						
							|  |  |  |         // Get hover for $this
 | 
					
						
							|  |  |  |         $uri = pathToUri(realpath(__DIR__ . '/../../../fixtures/global_symbols.php')); | 
					
						
							|  |  |  |         $result = $this->textDocument->hover(new TextDocumentIdentifier($uri), new Position(59, 11))->wait(); | 
					
						
							|  |  |  |         $this->assertEquals(new Hover([ | 
					
						
							| 
									
										
										
										
											2017-06-09 18:25:30 +00:00
										 |  |  |             new MarkedString('php', "<?php\nclass TestClass implements TestInterface"), | 
					
						
							| 
									
										
										
										
											2017-03-19 11:15:39 +00:00
										 |  |  |             'Pariatur ut laborum tempor voluptate consequat ea deserunt.' . "\n\n" . | 
					
						
							|  |  |  |             'Deserunt enim minim sunt sint ea nisi. Deserunt excepteur tempor id nostrud' . "\n" . | 
					
						
							|  |  |  |             'laboris commodo ad commodo velit mollit qui non officia id. Nulla duis veniam' . "\n" . | 
					
						
							|  |  |  |             'veniam officia deserunt et non dolore mollit ea quis eiusmod sit non. Occaecat' . "\n" . | 
					
						
							|  |  |  |             'consequat sunt culpa exercitation pariatur id reprehenderit nisi incididunt Lorem' . "\n" . | 
					
						
							|  |  |  |             'sint. Officia culpa pariatur laborum nostrud cupidatat consequat mollit.' | 
					
						
							| 
									
										
										
										
											2017-01-19 14:47:11 +00:00
										 |  |  |         ], new Range(new Position(59, 8), new Position(59, 13))), $result); | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2016-10-19 10:31:32 +00:00
										 |  |  | } |