mirror of
https://github.com/davidhalter/jedi.git
synced 2025-12-06 14:04:26 +08:00
88 lines
1.9 KiB
Python
88 lines
1.9 KiB
Python
import difflib
|
|
|
|
import pytest
|
|
|
|
from jedi._compatibility import u
|
|
from jedi.parser import Parser
|
|
|
|
code_basic_features = u('''
|
|
"""A mod docstring"""
|
|
|
|
def a_function(a_argument, a_default = "default"):
|
|
"""A func docstring"""
|
|
|
|
a_result = 3 * a_argument
|
|
print(a_result) # a comment
|
|
b = """
|
|
from
|
|
to""" + "huhu"
|
|
|
|
|
|
if a_default == "default":
|
|
return str(a_result)
|
|
else
|
|
return None
|
|
''')
|
|
|
|
|
|
def diff_code_assert(a, b, n=4):
|
|
if a != b:
|
|
diff = "\n".join(difflib.unified_diff(
|
|
a.splitlines(),
|
|
b.splitlines(),
|
|
n=n,
|
|
lineterm=""
|
|
))
|
|
assert False, "Code does not match:\n%s\n\ncreated code:\n%s" % (
|
|
diff,
|
|
b
|
|
)
|
|
pass
|
|
|
|
|
|
@pytest.mark.skipif('True', reason='Refactor a few parser things first.')
|
|
def test_basic_parsing():
|
|
"""Validate the parsing features"""
|
|
|
|
prs = Parser(code_basic_features)
|
|
diff_code_assert(
|
|
code_basic_features,
|
|
prs.module.get_code2()
|
|
)
|
|
|
|
|
|
@pytest.mark.skipif('True', reason='Not yet working.')
|
|
def test_operators():
|
|
src = u('5 * 3')
|
|
prs = Parser(src)
|
|
diff_code_assert(src, prs.module.get_code())
|
|
|
|
|
|
@pytest.mark.skipif('True', reason='Broke get_code support for yield/return statements.')
|
|
def test_get_code():
|
|
"""Use the same code that the parser also generates, to compare"""
|
|
s = u('''"""a docstring"""
|
|
class SomeClass(object, mixin):
|
|
def __init__(self):
|
|
self.xy = 3.0
|
|
"""statement docstr"""
|
|
def some_method(self):
|
|
return 1
|
|
def yield_method(self):
|
|
while hasattr(self, 'xy'):
|
|
yield True
|
|
for x in [1, 2]:
|
|
yield x
|
|
def empty(self):
|
|
pass
|
|
class Empty:
|
|
pass
|
|
class WithDocstring:
|
|
"""class docstr"""
|
|
pass
|
|
def method_with_docstring():
|
|
"""class docstr"""
|
|
pass
|
|
''')
|
|
assert Parser(s).module.get_code() == s
|