From 9ca7b30e385741dd508f673adf57f9a70c93800f Mon Sep 17 00:00:00 2001 From: Dave Halter Date: Fri, 3 Aug 2018 23:59:55 +0200 Subject: [PATCH] Rewrite the pyc test --- jedi/evaluate/compiled/access.py | 2 +- test/test_evaluate/test_pyc.py | 49 +++++++++++++++++++------------- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/jedi/evaluate/compiled/access.py b/jedi/evaluate/compiled/access.py index 610cec92..9d33ae35 100644 --- a/jedi/evaluate/compiled/access.py +++ b/jedi/evaluate/compiled/access.py @@ -141,7 +141,7 @@ def load_module(evaluator, dotted_name, sys_path): __import__(dotted_name) except ImportError: # If a module is "corrupt" or not really a Python module or whatever. - print_to_stderr('Module %s not importable.' % dotted_name) + print_to_stderr('Module %s not importable in path %s.' % (dotted_name, sys_path)) return None except Exception: # Since __import__ pretty much makes code execution possible, just diff --git a/test/test_evaluate/test_pyc.py b/test/test_evaluate/test_pyc.py index d31254cc..ac4c6996 100644 --- a/test/test_evaluate/test_pyc.py +++ b/test/test_evaluate/test_pyc.py @@ -10,8 +10,10 @@ import os import shutil import sys +import pytest + import jedi -from ..helpers import cwd_at +from jedi.api.environment import SameEnvironment SRC = """class Foo: @@ -22,35 +24,44 @@ class Bar: """ -def generate_pyc(): - os.mkdir("dummy_package") - with open("dummy_package/__init__.py", 'w'): +@pytest.fixture +def pyc_project_path(tmpdir): + path = tmpdir.strpath + dummy_package_path = os.path.join(path, "dummy_package") + os.mkdir(dummy_package_path) + with open(os.path.join(dummy_package_path, "__init__.py"), 'w'): pass - with open("dummy_package/dummy.py", 'w') as f: + + dummy_path = os.path.join(dummy_package_path, 'dummy.py') + with open(dummy_path, 'w') as f: f.write(SRC) import compileall - compileall.compile_file("dummy_package/dummy.py") - os.remove("dummy_package/dummy.py") + compileall.compile_file(dummy_path) + os.remove(dummy_path) - if sys.version_info[0] == 3: + if sys.version_info.major == 3: # Python3 specific: # To import pyc modules, we must move them out of the __pycache__ # directory and rename them to remove ".cpython-%s%d" # see: http://stackoverflow.com/questions/11648440/python-does-not-detect-pyc-files - for f in os.listdir("dummy_package/__pycache__"): + pycache = os.path.join(dummy_package_path, "__pycache__") + for f in os.listdir(pycache): dst = f.replace('.cpython-%s%s' % sys.version_info[:2], "") - dst = os.path.join("dummy_package", dst) - shutil.copy(os.path.join("dummy_package/__pycache__", f), dst) + dst = os.path.join(dummy_package_path, dst) + shutil.copy(os.path.join(pycache, f), dst) + try: + yield path + finally: + shutil.rmtree(path) -@cwd_at('test/test_evaluate') -def test_pyc(Script): +def test_pyc(pyc_project_path): """ The list of completion must be greater than 2. """ - try: - generate_pyc() - s = jedi.Script("from dummy_package import dummy; dummy.", path='blub.py') - assert len(s.completions()) >= 2 - finally: - shutil.rmtree("dummy_package") + path = os.path.join(pyc_project_path, 'blub.py') + s = jedi.Script( + "from dummy_package import dummy; dummy.", + path=path, + environment=SameEnvironment()) + assert len(s.completions()) >= 2