File: test_document.py

package info (click to toggle)
python-lsp-server 1.13.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 868 kB
  • sloc: python: 8,250; sh: 12; makefile: 4
file content (105 lines) | stat: -rw-r--r-- 3,256 bytes parent folder | download | duplicates (2)
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
98
99
100
101
102
103
104
105
# Copyright 2017-2020 Palantir Technologies, Inc.
# Copyright 2021- Python Language Server Contributors.

from pylsp.workspace import Document
from test.fixtures import DOC, DOC_URI


def test_document_props(doc) -> None:
    assert doc.uri == DOC_URI
    assert doc.source == DOC


def test_document_lines(doc) -> None:
    assert len(doc.lines) == 4
    assert doc.lines[0] == "import sys\n"


def test_document_source_unicode(workspace) -> None:
    document_mem = Document(DOC_URI, workspace, "my source")
    document_disk = Document(DOC_URI, workspace)
    assert isinstance(document_mem.source, type(document_disk.source))


def test_offset_at_position(doc) -> None:
    assert doc.offset_at_position({"line": 0, "character": 8}) == 8
    assert doc.offset_at_position({"line": 1, "character": 5}) == 16
    assert doc.offset_at_position({"line": 2, "character": 0}) == 12
    assert doc.offset_at_position({"line": 2, "character": 4}) == 16
    assert doc.offset_at_position({"line": 4, "character": 0}) == 51


def test_word_at_position(doc) -> None:
    """Return the position under the cursor (or last in line if past the end)"""
    # import sys
    assert doc.word_at_position({"line": 0, "character": 8}) == "sys"
    # Past end of import sys
    assert doc.word_at_position({"line": 0, "character": 1000}) == "sys"
    # Empty line
    assert doc.word_at_position({"line": 1, "character": 5}) == ""
    # def main():
    assert doc.word_at_position({"line": 2, "character": 0}) == "def"
    # Past end of file
    assert doc.word_at_position({"line": 4, "character": 0}) == ""


def test_document_empty_edit(workspace) -> None:
    doc = Document("file:///uri", workspace, "")
    doc.apply_change(
        {
            "range": {
                "start": {"line": 0, "character": 0},
                "end": {"line": 0, "character": 0},
            },
            "text": "f",
        }
    )
    assert doc.source == "f"


def test_document_line_edit(workspace) -> None:
    doc = Document("file:///uri", workspace, "itshelloworld")
    doc.apply_change(
        {
            "text": "goodbye",
            "range": {
                "start": {"line": 0, "character": 3},
                "end": {"line": 0, "character": 8},
            },
        }
    )
    assert doc.source == "itsgoodbyeworld"


def test_document_multiline_edit(workspace) -> None:
    old = ["def hello(a, b):\n", "    print a\n", "    print b\n"]
    doc = Document("file:///uri", workspace, "".join(old))
    doc.apply_change(
        {
            "text": "print a, b",
            "range": {
                "start": {"line": 1, "character": 4},
                "end": {"line": 2, "character": 11},
            },
        }
    )
    assert doc.lines == ["def hello(a, b):\n", "    print a, b\n"]


def test_document_end_of_file_edit(workspace) -> None:
    old = ["print 'a'\n", "print 'b'\n"]
    doc = Document("file:///uri", workspace, "".join(old))
    doc.apply_change(
        {
            "text": "o",
            "range": {
                "start": {"line": 2, "character": 0},
                "end": {"line": 2, "character": 0},
            },
        }
    )
    assert doc.lines == [
        "print 'a'\n",
        "print 'b'\n",
        "o",
    ]