예제 #1
0
    def test_rename_return_workspace_edit(self):
        response = self.client.lsp.send_request(
            RENAME,
            RenameParams(
                text_document=TextDocumentIdentifier(
                    uri='file://return.workspace_edit'),
                position=Position(line=0, character=0),
                new_name='new name',
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response

        assert response['changes']['uri1'][0]['newText'] == 'text1'
        assert response['changes']['uri1'][0]['range']['start']['line'] == 0
        assert response['changes']['uri1'][0]['range']['start'][
            'character'] == 0
        assert response['changes']['uri1'][0]['range']['end']['line'] == 1
        assert response['changes']['uri1'][0]['range']['end']['character'] == 1

        assert response['changes']['uri1'][1]['newText'] == 'text2'
        assert response['changes']['uri1'][1]['range']['start']['line'] == 1
        assert response['changes']['uri1'][1]['range']['start'][
            'character'] == 1
        assert response['changes']['uri1'][1]['range']['end']['line'] == 2
        assert response['changes']['uri1'][1]['range']['end']['character'] == 2

        assert response['documentChanges'][0]['textDocument']['uri'] == 'uri'
        assert response['documentChanges'][0]['textDocument']['version'] == 3
        assert response['documentChanges'][0]['edits'][0]['newText'] == 'text3'
        assert response['documentChanges'][0]['edits'][0]['range']['start'][
            'line'] == 2
        assert response['documentChanges'][0]['edits'][0]['range']['start'][
            'character'] == 2
        assert response['documentChanges'][0]['edits'][0]['range']['end'][
            'line'] == 3
        assert response['documentChanges'][0]['edits'][0]['range']['end'][
            'character'] == 3

        assert response['documentChanges'][1][
            'kind'] == ResourceOperationKind.Create
        assert response['documentChanges'][1]['uri'] == 'create file'
        assert response['documentChanges'][1]['options'][
            'ignoreIfExists'] == True
        assert response['documentChanges'][1]['options']['overwrite'] == True

        assert response['documentChanges'][2][
            'kind'] == ResourceOperationKind.Rename
        assert response['documentChanges'][2]['newUri'] == 'rename new uri'
        assert response['documentChanges'][2]['oldUri'] == 'rename old uri'
        assert response['documentChanges'][2]['options'][
            'ignoreIfExists'] == True
        assert response['documentChanges'][2]['options']['overwrite'] == True

        assert response['documentChanges'][3][
            'kind'] == ResourceOperationKind.Delete
        assert response['documentChanges'][3]['uri'] == 'delete file'
        assert response['documentChanges'][3]['options'][
            'ignoreIfExists'] == True
        assert response['documentChanges'][3]['options']['recursive'] == True
예제 #2
0
    def test_range_formatting_return_list(self):
        response = self.client.lsp.send_request(
            RANGE_FORMATTING,
            DocumentRangeFormattingParams(
                text_document=TextDocumentIdentifier(uri='file://return.list'),
                range=Range(
                    start=Position(line=0, character=0),
                    end=Position(line=1, character=1),
                ),
                options=FormattingOptions(
                    tab_size=2,
                    insert_spaces=True,
                    trim_trailing_whitespace=True,
                    insert_final_newline=True,
                    trim_final_newlines=True,
                ),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response

        assert response[0]['newText'] == 'text'
        assert response[0]['range']['start']['line'] == 0
        assert response[0]['range']['start']['character'] == 0
        assert response[0]['range']['end']['line'] == 1
        assert response[0]['range']['end']['character'] == 1
예제 #3
0
    def test_completions(self):
        response = self.client.lsp.send_request(
            COMPLETION,
            CompletionParams(
                text_document=TextDocumentIdentifier(uri='file://test.test'),
                position=Position(line=0,
                                  character=0))).result(timeout=CALL_TIMEOUT)

        assert response['isIncomplete'] == False
        assert response['items'][0]['label'] == 'test1'
        assert response['items'][0]['kind'] == CompletionItemKind.Method
        assert response['items'][0]['preselect'] == True
        assert 'deprecated' not in response['items'][0]
        assert 'tags' not in response['items'][0]
        assert 'detail' not in response['items'][0]
        assert 'documentation' not in response['items'][0]
        assert 'sort_text' not in response['items'][0]
        assert 'filter_text' not in response['items'][0]
        assert 'insert_text' not in response['items'][0]
        assert 'insert_text_format' not in response['items'][0]
        assert 'insert_text_mode' not in response['items'][0]
        assert 'text_edit' not in response['items'][0]
        assert 'additional_text_edits' not in response['items'][0]
        assert 'commit_characters' not in response['items'][0]
        assert 'command' not in response['items'][0]
        assert 'data' not in response['items'][0]
예제 #4
0
    def test_signature_help_return_none(self):
        response = self.client.lsp.send_request(
            SIGNATURE_HELP,
            SignatureHelpParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
                context=SignatureHelpContext(
                    trigger_kind=SignatureHelpTriggerKind.TriggerCharacter,
                    is_retrigger=True,
                    trigger_character='a',
                    active_signature_help=SignatureHelp(
                        signatures=[
                            SignatureInformation(
                                label='label',
                                documentation='documentation',
                                parameters=[
                                    ParameterInformation(
                                        label=(0, 0),
                                        documentation='documentation',
                                    ),
                                ]),
                        ],
                        active_signature=0,
                        active_parameter=0,
                    ),
                ),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #5
0
    def test_semantic_tokens_full_return_none(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_SEMANTIC_TOKENS_FULL,
            SemanticTokensParams(text_document=TextDocumentIdentifier(
                uri='file://return.none'))).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #6
0
    def test_code_action_return_none(self):
        response = self.client.lsp.send_request(
            CODE_ACTION,
            CodeActionParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                range=Range(
                    start=Position(line=0, character=0),
                    end=Position(line=1, character=1),
                ),
                context=CodeActionContext(
                    diagnostics=[
                        Diagnostic(
                            range=Range(
                                start=Position(line=0, character=0),
                                end=Position(line=1, character=1),
                            ),
                            message='diagnostic',
                        )
                    ],
                    only=[CodeActionKind.Refactor],
                )
            )
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #7
0
    def test_declaration_return_location_link_list(self):
        response = self.client.lsp.send_request(
            DECLARATION,
            DeclarationParams(
                text_document=TextDocumentIdentifier(
                    uri='file://return.location_link_list'),
                position=Position(line=0, character=0),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response[0]['targetUri'] == 'uri'

        assert response[0]['targetRange']['start']['line'] == 0
        assert response[0]['targetRange']['start']['character'] == 0
        assert response[0]['targetRange']['end']['line'] == 1
        assert response[0]['targetRange']['end']['character'] == 1

        assert response[0]['targetSelectionRange']['start']['line'] == 0
        assert response[0]['targetSelectionRange']['start']['character'] == 0
        assert response[0]['targetSelectionRange']['end']['line'] == 2
        assert response[0]['targetSelectionRange']['end']['character'] == 2

        assert response[0]['originSelectionRange']['start']['line'] == 0
        assert response[0]['originSelectionRange']['start']['character'] == 0
        assert response[0]['originSelectionRange']['end']['line'] == 3
        assert response[0]['originSelectionRange']['end']['character'] == 3
예제 #8
0
    def test_code_lens_return_none(self):
        response = self.client.lsp.send_request(
            CODE_LENS,
            CodeLensParams(text_document=TextDocumentIdentifier(uri='file://return.none')),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #9
0
    def test_document_symbol_return_document_symbol_list(self):
        response = self.client.lsp.send_request(
            DOCUMENT_SYMBOL,
            DocumentSymbolParams(
                text_document=TextDocumentIdentifier(uri='file://return.document_symbol_list'),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response

        assert response[0]['name'] == 'symbol'
        assert response[0]['kind'] == SymbolKind.Object
        assert response[0]['range']['start']['line'] == 0
        assert response[0]['range']['start']['character'] == 0
        assert response[0]['range']['end']['line'] == 10
        assert response[0]['range']['end']['character'] == 10
        assert response[0]['selectionRange']['start']['line'] == 0
        assert response[0]['selectionRange']['start']['character'] == 0
        assert response[0]['selectionRange']['end']['line'] == 10
        assert response[0]['selectionRange']['end']['character'] == 10
        assert response[0]['detail'] == 'detail'
        assert response[0]['deprecated'] == True

        assert response[0]['children'][0]['name'] == 'inner_symbol'
        assert response[0]['children'][0]['kind'] == SymbolKind.Number
        assert response[0]['children'][0]['range']['start']['line'] == 0
        assert response[0]['children'][0]['range']['start']['character'] == 0
        assert response[0]['children'][0]['range']['end']['line'] == 1
        assert response[0]['children'][0]['range']['end']['character'] == 1
        assert response[0]['children'][0]['selectionRange']['start']['line'] == 0
        assert response[0]['children'][0]['selectionRange']['start']['character'] == 0
        assert response[0]['children'][0]['selectionRange']['end']['line'] == 1
        assert response[0]['children'][0]['selectionRange']['end']['character'] == 1

        assert 'children' not in response[0]['children'][0]
예제 #10
0
    def test_code_action_return_list(self):
        response = self.client.lsp.send_request(
            CODE_ACTION,
            CodeActionParams(
                text_document=TextDocumentIdentifier(uri='file://return.list'),
                range=Range(
                    start=Position(line=0, character=0),
                    end=Position(line=1, character=1),
                ),
                context=CodeActionContext(
                    diagnostics=[
                        Diagnostic(
                            range=Range(
                                start=Position(line=0, character=0),
                                end=Position(line=1, character=1),
                            ),
                            message='diagnostic'
                        )
                    ],
                    only=[CodeActionKind.Refactor]
                )
            )
        ).result(timeout=CALL_TIMEOUT)

        assert response[0]['title'] == 'action1'
        assert response[1]['title'] == 'action2'
        assert response[1]['kind'] == CodeActionKind.Refactor
        assert response[2]['title'] == 'cmd1'
        assert response[2]['command'] == 'cmd1'
        assert response[2]['arguments'] == [1, 'two']
예제 #11
0
    def test_folding_range_return_none(self):
        response = self.client.lsp.send_request(
            FOLDING_RANGE,
            FoldingRangeParams(text_document=TextDocumentIdentifier(
                uri='file://return.none'), ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #12
0
    def test_document_link_return_none(self):
        response = self.client.lsp.send_request(
            DOCUMENT_LINK,
            DocumentLinkParams(text_document=TextDocumentIdentifier(
                uri='file://return.none'), ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #13
0
    def test_references_return_none(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_MONIKER,
            MonikerParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            )).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #14
0
    def test_call_hierarchy_prepare_return_none(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_CALL_HIERARCHY_PREPARE,
            CallHierarchyPrepareParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            )).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #15
0
def test_did_close():
    _reset_mocks()

    params = DidCloseTextDocumentParams(text_document=TextDocumentIdentifier(
        uri=fake_document_uri))

    did_close(server, params)

    # Check if show message is called
    server.show_message.assert_called_once()
예제 #16
0
    def test_document_highlight_return_none(self):
        response = self.client.lsp.send_request(
            DOCUMENT_HIGHLIGHT,
            DocumentHighlightParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #17
0
    def test_references_return_none(self):
        response = self.client.lsp.send_request(
            REFERENCES,
            ReferenceParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
                context=ReferenceContext(include_declaration=True, ),
            )).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #18
0
    def test_prepare_rename_return_none(self):
        response = self.client.lsp.send_request(
            PREPARE_RENAME,
            PrepareRenameParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #19
0
    def test_declaration_return_none(self):
        response = self.client.lsp.send_request(
            DECLARATION,
            DeclarationParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
    def test_linked_editing_ranges_return_none(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_LINKED_EDITING_RANGE,
            LinkedEditingRangeParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                position=Position(line=0, character=0),
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #21
0
    def test_semantic_tokens_range_return_none(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_SEMANTIC_TOKENS_RANGE,
            SemanticTokensRangeParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                range=Range(
                    start=Position(line=0, character=0),
                    end=Position(line=10,
                                 character=80)))).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #22
0
    def test_selection_range_return_none(self):
        response = self.client.lsp.send_request(
            SELECTION_RANGE,
            SelectionRangeParams(
                query='query',
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                positions=[Position(line=0, character=0)],
            ),
        ).result(timeout=CALL_TIMEOUT)

        assert response is None
예제 #23
0
    def test_semantic_tokens_full_delta_return_tokens(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_SEMANTIC_TOKENS_FULL_DELTA,
            SemanticTokensDeltaParams(
                text_document=TextDocumentIdentifier(
                    uri='file://return.tokens'),
                previous_result_id='id')).result(timeout=CALL_TIMEOUT)

        assert response

        assert response['data'] == [0, 0, 3, 0, 0]
예제 #24
0
    def test_code_lens_return_list(self):
        response = self.client.lsp.send_request(
            CODE_LENS,
            CodeLensParams(text_document=TextDocumentIdentifier(uri='file://return.list')),
        ).result(timeout=CALL_TIMEOUT)

        assert response[0]['data'] == 'some data'
        assert response[0]['range']['start']['line'] == 0
        assert response[0]['range']['start']['character'] == 0
        assert response[0]['range']['end']['line'] == 1
        assert response[0]['range']['end']['character'] == 1
        assert response[0]['command']['title'] == 'cmd1'
        assert response[0]['command']['command'] == 'cmd1'
예제 #25
0
    def test_folding_range_return_list(self):
        response = self.client.lsp.send_request(
            FOLDING_RANGE,
            FoldingRangeParams(text_document=TextDocumentIdentifier(
                uri='file://return.list'), ),
        ).result(timeout=CALL_TIMEOUT)

        assert response

        assert response[0]['startLine'] == 0
        assert response[0]['endLine'] == 0
        assert response[0]['startCharacter'] == 1
        assert response[0]['endCharacter'] == 1
        assert response[0]['kind'] == FoldingRangeKind.Comment
    def test_format_should_return_whole_file_text_edit(self) -> None:
        service = GalaxyToolFormatService()
        params = DocumentFormattingParams(
            text_document=TextDocumentIdentifier(uri="test"),
            options=FormattingOptions(tab_size=4, insert_spaces=True),
        )

        actual = service.format(FAKE_UNFORMATTED_DOCUMENT, params)

        assert len(actual) == 1
        assert actual[0].range.start.line == 0
        assert actual[0].range.start.character == 0
        assert actual[0].range.end.line == 3
        assert actual[0].range.end.character == 0
예제 #27
0
    def test_moniker_return_list(self):
        response = self.client.lsp.send_request(
            TEXT_DOCUMENT_MONIKER,
            MonikerParams(
                text_document=TextDocumentIdentifier(uri='file://return.list'),
                position=Position(line=0, character=0),
            )).result(timeout=CALL_TIMEOUT)

        assert response

        assert response[0]['scheme'] == 'test_scheme'
        assert response[0]['identifier'] == 'test_identifier'
        assert response[0]['unique'] == 'global'
        assert response[0]['kind'] == 'local'
예제 #28
0
def test_hover(
    client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
) -> None:
    client, server = client_server
    _init(client, datadir)
    path = datadir / "CMakeLists.txt"
    _open(client, path, "project()")
    response = client.lsp.send_request(
        HOVER,
        TextDocumentPositionParams(
            text_document=TextDocumentIdentifier(uri=path.as_uri()),
            position=Position(line=0, character=0),
        ),
    ).result(timeout=CALL_TIMEOUT)
    assert "<PROJECT-NAME>" in response["contents"]["value"]
예제 #29
0
def test_formatting(
    client_server: Tuple[LanguageServer, CMakeLanguageServer], datadir: Path
) -> None:
    client, server = client_server
    _init(client, datadir)
    path = datadir / "CMakeLists.txt"
    _open(client, path, "a ( b c ) ")
    response = client.lsp.send_request(
        FORMATTING,
        DocumentFormattingParams(
            text_document=TextDocumentIdentifier(uri=path.as_uri()),
            options=FormattingOptions(tab_size=2, insert_spaces=True),
        ),
    ).result(timeout=CALL_TIMEOUT)
    assert response[0]["newText"] == "a(b c)\n"
예제 #30
0
    def test_document_formatting_return_none(self):
        response = self.client.lsp.send_request(
            FORMATTING,
            DocumentFormattingParams(
                text_document=TextDocumentIdentifier(uri='file://return.none'),
                options=FormattingOptions(
                    tab_size=2,
                    insert_spaces=True,
                    trim_trailing_whitespace=True,
                    insert_final_newline=True,
                    trim_final_newlines=True,
                ),
            )).result(timeout=CALL_TIMEOUT)

        assert response is None