gh-136702: Clear codec caches for refleak tests; use test.support helpers (GH-141345)

This should fix refleak buildbots.
This commit is contained in:
Petr Viktorin 2025-11-10 14:42:18 +01:00 committed by GitHub
parent 13fa313beb
commit 9f5152441d
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 26 additions and 4 deletions

View file

@ -294,6 +294,25 @@ def clear_caches():
else: else:
importlib_metadata.FastPath.__new__.cache_clear() importlib_metadata.FastPath.__new__.cache_clear()
try:
encodings = sys.modules['encodings']
except KeyError:
pass
else:
encodings._cache.clear()
try:
codecs = sys.modules['codecs']
except KeyError:
pass
else:
# There's no direct API to clear the codecs search cache, but
# `unregister` clears it implicitly.
def noop_search_function(name):
return None
codecs.register(noop_search_function)
codecs.unregister(noop_search_function)
def get_build_info(): def get_build_info():
# Get most important configure and build options as a list of strings. # Get most important configure and build options as a list of strings.

View file

@ -13,6 +13,7 @@
from test import support from test import support
from test.support import os_helper from test.support import os_helper
from test.support import warnings_helper
try: try:
import _testlimitedcapi import _testlimitedcapi
@ -3902,8 +3903,8 @@ def test_encodings_normalize_encoding(self):
self.assertEqual(normalize('utf...8'), 'utf...8') self.assertEqual(normalize('utf...8'), 'utf...8')
# Non-ASCII *encoding* is deprecated. # Non-ASCII *encoding* is deprecated.
with self.assertWarnsRegex(DeprecationWarning, msg = "Support for non-ascii encoding names will be removed in 3.17"
"Support for non-ascii encoding names will be removed in 3.17"): with warnings_helper.check_warnings((msg, DeprecationWarning)):
self.assertEqual(normalize('utf\xE9\u20AC\U0010ffff-8'), 'utf_8') self.assertEqual(normalize('utf\xE9\u20AC\U0010ffff-8'), 'utf_8')

View file

@ -41,6 +41,7 @@
from test import support from test import support
from test.support import threading_helper from test.support import threading_helper
from test.support import warnings_helper
from test.support.os_helper import unlink from test.support.os_helper import unlink
from test.test_email import openfile, TestEmailBase from test.test_email import openfile, TestEmailBase
@ -5738,7 +5739,7 @@ def test_rfc2231_bad_character_in_encoding(self):
""" """
msg = email.message_from_string(m) msg = email.message_from_string(m)
with self.assertWarns(DeprecationWarning): with warnings_helper.check_warnings(('', DeprecationWarning)):
self.assertEqual(msg.get_filename(), 'myfile.txt') self.assertEqual(msg.get_filename(), 'myfile.txt')
def test_rfc2231_single_tick_in_filename_extended(self): def test_rfc2231_single_tick_in_filename_extended(self):

View file

@ -8,6 +8,7 @@
from email import headerregistry from email import headerregistry
from email.headerregistry import Address, Group from email.headerregistry import Address, Group
from test.support import ALWAYS_EQ from test.support import ALWAYS_EQ
from test.support import warnings_helper
DITTO = object() DITTO = object()
@ -252,7 +253,7 @@ def content_type_as_value(self,
if 'utf-8%E2%80%9D' in source and 'ascii' not in source: if 'utf-8%E2%80%9D' in source and 'ascii' not in source:
import encodings import encodings
encodings._cache.clear() encodings._cache.clear()
with self.assertWarns(DeprecationWarning): with warnings_helper.check_warnings(('', DeprecationWarning)):
h = self.make_header('Content-Type', source) h = self.make_header('Content-Type', source)
else: else:
h = self.make_header('Content-Type', source) h = self.make_header('Content-Type', source)