diff options
Diffstat (limited to 'testing/cffi0/test_zintegration.py')
-rw-r--r-- | testing/cffi0/test_zintegration.py | 181 |
1 files changed, 0 insertions, 181 deletions
diff --git a/testing/cffi0/test_zintegration.py b/testing/cffi0/test_zintegration.py deleted file mode 100644 index ce925b8..0000000 --- a/testing/cffi0/test_zintegration.py +++ /dev/null @@ -1,181 +0,0 @@ -import py, os, sys, shutil -import subprocess -from testing.udir import udir -import pytest - -if sys.platform == 'win32': - pytestmark = pytest.mark.skip('snippets do not run on win32') -if sys.version_info < (2, 7): - pytestmark = pytest.mark.skip( - 'fails e.g. on a Debian/Ubuntu which patches virtualenv' - ' in a non-2.6-friendly way') - -def create_venv(name): - tmpdir = udir.join(name) - try: - subprocess.check_call(['virtualenv', - #'--never-download', <= could be added, but causes failures - # in random cases on random machines - '-p', os.path.abspath(sys.executable), - str(tmpdir)]) - except OSError as e: - py.test.skip("Cannot execute virtualenv: %s" % (e,)) - - site_packages = None - for dirpath, dirnames, filenames in os.walk(str(tmpdir)): - if os.path.basename(dirpath) == 'site-packages': - site_packages = dirpath - break - paths = "" - if site_packages: - try: - from cffi import _pycparser - modules = ('cffi', '_cffi_backend') - except ImportError: - modules = ('cffi', '_cffi_backend', 'pycparser') - try: - import ply - except ImportError: - pass - else: - modules += ('ply',) # needed for older versions of pycparser - paths = [] - for module in modules: - target = __import__(module, None, None, []) - if not hasattr(target, '__file__'): # for _cffi_backend on pypy - continue - src = os.path.abspath(target.__file__) - for end in ['__init__.pyc', '__init__.pyo', '__init__.py']: - if src.lower().endswith(end): - src = src[:-len(end)-1] - break - paths.append(os.path.dirname(src)) - paths = os.pathsep.join(paths) - return tmpdir, paths - -SNIPPET_DIR = py.path.local(__file__).join('..', 'snippets') - -def really_run_setup_and_program(dirname, venv_dir_and_paths, python_snippet): - venv_dir, paths = venv_dir_and_paths - def remove(dir): - dir = str(SNIPPET_DIR.join(dirname, dir)) - shutil.rmtree(dir, ignore_errors=True) - remove('build') - remove('__pycache__') - for basedir in os.listdir(str(SNIPPET_DIR.join(dirname))): - remove(os.path.join(basedir, '__pycache__')) - olddir = os.getcwd() - python_f = udir.join('x.py') - python_f.write(py.code.Source(python_snippet)) - try: - os.chdir(str(SNIPPET_DIR.join(dirname))) - if os.name == 'nt': - bindir = 'Scripts' - else: - bindir = 'bin' - vp = str(venv_dir.join(bindir).join('python')) - env = os.environ.copy() - env['PYTHONPATH'] = paths - subprocess.check_call((vp, 'setup.py', 'clean'), env=env) - # there's a setuptools/easy_install bug that causes this to fail when the build/install occur together and - # we're in the same directory with the build (it tries to look up dependencies for itself on PyPI); - # subsequent runs will succeed because this test doesn't properly clean up the build- use pip for now. - subprocess.check_call((vp, '-m', 'pip', 'install', '.'), env=env) - subprocess.check_call((vp, str(python_f)), env=env) - finally: - os.chdir(olddir) - -def run_setup_and_program(dirname, python_snippet): - venv_dir = create_venv(dirname + '-cpy') - really_run_setup_and_program(dirname, venv_dir, python_snippet) - # - sys._force_generic_engine_ = True - try: - venv_dir = create_venv(dirname + '-gen') - really_run_setup_and_program(dirname, venv_dir, python_snippet) - finally: - del sys._force_generic_engine_ - # the two files lextab.py and yacctab.py are created by not-correctly- - # installed versions of pycparser. - assert not os.path.exists(str(SNIPPET_DIR.join(dirname, 'lextab.py'))) - assert not os.path.exists(str(SNIPPET_DIR.join(dirname, 'yacctab.py'))) - -class TestZIntegration(object): - def teardown_class(self): - if udir.isdir(): - udir.remove(ignore_errors=True) - udir.ensure(dir=1) - - def test_infrastructure(self): - run_setup_and_program('infrastructure', ''' - import snip_infrastructure - assert snip_infrastructure.func() == 42 - ''') - - def test_distutils_module(self): - run_setup_and_program("distutils_module", ''' - import snip_basic_verify - p = snip_basic_verify.C.getpwuid(0) - assert snip_basic_verify.ffi.string(p.pw_name) == b"root" - ''') - - def test_distutils_package_1(self): - run_setup_and_program("distutils_package_1", ''' - import snip_basic_verify1 - p = snip_basic_verify1.C.getpwuid(0) - assert snip_basic_verify1.ffi.string(p.pw_name) == b"root" - ''') - - def test_distutils_package_2(self): - run_setup_and_program("distutils_package_2", ''' - import snip_basic_verify2 - p = snip_basic_verify2.C.getpwuid(0) - assert snip_basic_verify2.ffi.string(p.pw_name) == b"root" - ''') - - def test_setuptools_module(self): - run_setup_and_program("setuptools_module", ''' - import snip_setuptools_verify - p = snip_setuptools_verify.C.getpwuid(0) - assert snip_setuptools_verify.ffi.string(p.pw_name) == b"root" - ''') - - def test_setuptools_package_1(self): - run_setup_and_program("setuptools_package_1", ''' - import snip_setuptools_verify1 - p = snip_setuptools_verify1.C.getpwuid(0) - assert snip_setuptools_verify1.ffi.string(p.pw_name) == b"root" - ''') - - def test_setuptools_package_2(self): - run_setup_and_program("setuptools_package_2", ''' - import snip_setuptools_verify2 - p = snip_setuptools_verify2.C.getpwuid(0) - assert snip_setuptools_verify2.ffi.string(p.pw_name) == b"root" - ''') - - def test_set_py_limited_api(self): - from cffi.setuptools_ext import _set_py_limited_api - try: - import setuptools - except ImportError as e: - py.test.skip(str(e)) - orig_version = setuptools.__version__ - expecting_limited_api = not hasattr(sys, 'gettotalrefcount') - try: - setuptools.__version__ = '26.0.0' - from setuptools import Extension - - kwds = _set_py_limited_api(Extension, {}) - assert kwds.get('py_limited_api', False) == expecting_limited_api - - setuptools.__version__ = '25.0' - kwds = _set_py_limited_api(Extension, {}) - assert kwds.get('py_limited_api', False) == False - - setuptools.__version__ = 'development' - kwds = _set_py_limited_api(Extension, {}) - assert kwds.get('py_limited_api', False) == expecting_limited_api - - finally: - setuptools.__version__ = orig_version |