summaryrefslogtreecommitdiffstats
path: root/tests/lsp_tests/test_lsp_dctrl.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lsp_tests/test_lsp_dctrl.py')
-rw-r--r--tests/lsp_tests/test_lsp_dctrl.py70
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"),
+ ]