Home | History | Annotate | Download | only in tests
      1 #!/usr/bin/env python
      2 
      3 import sys
      4 import os
      5 import shutil
      6 import tempfile
      7 import subprocess
      8 from distutils.command.install import INSTALL_SCHEMES
      9 from string import Template
     10 
     11 from six.moves import urllib
     12 
     13 
     14 def _system_call(*args):
     15     assert subprocess.call(args) == 0
     16 
     17 
     18 def tempdir(func):
     19     def _tempdir(*args, **kwargs):
     20         test_dir = tempfile.mkdtemp()
     21         old_dir = os.getcwd()
     22         os.chdir(test_dir)
     23         try:
     24             return func(*args, **kwargs)
     25         finally:
     26             os.chdir(old_dir)
     27             shutil.rmtree(test_dir)
     28 
     29     return _tempdir
     30 
     31 
     32 SIMPLE_BUILDOUT = """\
     33 [buildout]
     34 
     35 parts = eggs
     36 
     37 [eggs]
     38 recipe = zc.recipe.egg
     39 
     40 eggs =
     41     extensions
     42 """
     43 
     44 BOOTSTRAP = 'http://downloads.buildout.org/1/bootstrap.py'
     45 PYVER = sys.version.split()[0][:3]
     46 
     47 _VARS = {'base': '.',
     48          'py_version_short': PYVER}
     49 
     50 scheme = 'nt' if sys.platform == 'win32' else 'unix_prefix'
     51 PURELIB = INSTALL_SCHEMES[scheme]['purelib']
     52 
     53 
     54 @tempdir
     55 def test_virtualenv():
     56     """virtualenv with setuptools"""
     57     purelib = os.path.abspath(Template(PURELIB).substitute(**_VARS))
     58     _system_call('virtualenv', '--no-site-packages', '.')
     59     _system_call('bin/easy_install', 'setuptools==dev')
     60     # linux specific
     61     site_pkg = os.listdir(purelib)
     62     site_pkg.sort()
     63     assert 'setuptools' in site_pkg[0]
     64     easy_install = os.path.join(purelib, 'easy-install.pth')
     65     with open(easy_install) as f:
     66         res = f.read()
     67     assert 'setuptools' in res
     68 
     69 
     70 @tempdir
     71 def test_full():
     72     """virtualenv + pip + buildout"""
     73     _system_call('virtualenv', '--no-site-packages', '.')
     74     _system_call('bin/easy_install', '-q', 'setuptools==dev')
     75     _system_call('bin/easy_install', '-qU', 'setuptools==dev')
     76     _system_call('bin/easy_install', '-q', 'pip')
     77     _system_call('bin/pip', 'install', '-q', 'zc.buildout')
     78 
     79     with open('buildout.cfg', 'w') as f:
     80         f.write(SIMPLE_BUILDOUT)
     81 
     82     with open('bootstrap.py', 'w') as f:
     83         f.write(urllib.request.urlopen(BOOTSTRAP).read())
     84 
     85     _system_call('bin/python', 'bootstrap.py')
     86     _system_call('bin/buildout', '-q')
     87     eggs = os.listdir('eggs')
     88     eggs.sort()
     89     assert len(eggs) == 3
     90     assert eggs[1].startswith('setuptools')
     91     del eggs[1]
     92     assert eggs == ['extensions-0.3-py2.6.egg',
     93         'zc.recipe.egg-1.2.2-py2.6.egg']
     94 
     95 
     96 if __name__ == '__main__':
     97     test_virtualenv()
     98     test_full()
     99