mirror of
https://github.com/davidhalter/jedi.git
synced 2026-01-09 05:22:19 +08:00
WIP import improvement, getting rid of bad old code
This commit is contained in:
@@ -36,9 +36,11 @@ def test_find_module_not_package():
|
||||
assert is_package is False
|
||||
|
||||
|
||||
pkg_zip_path = os.path.join(os.path.dirname(__file__), 'zipped_imports/pkg.zip')
|
||||
|
||||
|
||||
def test_find_module_package_zipped(Script, evaluator, environment):
|
||||
path = os.path.join(os.path.dirname(__file__), 'zipped_imports/pkg.zip')
|
||||
sys_path = environment.get_sys_path() + [path]
|
||||
sys_path = environment.get_sys_path() + [pkg_zip_path]
|
||||
script = Script('import pkg; pkg.mod', sys_path=sys_path)
|
||||
assert len(script.completions()) == 1
|
||||
|
||||
@@ -52,6 +54,16 @@ def test_find_module_package_zipped(Script, evaluator, environment):
|
||||
assert is_package is True
|
||||
|
||||
|
||||
def test_correct_zip_package_behavior(Script, evaluator, environment):
|
||||
sys_path = environment.get_sys_path() + [pkg_zip_path]
|
||||
pkg, = Script('import pkg', sys_path=sys_path).goto_definitions()
|
||||
context, = pkg._name.infer()
|
||||
assert context.py__file__() == pkg_zip_path
|
||||
assert context.is_package is True
|
||||
assert context.py__package__() == ('pkg',)
|
||||
assert context.py__path__() == [pkg_zip_path]
|
||||
|
||||
|
||||
def test_find_module_not_package_zipped(Script, evaluator, environment):
|
||||
path = os.path.join(os.path.dirname(__file__), 'zipped_imports/not_pkg.zip')
|
||||
sys_path = environment.get_sys_path() + [path]
|
||||
|
||||
@@ -67,30 +67,31 @@ _s = ['/a', '/b', '/c/d/']
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
'sys_path_, module_path, result', [
|
||||
(_s, '/a/b', ('b',)),
|
||||
(_s, '/a/b/c', ('b', 'c')),
|
||||
(_s, '/a/b.py', ('b',)),
|
||||
(_s, '/a/b/c.py', ('b', 'c')),
|
||||
(_s, '/x/b.py', None),
|
||||
(_s, '/c/d/x.py', ('x',)),
|
||||
(_s, '/c/d/x.py', ('x',)),
|
||||
(_s, '/c/d/x/y.py', ('x', 'y')),
|
||||
'sys_path_, module_path, expected, is_package', [
|
||||
(_s, '/a/b', ('b',), False),
|
||||
(_s, '/a/b/c', ('b', 'c'), False),
|
||||
(_s, '/a/b.py', ('b',), False),
|
||||
(_s, '/a/b/c.py', ('b', 'c'), False),
|
||||
(_s, '/x/b.py', None, False),
|
||||
(_s, '/c/d/x.py', ('x',), False),
|
||||
(_s, '/c/d/x.py', ('x',), False),
|
||||
(_s, '/c/d/x/y.py', ('x', 'y'), False),
|
||||
# If dots are in there they also resolve. These are obviously illegal
|
||||
# in Python, but Jedi can handle them. Give the user a bit more freedom
|
||||
# that he will have to correct eventually.
|
||||
(_s, '/a/b.c.py', ('b.c',)),
|
||||
(_s, '/a/b.d/foo.bar.py', ('b.d', 'foo.bar')),
|
||||
(_s, '/a/b.c.py', ('b.c',), False),
|
||||
(_s, '/a/b.d/foo.bar.py', ('b.d', 'foo.bar'), False),
|
||||
|
||||
(_s, '/a/.py', None),
|
||||
(_s, '/a/c/.py', None),
|
||||
(_s, '/a/.py', None, False),
|
||||
(_s, '/a/c/.py', None, False),
|
||||
|
||||
(['/foo'], '/foo/bar/__init__.py', ('bar',)),
|
||||
(['/foo'], '/foo/bar/baz/__init__.py', ('bar', 'baz')),
|
||||
(['/foo'], '/foo/bar.so', ('bar',)),
|
||||
(['/foo'], '/foo/bar/__init__.so', ('bar',)),
|
||||
(['/foo'], '/x/bar.py', None),
|
||||
(['/foo'], '/foo/bar.xyz', ('bar.xyz',)),
|
||||
(['/foo'], '/foo/bar/__init__.py', ('bar',), True),
|
||||
(['/foo'], '/foo/bar/baz/__init__.py', ('bar', 'baz'), True),
|
||||
(['/foo'], '/foo/bar.so', ('bar',), False),
|
||||
(['/foo'], '/foo/bar/__init__.so', ('bar',), True),
|
||||
(['/foo'], '/x/bar.py', None, False),
|
||||
(['/foo'], '/foo/bar.xyz', ('bar.xyz',), False),
|
||||
])
|
||||
def test_calculate_dotted_from_path(sys_path_, module_path, result):
|
||||
assert sys_path.transform_path_to_dotted(sys_path_, module_path) == result
|
||||
def test_calculate_dotted_from_path(sys_path_, module_path, expected, is_package):
|
||||
assert sys_path.transform_path_to_dotted(sys_path_, module_path) \
|
||||
== (expected, is_package)
|
||||
|
||||
Reference in New Issue
Block a user