[Python-checkins] bpo-46566: Make test_launcher more robust to a variety of installs (GH-32204)
zooba
webhook-mailer at python.org
Wed Mar 30 17:18:48 EDT 2022
https://github.com/python/cpython/commit/f3d5715492195fd2532fc1a5d73be07923cdf2e1
commit: f3d5715492195fd2532fc1a5d73be07923cdf2e1
branch: main
author: Steve Dower <steve.dower at python.org>
committer: zooba <steve.dower at microsoft.com>
date: 2022-03-30T22:18:40+01:00
summary:
bpo-46566: Make test_launcher more robust to a variety of installs (GH-32204)
files:
M Lib/test/test_launcher.py
diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py
index 2fb5aae628a67..52b1cfa212b88 100644
--- a/Lib/test/test_launcher.py
+++ b/Lib/test/test_launcher.py
@@ -151,6 +151,30 @@ def find_py(cls):
py_exe = Path(p) / PY_EXE
if py_exe.is_file():
break
+ else:
+ py_exe = None
+
+ # Test launch and check version, to exclude installs of older
+ # releases when running outside of a source tree
+ if py_exe:
+ try:
+ with subprocess.Popen(
+ [py_exe, "-h"],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE,
+ encoding="ascii",
+ errors="ignore",
+ ) as p:
+ p.stdin.close()
+ version = next(p.stdout).splitlines()[0].rpartition(" ")[2]
+ p.stdout.read()
+ p.wait(10)
+ if not sys.version.startswith(version):
+ py_exe = None
+ except OSError:
+ py_exe = None
+
if not py_exe:
raise unittest.SkipTest(
"cannot locate '{}' for test".format(PY_EXE)
@@ -162,6 +186,7 @@ def run_py(self, args, env=None, allow_fail=False, expect_returncode=0):
self.py_exe = self.find_py()
env = {**os.environ, **(env or {}), "PYLAUNCHER_DEBUG": "1", "PYLAUNCHER_DRYRUN": "1"}
+ env.pop("VIRTUAL_ENV", None)
with subprocess.Popen(
[self.py_exe, *args],
env=env,
@@ -216,7 +241,7 @@ def setUpClass(cls):
if support.verbose:
p = subprocess.check_output("reg query HKCU\\Software\\Python /s")
- print(p.decode('mbcs'))
+ #print(p.decode('mbcs'))
@classmethod
@@ -251,9 +276,9 @@ def test_list(self):
found = {}
expect = {}
for line in data["stdout"].splitlines():
- m = re.match(r"\s*(.+?)\s+(.+)$", line)
+ m = re.match(r"\s*(.+?)\s+?(\*\s+)?(.+)$", line)
if m:
- found[m.group(1)] = m.group(2)
+ found[m.group(1)] = m.group(3)
for company in TEST_DATA:
company_data = TEST_DATA[company]
tags = [t for t in company_data if isinstance(company_data[t], dict)]
@@ -276,9 +301,9 @@ def test_list_paths(self):
found = {}
expect = {}
for line in data["stdout"].splitlines():
- m = re.match(r"\s*(.+?)\s+(.+)$", line)
+ m = re.match(r"\s*(.+?)\s+?(\*\s+)?(.+)$", line)
if m:
- found[m.group(1)] = m.group(2)
+ found[m.group(1)] = m.group(3)
for company in TEST_DATA:
company_data = TEST_DATA[company]
tags = [t for t in company_data if isinstance(company_data[t], dict)]
@@ -415,9 +440,10 @@ def test_install(self):
# If winget is runnable, we should find it. Otherwise, we'll be trying
# to open the Store.
try:
- subprocess.check_call(["winget.exe", "--version"])
+ subprocess.check_call(["winget.exe", "--version"], stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
except FileNotFoundError:
self.assertIn("ms-windows-store://", cmd)
else:
self.assertIn("winget.exe", cmd)
+ # Both command lines include the store ID
self.assertIn("9PJPW5LDXLZ5", cmd)
More information about the Python-checkins
mailing list