| #!/usr/bin/env python | |
| import sys | |
| import os | |
| import shutil | |
| import tempfile | |
| import subprocess | |
| from distutils.command.install import INSTALL_SCHEMES | |
| from string import Template | |
| from six.moves import urllib | |
| def _system_call(*args): | |
| assert subprocess.call(args) == 0 | |
| def tempdir(func): | |
| def _tempdir(*args, **kwargs): | |
| test_dir = tempfile.mkdtemp() | |
| old_dir = os.getcwd() | |
| os.chdir(test_dir) | |
| try: | |
| return func(*args, **kwargs) | |
| finally: | |
| os.chdir(old_dir) | |
| shutil.rmtree(test_dir) | |
| return _tempdir | |
| SIMPLE_BUILDOUT = """\ | |
| [buildout] | |
| parts = eggs | |
| [eggs] | |
| recipe = zc.recipe.egg | |
| eggs = | |
| extensions | |
| """ | |
| BOOTSTRAP = 'http://downloads.buildout.org/1/bootstrap.py' | |
| PYVER = sys.version.split()[0][:3] | |
| _VARS = {'base': '.', | |
| 'py_version_short': PYVER} | |
| scheme = 'nt' if sys.platform == 'win32' else 'unix_prefix' | |
| PURELIB = INSTALL_SCHEMES[scheme]['purelib'] | |
| @tempdir | |
| def test_virtualenv(): | |
| """virtualenv with setuptools""" | |
| purelib = os.path.abspath(Template(PURELIB).substitute(**_VARS)) | |
| _system_call('virtualenv', '--no-site-packages', '.') | |
| _system_call('bin/easy_install', 'setuptools==dev') | |
| # linux specific | |
| site_pkg = os.listdir(purelib) | |
| site_pkg.sort() | |
| assert 'setuptools' in site_pkg[0] | |
| easy_install = os.path.join(purelib, 'easy-install.pth') | |
| with open(easy_install) as f: | |
| res = f.read() | |
| assert 'setuptools' in res | |
| @tempdir | |
| def test_full(): | |
| """virtualenv + pip + buildout""" | |
| _system_call('virtualenv', '--no-site-packages', '.') | |
| _system_call('bin/easy_install', '-q', 'setuptools==dev') | |
| _system_call('bin/easy_install', '-qU', 'setuptools==dev') | |
| _system_call('bin/easy_install', '-q', 'pip') | |
| _system_call('bin/pip', 'install', '-q', 'zc.buildout') | |
| with open('buildout.cfg', 'w') as f: | |
| f.write(SIMPLE_BUILDOUT) | |
| with open('bootstrap.py', 'w') as f: | |
| f.write(urllib.request.urlopen(BOOTSTRAP).read()) | |
| _system_call('bin/python', 'bootstrap.py') | |
| _system_call('bin/buildout', '-q') | |
| eggs = os.listdir('eggs') | |
| eggs.sort() | |
| assert len(eggs) == 3 | |
| assert eggs[1].startswith('setuptools') | |
| del eggs[1] | |
| assert eggs == ['extensions-0.3-py2.6.egg', | |
| 'zc.recipe.egg-1.2.2-py2.6.egg'] | |
| if __name__ == '__main__': | |
| test_virtualenv() | |
| test_full() |