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 113 114 115 116 117 118 119 120 121 122 123
|
from __future__ import annotations
import sys
import textwrap
import pytest
@pytest.mark.skipif(sys.platform != "win32", reason="no Windows registry")
@pytest.mark.usefixtures("_mock_registry")
def test_pep514():
from virtualenv.discovery.windows.pep514 import discover_pythons # noqa: PLC0415
interpreters = list(discover_pythons())
assert interpreters == [
("ContinuumAnalytics", 3, 10, 32, False, "C:\\Users\\user\\Miniconda3\\python.exe", None),
("ContinuumAnalytics", 3, 10, 64, False, "C:\\Users\\user\\Miniconda3-64\\python.exe", None),
(
"PythonCore",
3,
9,
64,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe",
None,
),
(
"PythonCore",
3,
9,
64,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe",
None,
),
(
"PythonCore",
3,
8,
64,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python38\\python.exe",
None,
),
(
"PythonCore",
3,
9,
64,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe",
None,
),
(
"PythonCore",
3,
10,
32,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python310-32\\python.exe",
None,
),
(
"PythonCore",
3,
12,
64,
False,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python312\\python.exe",
None,
),
(
"PythonCore",
3,
13,
64,
True,
"C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python313\\python3.13t.exe",
None,
),
("CompanyA", 3, 6, 64, False, "Z:\\CompanyA\\Python\\3.6\\python.exe", None),
("PythonCore", 2, 7, 64, False, "C:\\Python27\\python.exe", None),
("PythonCore", 3, 7, 64, False, "C:\\Python37\\python.exe", None),
]
@pytest.mark.skipif(sys.platform != "win32", reason="no Windows registry")
@pytest.mark.usefixtures("_mock_registry")
def test_pep514_run(capsys, caplog):
from virtualenv.discovery.windows import pep514 # noqa: PLC0415
pep514._run() # noqa: SLF001
out, err = capsys.readouterr()
expected = textwrap.dedent(
r"""
('CompanyA', 3, 6, 64, False, 'Z:\\CompanyA\\Python\\3.6\\python.exe', None)
('ContinuumAnalytics', 3, 10, 32, False, 'C:\\Users\\user\\Miniconda3\\python.exe', None)
('ContinuumAnalytics', 3, 10, 64, False, 'C:\\Users\\user\\Miniconda3-64\\python.exe', None)
('PythonCore', 2, 7, 64, False, 'C:\\Python27\\python.exe', None)
('PythonCore', 3, 10, 32, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python310-32\\python.exe', None)
('PythonCore', 3, 12, 64, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python312\\python.exe', None)
('PythonCore', 3, 13, 64, True, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python313\\python3.13t.exe', None)
('PythonCore', 3, 7, 64, False, 'C:\\Python37\\python.exe', None)
('PythonCore', 3, 8, 64, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python38\\python.exe', None)
('PythonCore', 3, 9, 64, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe', None)
('PythonCore', 3, 9, 64, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe', None)
('PythonCore', 3, 9, 64, False, 'C:\\Users\\user\\AppData\\Local\\Programs\\Python\\Python39\\python.exe', None)
""", # noqa: E501
).strip()
assert out.strip() == expected
assert not err
prefix = "PEP-514 violation in Windows Registry at "
expected_logs = [
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.1/SysArchitecture error: invalid format magic",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.2/SysArchitecture error: arch is not string: 100",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.3 error: no ExecutablePath or default for it",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.3 error: could not load exe with value None",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.11/InstallPath error: missing",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.12/SysVersion error: invalid format magic",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.X/SysVersion error: version is not string: 2778",
f"{prefix}HKEY_CURRENT_USER/PythonCore/3.X error: invalid format 3.X",
]
assert caplog.messages == expected_logs
|