summaryrefslogtreecommitdiff
path: root/tests/test_interpreters.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_interpreters.py')
-rw-r--r--tests/test_interpreters.py95
1 files changed, 95 insertions, 0 deletions
diff --git a/tests/test_interpreters.py b/tests/test_interpreters.py
new file mode 100644
index 0000000..97cd3f0
--- /dev/null
+++ b/tests/test_interpreters.py
@@ -0,0 +1,95 @@
+import sys
+import os
+
+import pytest
+from tox.interpreters import *
+
+@pytest.fixture
+def interpreters():
+ return Interpreters()
+
+@pytest.mark.skipif("sys.platform != 'win32'")
+def test_locate_via_py(monkeypatch):
+ from tox._venv import locate_via_py
+ class PseudoPy:
+ def sysexec(self, *args):
+ assert args[0] == '-3.2'
+ assert args[1] == '-c'
+ # Return value needs to actually exist!
+ return sys.executable
+ @staticmethod
+ def ret_pseudopy(name):
+ assert name == 'py'
+ return PseudoPy()
+ # Monkeypatch py.path.local.sysfind to return PseudoPy
+ monkeypatch.setattr(py.path.local, 'sysfind', ret_pseudopy)
+ assert locate_via_py('3', '2') == sys.executable
+
+def test_find_executable():
+ p = find_executable(sys.executable)
+ assert p == py.path.local(sys.executable)
+ for ver in [""] + "2.4 2.5 2.6 2.7 3.0 3.1 3.2 3.3".split():
+ name = "python%s" % ver
+ if sys.platform == "win32":
+ pydir = "python%s" % ver.replace(".", "")
+ x = py.path.local("c:\%s" % pydir)
+ print (x)
+ if not x.check():
+ continue
+ else:
+ if not py.path.local.sysfind(name):
+ continue
+ p = find_executable(name)
+ assert p
+ popen = py.std.subprocess.Popen([str(p), '-V'],
+ stderr=py.std.subprocess.PIPE)
+ stdout, stderr = popen.communicate()
+ assert ver in py.builtin._totext(stderr, "ascii")
+
+def test_find_executable_extra(monkeypatch):
+ @staticmethod
+ def sysfind(x):
+ return "hello"
+ monkeypatch.setattr(py.path.local, "sysfind", sysfind)
+ t = find_executable("qweqwe")
+ assert t == "hello"
+
+def test_run_and_get_interpreter_info():
+ name = os.path.basename(sys.executable)
+ info = run_and_get_interpreter_info(name, sys.executable)
+ assert info.version_info == tuple(sys.version_info)
+ assert info.name == name
+ assert info.executable == sys.executable
+
+class TestInterpreters:
+
+ def test_get_info_self_exceptions(self, interpreters):
+ pytest.raises(ValueError, lambda:
+ interpreters.get_info())
+ pytest.raises(ValueError, lambda:
+ interpreters.get_info(name="12", executable="123"))
+
+ def test_get_executable(self, interpreters):
+ x = interpreters.get_executable(sys.executable)
+ assert x == sys.executable
+ assert not interpreters.get_executable("12l3k1j23")
+
+ def test_get_info__name(self, interpreters):
+ basename = os.path.basename(sys.executable)
+ info = interpreters.get_info(basename)
+ assert info.version_info == tuple(sys.version_info)
+ assert info.name == basename
+ assert info.executable == sys.executable
+ assert info.runnable
+
+ def test_get_info__name_not_exists(self, interpreters):
+ info = interpreters.get_info("qlwkejqwe")
+ assert not info.version_info
+ assert info.name == "qlwkejqwe"
+ assert not info.executable
+ assert not info.runnable
+
+ def test_get_sitepackagesdir_error(self, interpreters):
+ info = interpreters.get_info(sys.executable)
+ s = interpreters.get_sitepackagesdir(info, "")
+ assert s