diff options
author | Steve Dower <steve.dower@python.org> | 2022-03-30 21:18:40 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-03-30 21:18:40 (GMT) |
commit | f3d5715492195fd2532fc1a5d73be07923cdf2e1 (patch) | |
tree | ee785d1495ed52e6b103f2d30bc3e009b180be67 | |
parent | 2ab609dd614045f3b112ede0b0883339de784f2a (diff) | |
download | cpython-f3d5715492195fd2532fc1a5d73be07923cdf2e1.zip cpython-f3d5715492195fd2532fc1a5d73be07923cdf2e1.tar.gz cpython-f3d5715492195fd2532fc1a5d73be07923cdf2e1.tar.bz2 |
bpo-46566: Make test_launcher more robust to a variety of installs (GH-32204)
-rw-r--r-- | Lib/test/test_launcher.py | 38 |
1 files changed, 32 insertions, 6 deletions
diff --git a/Lib/test/test_launcher.py b/Lib/test/test_launcher.py index 2fb5aae..52b1cfa 100644 --- a/Lib/test/test_launcher.py +++ b/Lib/test/test_launcher.py @@ -151,6 +151,30 @@ class RunPyMixin: 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 @@ class RunPyMixin: 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 @@ class TestLauncher(unittest.TestCase, RunPyMixin): 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 @@ class TestLauncher(unittest.TestCase, RunPyMixin): 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 @@ class TestLauncher(unittest.TestCase, RunPyMixin): 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 @@ class TestLauncher(unittest.TestCase, RunPyMixin): # 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) |