]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-46659: Update the test on the mbcs codec alias (GH-31168)
authorVictor Stinner <vstinner@python.org>
Sun, 6 Feb 2022 20:50:09 +0000 (21:50 +0100)
committerGitHub <noreply@github.com>
Sun, 6 Feb 2022 20:50:09 +0000 (21:50 +0100)
encodings registers the _alias_mbcs() codec search function before
the search_function() codec search function. Previously, the
_alias_mbcs() was never used.

Fix the test_codecs.test_mbcs_alias() test: use the current ANSI code
page, not a fake ANSI code page number.

Remove the test_site.test_aliasing_mbcs() test: the alias is now
implemented in the encodings module, no longer in the site module.

Lib/encodings/__init__.py
Lib/test/test_codecs.py
Lib/test/test_site.py

index 4b37d3321c9033d86a459c05f66aaa133fbb34d9..dff22a4b27f45221a43bef91ac9ba2bffd9e294d 100644 (file)
@@ -152,9 +152,6 @@ def search_function(encoding):
     # Return the registry entry
     return entry
 
-# Register the search_function in the Python codec registry
-codecs.register(search_function)
-
 if sys.platform == 'win32':
     def _alias_mbcs(encoding):
         try:
@@ -167,4 +164,8 @@ if sys.platform == 'win32':
             # Imports may fail while we are shutting down
             pass
 
+    # It must be registered before search_function()
     codecs.register(_alias_mbcs)
+
+# Register the search_function in the Python codec registry
+codecs.register(search_function)
index 4ad24dbb9a924302797415da8a36d69c702d1ddf..d30ff8f82db9a5d5a1a54e3044a7ac003d60ef95 100644 (file)
@@ -1904,7 +1904,10 @@ class BasicUnicodeTest(unittest.TestCase, MixInCheckStateHandling):
                 name += "_codec"
             elif encoding == "latin_1":
                 name = "latin_1"
-            self.assertEqual(encoding.replace("_", "-"), name.replace("_", "-"))
+            # Skip the mbcs alias on Windows
+            if name != "mbcs":
+                self.assertEqual(encoding.replace("_", "-"),
+                                 name.replace("_", "-"))
 
             (b, size) = codecs.getencoder(encoding)(s)
             self.assertEqual(size, len(s), "encoding=%r" % encoding)
@@ -3188,11 +3191,13 @@ class CodePageTest(unittest.TestCase):
         self.assertEqual(decoded, ('abc', 3))
 
     def test_mbcs_alias(self):
-        # Check that looking up our 'default' codepage will return
-        # mbcs when we don't have a more specific one available
-        with mock.patch('_winapi.GetACP', return_value=123):
-            codec = codecs.lookup('cp123')
-            self.assertEqual(codec.name, 'mbcs')
+        # On Windows, the encoding name must be the ANSI code page
+        encoding = locale.getpreferredencoding(False)
+        self.assertTrue(encoding.startswith('cp'), encoding)
+
+        # The encodings module create a "mbcs" alias to the ANSI code page
+        codec = codecs.lookup(encoding)
+        self.assertEqual(codec.name, "mbcs")
 
     @support.bigmemtest(size=2**31, memuse=7, dry_run=False)
     def test_large_input(self, size):
index 032a1be3aa5290a627df8e8adbd0f04b63d5982d..a67cfec72aee4dc5285c7d4954ccea406bb7ebc4 100644 (file)
@@ -456,16 +456,6 @@ class ImportSideEffectTests(unittest.TestCase):
         # 'help' should be set in builtins
         self.assertTrue(hasattr(builtins, "help"))
 
-    def test_aliasing_mbcs(self):
-        if sys.platform == "win32":
-            import locale
-            if locale.getdefaultlocale()[1].startswith('cp'):
-                for value in encodings.aliases.aliases.values():
-                    if value == "mbcs":
-                        break
-                else:
-                    self.fail("did not alias mbcs")
-
     def test_sitecustomize_executed(self):
         # If sitecustomize is available, it should have been imported.
         if "sitecustomize" not in sys.modules: