1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
|
import sys
import os
import pytest
from tox.interpreters import * # noqa
from tox.config import get_plugin_manager
@pytest.fixture
def interpreters():
pm = get_plugin_manager()
return Interpreters(hook=pm.hook)
@pytest.mark.skipif("sys.platform != 'win32'")
def test_locate_via_py(monkeypatch):
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_tox_get_python_executable():
class envconfig:
basepython = sys.executable
envname = "pyxx"
p = tox_get_python_executable(envconfig)
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
envconfig.basepython = name
p = tox_get_python_executable(envconfig)
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)
class envconfig:
basepython = "1lk23j"
envname = "pyxx"
t = tox_get_python_executable(envconfig)
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_executable(self, interpreters):
class envconfig:
basepython = sys.executable
envname = "pyxx"
x = interpreters.get_executable(envconfig)
assert x == sys.executable
info = interpreters.get_info(envconfig)
assert info.version_info == tuple(sys.version_info)
assert info.executable == sys.executable
assert info.runnable
def test_get_executable_no_exist(self, interpreters):
class envconfig:
basepython = "1lkj23"
envname = "pyxx"
assert not interpreters.get_executable(envconfig)
info = interpreters.get_info(envconfig)
assert not info.version_info
assert info.name == "1lkj23"
assert not info.executable
assert not info.runnable
def test_get_sitepackagesdir_error(self, interpreters):
class envconfig:
basepython = sys.executable
envname = "123"
info = interpreters.get_info(envconfig)
s = interpreters.get_sitepackagesdir(info, "")
assert s
|