lsp_tests.test_lsp_debian_rules_completer

tests/lsp_tests/test_lsp_debian_rules_completer.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
import textwrap
from typing import TYPE_CHECKING

if TYPE_CHECKING:
    import lsprotocol.types as types
else:
    import debputy.lsprotocol.types as types

from lsp_tests.lsp_tutil import put_doc_with_cursor

try:
    from pygls.server import LanguageServer

    from debputy.lsp.languages.lsp_debian_rules import debian_rules_completions
    from debputy.lsp.debputy_ls import DebputyLanguageServer

    HAS_PYGLS = True
except ImportError:
    HAS_PYGLS = False


def _complete_at_req(uri: str, cursor_pos: types.Position) -> types.CompletionParams:
    return types.CompletionParams(types.TextDocumentIdentifier(uri), cursor_pos)


def test_basic_debian_rules_completer_include(ls: "DebputyLanguageServer") -> None:
    file_uri = "file:///nowhere/debian/rules"

    cursor_pos = put_doc_with_cursor(
        ls,
        file_uri,
        "debian/rules",
        "include <CURSOR>",
    )

    completions = debian_rules_completions(
        ls,
        _complete_at_req(file_uri, cursor_pos),
    )
    assert isinstance(completions, list)
    keywords = {m.label: m for m in completions}
    assert "/usr/share/dpkg/default.mk" in keywords

    cursor_pos = put_doc_with_cursor(
        ls,
        file_uri,
        "debian/rules",
        textwrap.dedent(
            """\
        include /usr/share/<CURSOR>dpkg/default.m
"""
        ),
    )

    completions = debian_rules_completions(
        ls,
        _complete_at_req(file_uri, cursor_pos),
    )
    assert isinstance(completions, list)
    keywords = {m.label: m for m in completions}
    assert "/usr/share/dpkg/default.mk" in keywords

    cursor_pos = put_doc_with_cursor(
        ls,
        file_uri,
        "debian/rules",
        textwrap.dedent(
            """\
        include /usr/share/dpkg/default.mk<CURSOR>
"""
        ),
    )

    completions = debian_rules_completions(
        ls,
        _complete_at_req(file_uri, cursor_pos),
    )
    # No completions (it matches a known value)
    assert not completions

    cursor_pos = put_doc_with_cursor(
        ls,
        file_uri,
        "debian/rules",
        textwrap.dedent(
            """\
        include /usr foo<CURSOR>
"""
        ),
    )

    completions = debian_rules_completions(
        ls,
        _complete_at_req(file_uri, cursor_pos),
    )
    # No completions (it has a space, so something funky is going on)
    assert not completions