again testing improvements. follow_definitions imports are now pretty much covered

This commit is contained in:
Dave Halter
2014-03-21 13:50:29 +01:00
parent eeeeee49f5
commit fa0502d762
3 changed files with 73 additions and 17 deletions

View File

@@ -1,3 +1,5 @@
from itertools import chain
import pytest
import jedi
@@ -33,24 +35,50 @@ def test_import_empty():
assert definition
def check_follow_definition_types(source):
# nested import
completions = jedi.Script(source, path='some_path.py').completions()
defs = chain.from_iterable(c.follow_definition() for c in completions)
return [d.type for d in defs]
def test_follow_import_incomplete():
"""
Completion on incomplete imports should always take the full completion
to do any evaluation.
"""
datetime = jedi.Script("import datetim").completions()[0]
definition = datetime.follow_definition()[0]
assert definition
datetime = check_follow_definition_types("import itertool")
assert datetime == ['module']
# empty `from * import` parts
datetime = jedi.Script("from datetime import ").completions()[0]
definitions = datetime.follow_definition()
assert [d.type for d in definitions if d.name == 'date'] == ['class']
itert = jedi.Script("from itertools import ").completions()
definitions = [d for d in itert if d.name == 'chain']
assert len(definitions) == 1
assert [d.type for d in definitions[0].follow_definition()] == ['class']
# incomplete `from * import` part
datetime = jedi.Script("from datetime import datetim").completions()[0]
definition = datetime.follow_definition()
assert [d.type for d in definitions] == ['class']
datetime = check_follow_definition_types("from datetime import datetim")
assert set(datetime) == set(['class']) # py33: builtin and pure py version
# os.path check
ospath = check_follow_definition_types("from os.path import abspat")
assert ospath == ['function']
# alias
alias = check_follow_definition_types("import io as abcd; abcd")
assert alias == ['module']
@cwd_at('test/completion/import_tree')
def test_follow_definition_nested_import():
types = check_follow_definition_types("import pkg.mod1; pkg")
assert types == ['module']
types = check_follow_definition_types("import pkg.mod1; pkg.mod1")
assert types == ['module']
types = check_follow_definition_types("import pkg.mod1; pkg.mod1.a")
assert types == ['class']
def test_follow_definition_land_on_import():