| Index: bootstrap/virtualenv/tests/test_virtualenv.py
|
| diff --git a/bootstrap/virtualenv/tests/test_virtualenv.py b/bootstrap/virtualenv/tests/test_virtualenv.py
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..10c1136b8c72f9ab77fce486c890470236670788
|
| --- /dev/null
|
| +++ b/bootstrap/virtualenv/tests/test_virtualenv.py
|
| @@ -0,0 +1,139 @@
|
| +import virtualenv
|
| +import optparse
|
| +import os
|
| +import shutil
|
| +import sys
|
| +import tempfile
|
| +from mock import patch, Mock
|
| +
|
| +
|
| +def test_version():
|
| + """Should have a version string"""
|
| + assert virtualenv.virtualenv_version, "Should have version"
|
| +
|
| +
|
| +@patch('os.path.exists')
|
| +def test_resolve_interpreter_with_absolute_path(mock_exists):
|
| + """Should return absolute path if given and exists"""
|
| + mock_exists.return_value = True
|
| + virtualenv.is_executable = Mock(return_value=True)
|
| +
|
| + exe = virtualenv.resolve_interpreter("/usr/bin/python42")
|
| +
|
| + assert exe == "/usr/bin/python42", "Absolute path should return as is"
|
| + mock_exists.assert_called_with("/usr/bin/python42")
|
| + virtualenv.is_executable.assert_called_with("/usr/bin/python42")
|
| +
|
| +
|
| +@patch('os.path.exists')
|
| +def test_resolve_interpreter_with_nonexistent_interpreter(mock_exists):
|
| + """Should exit when with absolute path if not exists"""
|
| + mock_exists.return_value = False
|
| +
|
| + try:
|
| + virtualenv.resolve_interpreter("/usr/bin/python42")
|
| + assert False, "Should raise exception"
|
| + except SystemExit:
|
| + pass
|
| +
|
| + mock_exists.assert_called_with("/usr/bin/python42")
|
| +
|
| +
|
| +@patch('os.path.exists')
|
| +def test_resolve_interpreter_with_invalid_interpreter(mock_exists):
|
| + """Should exit when with absolute path if not exists"""
|
| + mock_exists.return_value = True
|
| + virtualenv.is_executable = Mock(return_value=False)
|
| +
|
| + try:
|
| + virtualenv.resolve_interpreter("/usr/bin/python42")
|
| + assert False, "Should raise exception"
|
| + except SystemExit:
|
| + pass
|
| +
|
| + mock_exists.assert_called_with("/usr/bin/python42")
|
| + virtualenv.is_executable.assert_called_with("/usr/bin/python42")
|
| +
|
| +
|
| +def test_activate_after_future_statements():
|
| + """Should insert activation line after last future statement"""
|
| + script = [
|
| + '#!/usr/bin/env python',
|
| + 'from __future__ import with_statement',
|
| + 'from __future__ import print_function',
|
| + 'print("Hello, world!")'
|
| + ]
|
| + assert virtualenv.relative_script(script) == [
|
| + '#!/usr/bin/env python',
|
| + 'from __future__ import with_statement',
|
| + 'from __future__ import print_function',
|
| + '',
|
| + "import os; activate_this=os.path.join(os.path.dirname(os.path.realpath(__file__)), 'activate_this.py'); exec(compile(open(activate_this).read(), activate_this, 'exec'), dict(__file__=activate_this)); del os, activate_this",
|
| + '',
|
| + 'print("Hello, world!")'
|
| + ]
|
| +
|
| +
|
| +def test_cop_update_defaults_with_store_false():
|
| + """store_false options need reverted logic"""
|
| + class MyConfigOptionParser(virtualenv.ConfigOptionParser):
|
| + def __init__(self, *args, **kwargs):
|
| + self.config = virtualenv.ConfigParser.RawConfigParser()
|
| + self.files = []
|
| + optparse.OptionParser.__init__(self, *args, **kwargs)
|
| +
|
| + def get_environ_vars(self, prefix='VIRTUALENV_'):
|
| + yield ("no_site_packages", "1")
|
| +
|
| + cop = MyConfigOptionParser()
|
| + cop.add_option(
|
| + '--no-site-packages',
|
| + dest='system_site_packages',
|
| + action='store_false',
|
| + help="Don't give access to the global site-packages dir to the "
|
| + "virtual environment (default)")
|
| +
|
| + defaults = {}
|
| + cop.update_defaults(defaults)
|
| + assert defaults == {'system_site_packages': 0}
|
| +
|
| +def test_install_python_bin():
|
| + """Should create the right python executables and links"""
|
| + tmp_virtualenv = tempfile.mkdtemp()
|
| + try:
|
| + home_dir, lib_dir, inc_dir, bin_dir = \
|
| + virtualenv.path_locations(tmp_virtualenv)
|
| + virtualenv.install_python(home_dir, lib_dir, inc_dir, bin_dir, False,
|
| + False)
|
| +
|
| + if virtualenv.is_win:
|
| + required_executables = [ 'python.exe', 'pythonw.exe']
|
| + else:
|
| + py_exe_no_version = 'python'
|
| + py_exe_version_major = 'python%s' % sys.version_info[0]
|
| + py_exe_version_major_minor = 'python%s.%s' % (
|
| + sys.version_info[0], sys.version_info[1])
|
| + required_executables = [ py_exe_no_version, py_exe_version_major,
|
| + py_exe_version_major_minor ]
|
| +
|
| + for pth in required_executables:
|
| + assert os.path.exists(os.path.join(bin_dir, pth)), ("%s should "
|
| + "exist in bin_dir" % pth)
|
| + finally:
|
| + shutil.rmtree(tmp_virtualenv)
|
| +
|
| +
|
| +def test_always_copy_option():
|
| + """Should be no symlinks in directory tree"""
|
| + tmp_virtualenv = tempfile.mkdtemp()
|
| + ve_path = os.path.join(tmp_virtualenv, 'venv')
|
| + try:
|
| + virtualenv.create_environment(ve_path, symlink=False)
|
| +
|
| + for root, dirs, files in os.walk(tmp_virtualenv):
|
| + for f in files + dirs:
|
| + full_name = os.path.join(root, f)
|
| + assert not os.path.islink(full_name), "%s should not be a" \
|
| + " symlink (to %s)" % (full_name, os.readlink(full_name))
|
| + finally:
|
| + shutil.rmtree(tmp_virtualenv)
|
|
|