diff options
author | Armin Rigo <arigo@tunes.org> | 2016-02-19 10:37:26 +0100 |
---|---|---|
committer | Armin Rigo <arigo@tunes.org> | 2016-02-19 10:37:26 +0100 |
commit | 11e551048da4dd36c488646acb77431a269a496a (patch) | |
tree | 06089d83bd6c2bf034e819679cb3e39856759ba0 /testing | |
parent | 6bdddc4134898be19c1117d8b63be49446269ce5 (diff) | |
download | cffi-11e551048da4dd36c488646acb77431a269a496a.tar.gz |
more pypy tweaks
Diffstat (limited to 'testing')
-rw-r--r-- | testing/embedding/test_basic.py | 54 |
1 files changed, 31 insertions, 23 deletions
diff --git a/testing/embedding/test_basic.py b/testing/embedding/test_basic.py index 142a416..ec5f22b 100644 --- a/testing/embedding/test_basic.py +++ b/testing/embedding/test_basic.py @@ -27,11 +27,14 @@ def check_lib_python_found(tmpdir): def prefix_pythonpath(): cffi_base = os.path.dirname(os.path.dirname(local_dir)) - pythonpath = os.environ.get('PYTHONPATH', '').split(os.pathsep) + pythonpath = org_env.get('PYTHONPATH', '').split(os.pathsep) if cffi_base not in pythonpath: pythonpath.insert(0, cffi_base) return os.pathsep.join(pythonpath) +def setup_module(mod): + mod.org_env = os.environ.copy() + class EmbeddingTests: _compiled_modules = {} @@ -45,14 +48,12 @@ class EmbeddingTests: def get_path(self): return str(self._path.ensure(dir=1)) - def _run_base(self, args, env_extra={}, **kwds): - print('RUNNING:', args, env_extra, kwds) - env = os.environ.copy() - env.update(env_extra) - return subprocess.Popen(args, env=env, **kwds) + def _run_base(self, args, **kwds): + print('RUNNING:', args, kwds) + return subprocess.Popen(args, **kwds) - def _run(self, args, env_extra={}): - popen = self._run_base(args, env_extra, cwd=self.get_path(), + def _run(self, args): + popen = self._run_base(args, cwd=self.get_path(), stdout=subprocess.PIPE, universal_newlines=True) output = popen.stdout.read() @@ -64,6 +65,7 @@ class EmbeddingTests: return output def prepare_module(self, name): + self.patch_environment() if name not in self._compiled_modules: path = self.get_path() filename = '%s.py' % name @@ -73,9 +75,8 @@ class EmbeddingTests: # find a solution to that: we could hack sys.path inside the # script run here, but we can't hack it in the same way in # execute(). - env_extra = {'PYTHONPATH': prefix_pythonpath()} - output = self._run([sys.executable, os.path.join(local_dir, filename)], - env_extra=env_extra) + output = self._run([sys.executable, + os.path.join(local_dir, filename)]) match = re.compile(r"\bFILENAME: (.+)").search(output) assert match dynamic_lib_name = match.group(1) @@ -119,28 +120,35 @@ class EmbeddingTests: finally: os.chdir(curdir) - def execute(self, name): + def patch_environment(self): path = self.get_path() + # for libpypy-c.dll or Python27.dll + path = os.path.split(sys.executable)[0] + os.path.pathsep + path env_extra = {'PYTHONPATH': prefix_pythonpath()} if sys.platform == 'win32': - _path = os.environ.get('PATH') - # for libpypy-c.dll or Python27.dll - _path = os.path.split(sys.executable)[0] + ';' + _path - env_extra['PATH'] = _path + envname = 'PATH' else: - libpath = os.environ.get('LD_LIBRARY_PATH') - if libpath: - libpath = path + ':' + libpath - else: - libpath = path - env_extra['LD_LIBRARY_PATH'] = libpath + envname = 'LD_LIBRARY_PATH' + libpath = org_env.get(envname) + if libpath: + libpath = path + os.path.pathsep + libpath + else: + libpath = path + env_extra[envname] = libpath + for key, value in sorted(env_extra.items()): + if os.environ.get(key) != value: + print '* setting env var %r to %r' % (key, value) + os.environ[key] = value + + def execute(self, name): + path = self.get_path() print('running %r in %r' % (name, path)) executable_name = name if sys.platform == 'win32': executable_name = os.path.join(path, executable_name + '.exe') else: executable_name = os.path.join('.', executable_name) - popen = self._run_base([executable_name], env_extra, cwd=path, + popen = self._run_base([executable_name], cwd=path, stdout=subprocess.PIPE, universal_newlines=True) result = popen.stdout.read() |