]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-136702: Clear codec caches for refleak tests; use test.support helpers (GH-141345)
authorPetr Viktorin <encukou@gmail.com>
Mon, 10 Nov 2025 13:42:18 +0000 (14:42 +0100)
committerGitHub <noreply@github.com>
Mon, 10 Nov 2025 13:42:18 +0000 (14:42 +0100)
This should fix refleak buildbots.

Lib/test/libregrtest/utils.py
Lib/test/test_codecs.py
Lib/test/test_email/test_email.py
Lib/test/test_email/test_headerregistry.py

index d94fb84a743828862121e24d430ea062454135fe..cfb009c203ee80beea85503b87b8f0e33d167237 100644 (file)
@@ -294,6 +294,25 @@ def clear_caches():
     else:
         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():
     # Get most important configure and build options as a list of strings.
index f1f0ac5ad36fd2acc620ee4d2359d8b31dd6242f..c31faec9ee5214919411d74d023eccc30599faa1 100644 (file)
@@ -13,6 +13,7 @@ import warnings
 
 from test import support
 from test.support import os_helper
+from test.support import warnings_helper
 
 try:
     import _testlimitedcapi
@@ -3902,8 +3903,8 @@ class CodecNameNormalizationTest(unittest.TestCase):
         self.assertEqual(normalize('utf...8'), 'utf...8')
 
         # Non-ASCII *encoding* is deprecated.
-        with self.assertWarnsRegex(DeprecationWarning,
-                "Support for non-ascii encoding names will be removed in 3.17"):
+        msg = "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')
 
 
index 1900adf463befcc1f69b264a8387d689af8fb1a9..4020f1041c43040878d98c060016b30d7b51da07 100644 (file)
@@ -41,6 +41,7 @@ from email import utils
 
 from test import support
 from test.support import threading_helper
+from test.support import warnings_helper
 from test.support.os_helper import unlink
 from test.test_email import openfile, TestEmailBase
 
@@ -5738,7 +5739,7 @@ Content-Disposition: inline; filename*=utf-8\udce2\udc80\udc9d''myfile.txt
 
 """
         msg = email.message_from_string(m)
-        with self.assertWarns(DeprecationWarning):
+        with warnings_helper.check_warnings(('', DeprecationWarning)):
             self.assertEqual(msg.get_filename(), 'myfile.txt')
 
     def test_rfc2231_single_tick_in_filename_extended(self):
index 1d0d0a49a829174777513d77721990e368275038..7138aa4c556d1f34d87c6497c621e22db37bdcc9 100644 (file)
@@ -8,6 +8,7 @@ from test.test_email import TestEmailBase, parameterize
 from email import headerregistry
 from email.headerregistry import Address, Group
 from test.support import ALWAYS_EQ
+from test.support import warnings_helper
 
 
 DITTO = object()
@@ -252,7 +253,7 @@ class TestContentTypeHeader(TestHeaderBase):
         if 'utf-8%E2%80%9D' in source and 'ascii' not in source:
             import encodings
             encodings._cache.clear()
-            with self.assertWarns(DeprecationWarning):
+            with warnings_helper.check_warnings(('', DeprecationWarning)):
                 h = self.make_header('Content-Type', source)
         else:
             h = self.make_header('Content-Type', source)