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) |