diff options
Diffstat (limited to 'tests/lsp_tests/test_lsp_dctrl.py')
-rw-r--r-- | tests/lsp_tests/test_lsp_dctrl.py | 70 |
1 files changed, 65 insertions, 5 deletions
diff --git a/tests/lsp_tests/test_lsp_dctrl.py b/tests/lsp_tests/test_lsp_dctrl.py index 122b929..2bc90ba 100644 --- a/tests/lsp_tests/test_lsp_dctrl.py +++ b/tests/lsp_tests/test_lsp_dctrl.py @@ -1,25 +1,34 @@ import textwrap +from debputy.lsp.debputy_ls import DebputyLanguageServer + try: from lsprotocol.types import ( CompletionParams, TextDocumentIdentifier, HoverParams, MarkupContent, + SemanticTokensParams, ) from debputy.lsp.lsp_debian_control import ( _debian_control_completions, _debian_control_hover, + _debian_control_semantic_tokens_full, ) from pygls.server import LanguageServer except ImportError: pass -from lsp_tests.lsp_tutil import put_doc_with_cursor +from lsp_tests.lsp_tutil import ( + put_doc_with_cursor, + put_doc_no_cursor, + resolve_semantic_tokens, + resolved_semantic_token, +) -def test_dctrl_complete_field(ls: "LanguageServer") -> None: +def test_dctrl_complete_field(ls: "DebputyLanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" cursor_pos = put_doc_with_cursor( @@ -48,7 +57,7 @@ def test_dctrl_complete_field(ls: "LanguageServer") -> None: assert "Source" not in keywords -def test_dctrl_hover_doc_field(ls: "LanguageServer") -> None: +def test_dctrl_hover_doc_field(ls: "DebputyLanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" cursor_pos = put_doc_with_cursor( ls, @@ -72,7 +81,7 @@ def test_dctrl_hover_doc_field(ls: "LanguageServer") -> None: assert "Determines which architecture" in hover_doc.contents.value -def test_dctrl_hover_doc_synopsis(ls: "LanguageServer") -> None: +def test_dctrl_hover_doc_synopsis(ls: "DebputyLanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" cursor_pos = put_doc_with_cursor( ls, @@ -98,7 +107,7 @@ def test_dctrl_hover_doc_synopsis(ls: "LanguageServer") -> None: assert "super charged tool with batteries included" in hover_doc.contents.value -def test_dctrl_hover_doc_substvars(ls: "LanguageServer") -> None: +def test_dctrl_hover_doc_substvars(ls: "DebputyLanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" matching_cases = [ "bar (= <CURSOR>${binary:Version})", @@ -158,3 +167,54 @@ def test_dctrl_hover_doc_substvars(ls: "LanguageServer") -> None: if hover_doc is not None and isinstance(hover_doc.contents, MarkupContent): provided_doc = hover_doc.contents.value assert not provided_doc.startswith("# Substvar `${binary:Version}`") + + +def test_dctrl_semantic_tokens(ls: "DebputyLanguageServer") -> None: + dctrl_uri = "file:///nowhere/debian/control" + put_doc_no_cursor( + ls, + dctrl_uri, + "debian/control", + textwrap.dedent( + """\ + # Some leading comment + + Source: foo + + # Comment between stanzas + + Package: foo + # Comment before Architecture + Architecture: any + Depends: + # Comment about bar + bar (>= 1.0), + baz [linux-any] <!pkg.foo.bootstrap> + Description: super charged tool with batteries included + Unknown-Field: Some value + # Comment in that field + that we do not know about. +""" + ), + ) + + semantic_tokens = _debian_control_semantic_tokens_full( + ls, + SemanticTokensParams(TextDocumentIdentifier(dctrl_uri)), + ) + resolved_semantic_tokens = resolve_semantic_tokens(semantic_tokens) + assert resolved_semantic_tokens is not None + assert resolved_semantic_tokens == [ + resolved_semantic_token(0, 0, len("# Some leading comment"), "comment"), + resolved_semantic_token(2, 0, len("Source"), "keyword"), + resolved_semantic_token(4, 0, len("# Comment between stanzas"), "comment"), + resolved_semantic_token(6, 0, len("Package"), "keyword"), + resolved_semantic_token(7, 0, len("# Comment before Architecture"), "comment"), + resolved_semantic_token(8, 0, len("Architecture"), "keyword"), + resolved_semantic_token(8, len("Architecture: "), len("any"), "enumMember"), + resolved_semantic_token(9, 0, len("Depends"), "keyword"), + resolved_semantic_token(10, 0, len("# Comment about bar"), "comment"), + resolved_semantic_token(13, 0, len("Description"), "keyword"), + resolved_semantic_token(14, 0, len("Unknown-Field"), "keyword"), + # TODO: resolved_semantic_token(15, 0, len("# Comment in that field"), "comment"), + ] |