Kaydet (Commit) 3cc8f211 authored tarafından Florent Xicluna's avatar Florent Xicluna

Issue #7783 and #7787: open_urlresource invalidates the outdated files from the local cache.

Use this feature to fix test_normalization.
üst fae23dc9
...@@ -6,15 +6,12 @@ import sys ...@@ -6,15 +6,12 @@ import sys
import os import os
from unicodedata import normalize, unidata_version from unicodedata import normalize, unidata_version
TESTDATAFILE = "NormalizationTest" + os.extsep + "txt" TESTDATAFILE = "NormalizationTest.txt"
TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE TESTDATAURL = "http://www.unicode.org/Public/" + unidata_version + "/ucd/" + TESTDATAFILE
if os.path.exists(TESTDATAFILE): def check_version(testfile):
f = open(TESTDATAFILE) hdr = testfile.readline()
l = f.readline() return unidata_version in hdr
f.close()
if not unidata_version in l:
os.unlink(TESTDATAFILE)
class RangeError(Exception): class RangeError(Exception):
pass pass
...@@ -40,13 +37,14 @@ def unistr(data): ...@@ -40,13 +37,14 @@ def unistr(data):
class NormalizationTest(unittest.TestCase): class NormalizationTest(unittest.TestCase):
def test_main(self): def test_main(self):
part = None
part1_data = {} part1_data = {}
# Hit the exception early # Hit the exception early
try: try:
open_urlresource(TESTDATAURL) testdata = open_urlresource(TESTDATAURL, check_version)
except (IOError, HTTPException): except (IOError, HTTPException):
self.skipTest("Could not retrieve " + TESTDATAURL) self.skipTest("Could not retrieve " + TESTDATAURL)
for line in open_urlresource(TESTDATAURL): for line in testdata:
if '#' in line: if '#' in line:
line = line.split('#')[0] line = line.split('#')[0]
line = line.strip() line = line.strip()
......
...@@ -32,6 +32,7 @@ __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module", ...@@ -32,6 +32,7 @@ __all__ = ["Error", "TestFailed", "ResourceDenied", "import_module",
"threading_cleanup", "reap_children", "cpython_only", "threading_cleanup", "reap_children", "cpython_only",
"check_impl_detail", "get_attribute", "py3k_bytes"] "check_impl_detail", "get_attribute", "py3k_bytes"]
class Error(Exception): class Error(Exception):
"""Base class for regression test exceptions.""" """Base class for regression test exceptions."""
...@@ -463,15 +464,30 @@ def check_syntax_error(testcase, statement): ...@@ -463,15 +464,30 @@ def check_syntax_error(testcase, statement):
testcase.assertRaises(SyntaxError, compile, statement, testcase.assertRaises(SyntaxError, compile, statement,
'<test string>', 'exec') '<test string>', 'exec')
def open_urlresource(url): def open_urlresource(url, check=None):
import urlparse, urllib2 import urlparse, urllib2
requires('urlfetch')
filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL! filename = urlparse.urlparse(url)[2].split('/')[-1] # '/': it's URL!
fn = os.path.join(os.path.dirname(__file__), "data", filename) 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): 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 print >> get_original_stdout(), '\tfetching %s ...' % url
f = urllib2.urlopen(url, timeout=15) f = urllib2.urlopen(url, timeout=15)
...@@ -483,7 +499,11 @@ def open_urlresource(url): ...@@ -483,7 +499,11 @@ def open_urlresource(url):
s = f.read() s = f.read()
finally: finally:
f.close() 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): class WarningsRecorder(object):
......
...@@ -76,6 +76,12 @@ Build ...@@ -76,6 +76,12 @@ Build
- Issue #7705: Fix linking on FreeBSD. - 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? What's New in Python 2.7 alpha 4?
================================= =================================
......
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