summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Coghlan <ncoghlan@gmail.com>2013-09-08 01:40:34 (GMT)
committerNick Coghlan <ncoghlan@gmail.com>2013-09-08 01:40:34 (GMT)
commit0494c2ae7f6a347590d66bb4fe7980dc0dc9ccda (patch)
tree68a893905963131f681077d768c51800f4518744
parent21101f7038331984eee88fb6f876a3c6e2c3dfbb (diff)
downloadcpython-0494c2ae7f6a347590d66bb4fe7980dc0dc9ccda.zip
cpython-0494c2ae7f6a347590d66bb4fe7980dc0dc9ccda.tar.gz
cpython-0494c2ae7f6a347590d66bb4fe7980dc0dc9ccda.tar.bz2
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
-rw-r--r--Doc/library/test.rst5
-rw-r--r--Lib/test/support/__init__.py31
-rw-r--r--Misc/NEWS4
3 files changed, 27 insertions, 13 deletions
diff --git a/Doc/library/test.rst b/Doc/library/test.rst
index bce0f64..c1270f4 100644
--- a/Doc/library/test.rst
+++ b/Doc/library/test.rst
@@ -263,12 +263,15 @@ The :mod:`test.support` module defines the following functions:
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
*filename* is returned. This does not equal a failure since it could be the
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)
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 956fe98..dbd7846 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -853,24 +853,31 @@ if hasattr(os, "umask"):
finally:
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
-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
found the argument passed to the function is returned (this does not
- necessarily signal failure; could still be the legitimate path)."""
- if os.path.isabs(file):
- return file
+ necessarily signal failure; could still be the legitimate path).
+
+ 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:
- file = os.path.join(subdir, file)
- path = sys.path
- path = [os.path.dirname(here)] + path
+ filename = os.path.join(subdir, filename)
+ path = [TEST_HOME_DIR] + sys.path
for dn in path:
- fn = os.path.join(dn, file)
+ fn = os.path.join(dn, filename)
if os.path.exists(fn): return fn
- return file
+ return filename
def create_empty_file(filename):
"""Create an empty file. If the file already exists, truncate it."""
@@ -907,7 +914,7 @@ def open_urlresource(url, *args, **kw):
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):
f = open(fn, *args, **kw)
diff --git a/Misc/NEWS b/Misc/NEWS
index 1c0f3b2..ed5f6cd 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -332,6 +332,10 @@ IDLE
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 #15507: test_subprocess's test_send_signal could fail if the test