forked from palantir/python-language-server
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_signature.py
More file actions
94 lines (71 loc) · 2.43 KB
/
Copy pathtest_signature.py
File metadata and controls
94 lines (71 loc) · 2.43 KB
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
# Copyright 2017 Palantir Technologies, Inc.
import pytest
from pyls import uris
from pyls.plugins import signature
from pyls.workspace import Document
DOC_URI = uris.from_fs_path(__file__)
DOC = """import sys
def main(param1, param2):
\"\"\" Main docstring
Args:
param1 (str): Docs for param1
\"\"\"
raise Exception()
main(
"""
MULTI_LINE_DOC = """import sys
def main(param1=None,
param2=None,
param3=None,
param4=None,
param5=None,
param6=None,
param7=None,
param8=None):
\"\"\" Main docstring
Args:
param1 (str): Docs for param1
\"\"\"
raise Exception()
main(
"""
def test_no_signature(workspace):
# Over blank line
sig_position = {'line': 9, 'character': 0}
doc = Document(DOC_URI, workspace, DOC)
sigs = signature.pyls_signature_help(doc, sig_position)['signatures']
assert not sigs
def test_signature(workspace):
# Over '( ' in main(
sig_position = {'line': 10, 'character': 5}
doc = Document(DOC_URI, workspace, DOC)
sig_info = signature.pyls_signature_help(doc, sig_position)
sigs = sig_info['signatures']
assert len(sigs) == 1
assert sigs[0]['label'] == 'main(param1, param2)'
assert sigs[0]['parameters'][0]['label'] == 'param1'
assert sigs[0]['parameters'][0]['documentation'] == 'Docs for param1'
assert sig_info['activeParameter'] == 0
def test_multi_line_signature(workspace):
# Over '( ' in main(
sig_position = {'line': 17, 'character': 5}
doc = Document(DOC_URI, workspace, MULTI_LINE_DOC)
sig_info = signature.pyls_signature_help(doc, sig_position)
sigs = sig_info['signatures']
assert len(sigs) == 1
assert sigs[0]['label'] == (
'main(param1=None, param2=None, param3=None, param4=None, '
'param5=None, param6=None, param7=None, param8=None)'
)
assert sigs[0]['parameters'][0]['label'] == 'param1'
assert sigs[0]['parameters'][0]['documentation'] == 'Docs for param1'
assert sig_info['activeParameter'] == 0
@pytest.mark.parametrize('regex,doc', [
(signature.SPHINX, " :param test: parameter docstring"),
(signature.EPYDOC, " @param test: parameter docstring"),
(signature.GOOGLE, " test (str): parameter docstring")
])
def test_docstring_params(regex, doc):
m = regex.match(doc)
assert m.group('param') == "test"
assert m.group('doc') == "parameter docstring"