| #!/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() |