Skip to content
Draft
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
gh-74902: Avoid hitting unicode.org for test data (GH-144195)
Use our own pythontest.net instead.
  • Loading branch information
zware authored and StanFromIreland committed Apr 8, 2026
commit 9efe82503dd46862e2d60e17a605edd960343d64
56 changes: 23 additions & 33 deletions Lib/test/test_unicodedata.py
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,26 @@ def iterallchars():
maxunicode = 0xffff if quicktest else sys.maxunicode
return map(chr, range(maxunicode + 1))


def check_version(testfile):
hdr = testfile.readline()
return unicodedata.unidata_version in hdr


def download_test_data_file(filename):
TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{filename}"

try:
return open_urlresource(TESTDATAURL, encoding="utf-8", check=check_version)
except PermissionError:
raise unittest.SkipTest(
f"Permission error when downloading {TESTDATAURL} "
f"into the test data directory"
)
except (OSError, HTTPException) as exc:
raise unittest.SkipTest(f"Failed to download {TESTDATAURL}: {exc}")


class UnicodeMethodsTest(unittest.TestCase):

# update this, if the database changes
Expand Down Expand Up @@ -979,11 +999,6 @@ def test_segment_object(self):


class NormalizationTest(unittest.TestCase):
@staticmethod
def check_version(testfile):
hdr = testfile.readline()
return unicodedata.unidata_version in hdr

@staticmethod
def unistr(data):
data = [int(x, 16) for x in data.split(" ")]
Expand All @@ -993,17 +1008,7 @@ def unistr(data):
@requires_resource('cpu')
def test_normalization(self):
TESTDATAFILE = "NormalizationTest.txt"
TESTDATAURL = f"http://www.pythontest.net/unicode/{unicodedata.unidata_version}/{TESTDATAFILE}"

# Hit the exception early
try:
testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
check=self.check_version)
except PermissionError:
self.skipTest(f"Permission error when downloading {TESTDATAURL} "
f"into the test data directory")
except (OSError, HTTPException) as exc:
self.skipTest(f"Failed to download {TESTDATAURL}: {exc}")
testdata = download_test_data_file(TESTDATAFILE)

with testdata:
self.run_normalization_tests(testdata, unicodedata)
Expand Down Expand Up @@ -1100,25 +1105,10 @@ class MyStr(str):


class GraphemeBreakTest(unittest.TestCase):
@staticmethod
def check_version(testfile):
hdr = testfile.readline()
return unicodedata.unidata_version in hdr

@requires_resource('network')
def test_grapheme_break(self):
TESTDATAFILE = "auxiliary/GraphemeBreakTest.txt"
TESTDATAURL = f"https://www.unicode.org/Public/{unicodedata.unidata_version}/ucd/{TESTDATAFILE}"

# Hit the exception early
try:
testdata = open_urlresource(TESTDATAURL, encoding="utf-8",
check=self.check_version)
except PermissionError:
self.skipTest(f"Permission error when downloading {TESTDATAURL} "
f"into the test data directory")
except (OSError, HTTPException) as exc:
self.skipTest(f"Failed to download {TESTDATAURL}: {exc}")
TESTDATAFILE = "GraphemeBreakTest.txt"
testdata = download_test_data_file(TESTDATAFILE)

with testdata:
self.run_grapheme_break_tests(testdata)
Expand Down
Loading