Commit 1ab724f0 authored by Nick Coghlan's avatar Nick Coghlan

Close #18952: correctly download test support data

When test.support was converted to a package, it started silently
skipping the tests which needed to download support data to run.

This change refactors the affected code, and also tidies up
test.support.findfile to remove the unused *here* parameter, document
the *subdir* parameter and rename the *filename* parameter to avoid
shadowing the file builtin and be consistent with the documentation.

The unexpected skips were noticed and reported by Zachary Ware
parent 4e572496
...@@ -263,12 +263,15 @@ The :mod:`test.support` module defines the following functions: ...@@ -263,12 +263,15 @@ The :mod:`test.support` module defines the following functions:
Used when tests are executed by :mod:`test.regrtest`. Used when tests are executed by :mod:`test.regrtest`.
.. function:: findfile(filename) .. function:: findfile(filename, subdir=None)
Return the path to the file named *filename*. If no match is found Return the path to the file named *filename*. If no match is found
*filename* is returned. This does not equal a failure since it could be the *filename* is returned. This does not equal a failure since it could be the
path to the file. path to the file.
Setting *subdir* indicates a relative path to use to find the file
rather than looking directly in the path directories.
.. function:: run_unittest(\*classes) .. function:: run_unittest(\*classes)
......
...@@ -853,24 +853,31 @@ if hasattr(os, "umask"): ...@@ -853,24 +853,31 @@ if hasattr(os, "umask"):
finally: finally:
os.umask(oldmask) os.umask(oldmask)
# TEST_HOME refers to the top level directory of the "test" package # TEST_HOME_DIR refers to the top level directory of the "test" package
# that contains Python's regression test suite # that contains Python's regression test suite
TEST_HOME = os.path.dirname(os.path.abspath(__file__)) TEST_SUPPORT_DIR = os.path.dirname(os.path.abspath(__file__))
TEST_HOME_DIR = os.path.dirname(TEST_SUPPORT_DIR)
def findfile(file, here=TEST_HOME, subdir=None): # TEST_DATA_DIR is used as a target download location for remote resources
TEST_DATA_DIR = os.path.join(TEST_HOME_DIR, "data")
def findfile(filename, subdir=None):
"""Try to find a file on sys.path or in the test directory. If it is not """Try to find a file on sys.path or in the test directory. If it is not
found the argument passed to the function is returned (this does not found the argument passed to the function is returned (this does not
necessarily signal failure; could still be the legitimate path).""" necessarily signal failure; could still be the legitimate path).
if os.path.isabs(file):
return file Setting *subdir* indicates a relative path to use to find the file
rather than looking directly in the path directories.
"""
if os.path.isabs(filename):
return filename
if subdir is not None: if subdir is not None:
file = os.path.join(subdir, file) filename = os.path.join(subdir, filename)
path = sys.path path = [TEST_HOME_DIR] + sys.path
path = [os.path.dirname(here)] + path
for dn in path: for dn in path:
fn = os.path.join(dn, file) fn = os.path.join(dn, filename)
if os.path.exists(fn): return fn if os.path.exists(fn): return fn
return file return filename
def create_empty_file(filename): def create_empty_file(filename):
"""Create an empty file. If the file already exists, truncate it.""" """Create an empty file. If the file already exists, truncate it."""
...@@ -907,7 +914,7 @@ def open_urlresource(url, *args, **kw): ...@@ -907,7 +914,7 @@ def open_urlresource(url, *args, **kw):
filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL! filename = urllib.parse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
fn = os.path.join(os.path.dirname(__file__), "data", filename) fn = os.path.join(TEST_DATA_DIR, filename)
def check_valid_file(fn): def check_valid_file(fn):
f = open(fn, *args, **kw) f = open(fn, *args, **kw)
......
...@@ -332,6 +332,10 @@ IDLE ...@@ -332,6 +332,10 @@ IDLE
Tests Tests
----- -----
- Issue #18952: Fix regression in support data downloads introduced when
test.support was converted to a package. Regression noticed by Zachary
Ware.
- Issue #12037: Fix test_email for desktop Windows. - Issue #12037: Fix test_email for desktop Windows.
- Issue #15507: test_subprocess's test_send_signal could fail if the test - Issue #15507: test_subprocess's test_send_signal could fail if the test
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment