Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache.
Use this feature to fix test_normalization.
diff --git a/Lib/test/test_normalization.py b/Lib/test/test_normalization.py
index f9f4f68..2c49720 100644
--- a/Lib/test/test_normalization.py
+++ b/Lib/test/test_normalization.py
@@ -6,15 +6,12 @@
import os
from unicodedata import normalize, unidata_version
-TESTDATAFILE = "NormalizationTest" + os.extsep + "txt"
+TESTDATAFILE = "NormalizationTest.txt"
TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE
-if os.path.exists(TESTDATAFILE):
- f = open(TESTDATAFILE)
- l = f.readline()
- f.close()
- if not unidata_version in l:
- os.unlink(TESTDATAFILE)
+def check_version(testfile):
+ hdr = testfile.readline()
+ return unidata_version in hdr
class RangeError(Exception):
pass
@@ -40,13 +37,14 @@
class NormalizationTest(unittest.TestCase):
def test_main(self):
+ part = None
part1_data = {}
# Hit the exception early
try:
- open_urlresource(TESTDATAURL)
+ testdata = open_urlresource(TESTDATAURL, check_version)
except (IOError, HTTPException):
self.skipTest("Could not retrieve " + TESTDATAURL)
- for line in open_urlresource(TESTDATAURL):
+ for line in testdata:
if '#' in line:
line = line.split('#')[0]
line = line.strip()
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index a8f9fbf7..9bb4329 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -32,6 +32,7 @@
"threading_cleanup", "reap_children", "cpython_only",
"check_impl_detail", "get_attribute", "py3k_bytes"]
+
class Error(Exception):
"""Base class for regression test exceptions."""
@@ -463,15 +464,30 @@
testcase.assertRaises(SyntaxError, compile, statement,
'<test string>', 'exec')
-def open_urlresource(url):
+def open_urlresource(url, check=None):
import urlparse, urllib2
- requires('urlfetch')
filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
fn = os.path.join(os.path.dirname(__file__), "data", filename)
+
+ def check_valid_file(fn):
+ f = open(fn)
+ if check is None:
+ return f
+ elif check(f):
+ f.seek(0)
+ return f
+ f.close()
+
if os.path.exists(fn):
- return open(fn)
+ f = check_valid_file(fn)
+ if f is not None:
+ return f
+ unlink(fn)
+
+ # Verify the requirement before downloading the file
+ requires('urlfetch')
print >> get_original_stdout(), '\tfetching %s ...' % url
f = urllib2.urlopen(url, timeout=15)
@@ -483,7 +499,11 @@
s = f.read()
finally:
f.close()
- return open(fn)
+
+ f = check_valid_file(fn)
+ if f is not None:
+ return f
+ raise TestFailed('invalid resource "%s"' % fn)
class WarningsRecorder(object):
diff --git a/Misc/NEWS b/Misc/NEWS
index 7430d43..a6fe33a 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -76,6 +76,12 @@
- Issue #7705: Fix linking on FreeBSD.
+Tests
+-----
+
+- Issue #7783: test.test_support.open_urlresource invalidates the outdated
+ files from the local cache.
+
What's New in Python 2.7 alpha 4?
=================================