mirror of
https://github.com/SpaceVim/SpaceVim.git
synced 2025-02-04 11:40:04 +08:00
144 lines
3.3 KiB
Python
144 lines
3.3 KiB
Python
|
from textwrap import dedent
|
||
|
|
||
|
import pytest
|
||
|
|
||
|
|
||
|
def test_error_leaf_keyword_doc(Script):
|
||
|
d, = Script("or").help(1, 1)
|
||
|
assert len(d.docstring()) > 100
|
||
|
assert d.name == 'or'
|
||
|
|
||
|
|
||
|
def test_error_leaf_operator_doc(Script):
|
||
|
d, = Script("==").help()
|
||
|
assert len(d.docstring()) > 100
|
||
|
assert d.name == '=='
|
||
|
|
||
|
|
||
|
def test_keyword_completion(Script):
|
||
|
k = Script("fro").complete()[0]
|
||
|
imp_start = 'The "import'
|
||
|
assert k.docstring(raw=True).startswith(imp_start)
|
||
|
assert k.docstring().startswith(imp_start)
|
||
|
|
||
|
|
||
|
def test_import_keyword(Script):
|
||
|
d, = Script("import x").help(column=0)
|
||
|
assert d.docstring().startswith('The "import" statement')
|
||
|
# unrelated to #44
|
||
|
|
||
|
|
||
|
def test_import_keyword_with_gotos(goto_or_infer):
|
||
|
assert not goto_or_infer("import x", column=0)
|
||
|
|
||
|
|
||
|
def test_operator_doc(Script):
|
||
|
d, = Script("a == b").help(1, 3)
|
||
|
assert len(d.docstring()) > 100
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
'code, help_part', [
|
||
|
('str', 'Create a new string object'),
|
||
|
('str.strip', 'Return a copy of the string'),
|
||
|
]
|
||
|
)
|
||
|
def test_stdlib_doc(Script, code, help_part):
|
||
|
h, = Script(code).help()
|
||
|
assert help_part in h.docstring(raw=True)
|
||
|
|
||
|
|
||
|
def test_lambda(Script):
|
||
|
d, = Script('lambda x: x').help(column=0)
|
||
|
assert d.type == 'keyword'
|
||
|
assert d.docstring().startswith('Lambdas\n*******')
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
'code, kwargs', [
|
||
|
('?', {}),
|
||
|
('""', {}),
|
||
|
('"', {}),
|
||
|
]
|
||
|
)
|
||
|
def test_help_no_returns(Script, code, kwargs):
|
||
|
assert not Script(code).help(**kwargs)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize(
|
||
|
'to_execute, expected_doc', [
|
||
|
('X.x', 'Yeah '),
|
||
|
('X().x', 'Yeah '),
|
||
|
('X.y', 'f g '),
|
||
|
('X.z', ''),
|
||
|
]
|
||
|
)
|
||
|
def test_attribute_docstrings(goto_or_help, expected_doc, to_execute):
|
||
|
code = dedent('''\
|
||
|
class X:
|
||
|
"ha"
|
||
|
x = 3
|
||
|
""" Yeah """
|
||
|
y = 5
|
||
|
"f g "
|
||
|
z = lambda x: 1
|
||
|
''')
|
||
|
|
||
|
d, = goto_or_help(code + to_execute)
|
||
|
assert d.docstring() == expected_doc
|
||
|
|
||
|
|
||
|
def test_version_info(Script):
|
||
|
"""
|
||
|
Version info is a bit special, because it needs to be fast for some ifs, so
|
||
|
it's a special object that we have to check.
|
||
|
"""
|
||
|
s = Script(dedent("""\
|
||
|
import sys
|
||
|
|
||
|
sys.version_info"""))
|
||
|
|
||
|
c, = s.complete()
|
||
|
assert c.docstring() == 'sys.version_info\n\nVersion information as a named tuple.'
|
||
|
|
||
|
|
||
|
def test_builtin_docstring(goto_or_help_or_infer):
|
||
|
d, = goto_or_help_or_infer('open')
|
||
|
|
||
|
doc = d.docstring()
|
||
|
assert doc.startswith('open(file: ')
|
||
|
assert 'Open file' in doc
|
||
|
|
||
|
|
||
|
def test_docstring_decorator(goto_or_help_or_infer):
|
||
|
code = dedent('''
|
||
|
import types
|
||
|
|
||
|
def dec(func):
|
||
|
return types.FunctionType()
|
||
|
|
||
|
@dec
|
||
|
def func(a, b):
|
||
|
"hello"
|
||
|
return
|
||
|
func''')
|
||
|
d, = goto_or_help_or_infer(code)
|
||
|
|
||
|
doc = d.docstring()
|
||
|
assert doc == 'FunctionType(*args: Any, **kwargs: Any) -> Any\n\nhello'
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('code', ['', '\n', ' '])
|
||
|
def test_empty(Script, code):
|
||
|
assert not Script(code).help(1, 0)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('code', ['f()', '(bar or baz)', 'f[3]'])
|
||
|
def test_no_help_for_operator(Script, code):
|
||
|
assert not Script(code).help()
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('code', ['()', '(1,)', '[]', '[1]', 'f[]'])
|
||
|
def test_help_for_operator(Script, code):
|
||
|
assert Script(code).help()
|