import textwrap try: from lsprotocol.types import ( CompletionParams, TextDocumentIdentifier, HoverParams, MarkupContent, ) from debputy.lsp.lsp_debian_control import ( _debian_control_completions, _debian_control_hover, ) from pygls.server import LanguageServer except ImportError: pass from lsp_tests.lsp_tutil import put_doc_with_cursor def test_dctrl_complete_field(ls: "LanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" cursor_pos = put_doc_with_cursor( ls, dctrl_uri, "debian/control", textwrap.dedent( """\ Source: foo Package: foo """ ), ) matches = _debian_control_completions( ls, CompletionParams(TextDocumentIdentifier(dctrl_uri), cursor_pos), ) assert matches keywords = {m.label for m in matches} assert "Multi-Arch" in keywords assert "Architecture" in keywords # Already present or wrong section assert "Package" not in keywords assert "Source" not in keywords def test_dctrl_hover_doc_field(ls: "LanguageServer") -> None: dctrl_uri = "file:///nowhere/debian/control" cursor_pos = put_doc_with_cursor( ls, dctrl_uri, "debian/control", textwrap.dedent( """\ Source: foo Package: foo Architecture: any """ ), ) hover_doc = _debian_control_hover( ls, HoverParams(TextDocumentIdentifier(dctrl_uri), cursor_pos), ) assert hover_doc is not None and isinstance(hover_doc.contents, MarkupContent) assert "Determines which architecture" in hover_doc.contents.value