12
12
from pre_commit .prefix import Prefix
13
13
from pre_commit .util import make_executable
14
14
from pre_commit .util import win_exe
15
+ from testing .auto_namedtuple import auto_namedtuple
15
16
from testing .language_helpers import run_language
16
17
17
18
@@ -34,6 +35,72 @@ def test_read_pyvenv_cfg_non_utf8(tmpdir):
34
35
assert python ._read_pyvenv_cfg (pyvenv_cfg ) == expected
35
36
36
37
38
+ def _get_default_version (
39
+ * ,
40
+ impl : str ,
41
+ exe : str ,
42
+ found : set [str ],
43
+ version : tuple [int , int ],
44
+ ) -> str :
45
+ sys_exe = f'/fake/path/{ exe } '
46
+ sys_impl = auto_namedtuple (name = impl )
47
+ sys_ver = auto_namedtuple (major = version [0 ], minor = version [1 ])
48
+
49
+ def find_exe (s ):
50
+ if s in found :
51
+ return f'/fake/path/found/{ exe } '
52
+ else :
53
+ return None
54
+
55
+ with (
56
+ mock .patch .object (sys , 'implementation' , sys_impl ),
57
+ mock .patch .object (sys , 'executable' , sys_exe ),
58
+ mock .patch .object (sys , 'version_info' , sys_ver ),
59
+ mock .patch .object (python , 'find_executable' , find_exe ),
60
+ ):
61
+ return python .get_default_version .__wrapped__ ()
62
+
63
+
64
+ def test_default_version_sys_executable_found ():
65
+ ret = _get_default_version (
66
+ impl = 'cpython' ,
67
+ exe = 'python3.12' ,
68
+ found = {'python3.12' },
69
+ version = (3 , 12 ),
70
+ )
71
+ assert ret == 'python3.12'
72
+
73
+
74
+ def test_default_version_picks_specific_when_found ():
75
+ ret = _get_default_version (
76
+ impl = 'cpython' ,
77
+ exe = 'python3' ,
78
+ found = {'python3' , 'python3.12' },
79
+ version = (3 , 12 ),
80
+ )
81
+ assert ret == 'python3.12'
82
+
83
+
84
+ def test_default_version_picks_pypy_versioned_exe ():
85
+ ret = _get_default_version (
86
+ impl = 'pypy' ,
87
+ exe = 'python' ,
88
+ found = {'pypy3.12' , 'python3' },
89
+ version = (3 , 12 ),
90
+ )
91
+ assert ret == 'pypy3.12'
92
+
93
+
94
+ def test_default_version_picks_pypy_unversioned_exe ():
95
+ ret = _get_default_version (
96
+ impl = 'pypy' ,
97
+ exe = 'python' ,
98
+ found = {'pypy3' , 'python3' },
99
+ version = (3 , 12 ),
100
+ )
101
+ assert ret == 'pypy3'
102
+
103
+
37
104
def test_norm_version_expanduser ():
38
105
home = os .path .expanduser ('~' )
39
106
if sys .platform == 'win32' : # pragma: win32 cover
0 commit comments