diff --git a/tests/ProjectTest.php b/tests/ProjectTest.php new file mode 100644 index 0000000..eb37fa7 --- /dev/null +++ b/tests/ProjectTest.php @@ -0,0 +1,86 @@ +project = new Project(new LanguageClient(new MockProtocolStream())); + } + + public function testGetDocumentCreatesNewDocument() + { + $document = $this->project->getDocument('file:///document1.php'); + + $this->assertNotNull($document); + $this->assertInstanceOf(PhpDocument::class, $document); + } + + public function testGetDocumentCreatesDocumentOnce() + { + $document1 = $this->project->getDocument('file:///document1.php'); + $document2 = $this->project->getDocument('file:///document1.php'); + + $this->assertSame($document1, $document2); + } + + public function testFindSymbols() + { + $this->project->getDocument('file:///document1.php')->updateContent("project->getDocument('file:///document2.php')->updateContent("project->findSymbols('ba'); + + $this->assertEquals([ + [ + 'name' => 'bar', + 'kind' => SymbolKind::FUNCTION, + 'location' => [ + 'uri' => 'file:///document1.php', + 'range' => [ + 'start' => [ + 'line' => 2, + 'character' => 0 + ], + 'end' => [ + 'line' => 2, + 'character' => 17 + ] + ] + ], + 'containerName' => null + ], + [ + 'name' => 'baz', + 'kind' => SymbolKind::FUNCTION, + 'location' => [ + 'uri' => 'file:///document2.php', + 'range' => [ + 'start' => [ + 'line' => 1, + 'character' => 0 + ], + 'end' => [ + 'line' => 1, + 'character' => 17 + ] + ] + ], + 'containerName' => null + ] + ], json_decode(json_encode($symbols), true)); + } +} diff --git a/tests/Server/WorkspaceTest.php b/tests/Server/WorkspaceTest.php new file mode 100644 index 0000000..5a62b85 --- /dev/null +++ b/tests/Server/WorkspaceTest.php @@ -0,0 +1,73 @@ +workspace = new Server\Workspace($project, $client); + + // create two documents + $project->getDocument('file:///document1.php')->updateContent("getDocument('file:///document2.php')->updateContent("workspace->symbol('f'); + $this->assertEquals([ + [ + 'name' => 'foo', + 'kind' => SymbolKind::FUNCTION, + 'location' => [ + 'uri' => 'file:///document1.php', + 'range' => [ + 'start' => [ + 'line' => 1, + 'character' => 0 + ], + 'end' => [ + 'line' => 1, + 'character' => 17 + ] + ] + ], + 'containerName' => null + ], + [ + 'name' => 'frob', + 'kind' => SymbolKind::FUNCTION, + 'location' => [ + 'uri' => 'file:///document2.php', + 'range' => [ + 'start' => [ + 'line' => 2, + 'character' => 0 + ], + 'end' => [ + 'line' => 2, + 'character' => 18 + ] + ] + ], + 'containerName' => null + ] + ], json_decode(json_encode($result), true)); + } +}