]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
[3.14] gh-133677: Fix tests when running in non-UTF-8 locale (GH-133865) (GH-133938)
authorMiss Islington (bot) <31488909+miss-islington@users.noreply.github.com>
Mon, 12 May 2025 16:41:40 +0000 (18:41 +0200)
committerGitHub <noreply@github.com>
Mon, 12 May 2025 16:41:40 +0000 (16:41 +0000)
(cherry picked from commit 14305a83d381ccdcae814abd9e2c28dda066720b)

Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
Lib/test/support/strace_helper.py
Lib/test/test_argparse.py
Lib/test/test_asyncio/test_tools.py
Lib/test/test_pathlib/test_pathlib.py
Lib/test/test_urllib.py
Lib/test/test_zipfile/test_core.py

index 1a9d2b520b7b2332d5e72097070f68e8a430b8c4..cf95f7bdc7d2cadfcaf75b00495b1db0315adcee 100644 (file)
@@ -38,7 +38,7 @@ class StraceResult:
 
         This assumes the program under inspection doesn't print any non-utf8
         strings which would mix into the strace output."""
-        decoded_events = self.event_bytes.decode('utf-8')
+        decoded_events = self.event_bytes.decode('utf-8', 'surrogateescape')
         matches = [
             _syscall_regex.match(event)
             for event in decoded_events.splitlines()
index 5a6be1180c1a3ec2a530a4419ccc8e1249f9743e..8a264b101bc3bac078d2125cbe4824369f2db8fe 100644 (file)
@@ -6973,7 +6973,7 @@ class TestProgName(TestCase):
 
     def check_usage(self, expected, *args, **kwargs):
         res = script_helper.assert_python_ok('-Xutf8', *args, '-h', **kwargs)
-        self.assertEqual(res.out.splitlines()[0].decode(),
+        self.assertEqual(os.fsdecode(res.out.splitlines()[0]),
                          f'usage: {expected} [-h]')
 
     def test_script(self, compiled=False):
index 0413e236c27dfabd8b368d8fbe3d0ddf74f151ff..ba36e759ccdd616f6e2c9b7bf09ba7658094ef20 100644 (file)
@@ -791,21 +791,21 @@ class TestAsyncioToolsBasic(unittest.TestCase):
 class TestAsyncioToolsEdgeCases(unittest.TestCase):
 
     def test_task_awaits_self(self):
-        """A task directly awaits itself  should raise a cycle."""
+        """A task directly awaits itself - should raise a cycle."""
         input_ = [(1, [(1, "Self-Awaiter", [[["loopback"], 1]])])]
         with self.assertRaises(tools.CycleFoundException) as ctx:
             tools.build_async_tree(input_)
         self.assertIn([1, 1], ctx.exception.cycles)
 
     def test_task_with_missing_awaiter_id(self):
-        """Awaiter ID not in task list  should not crash, just show 'Unknown'."""
+        """Awaiter ID not in task list - should not crash, just show 'Unknown'."""
         input_ = [(1, [(1, "Task-A", [[["coro"], 999]])])]  # 999 not defined
         table = tools.build_task_table(input_)
         self.assertEqual(len(table), 1)
         self.assertEqual(table[0][4], "Unknown")
 
     def test_duplicate_coroutine_frames(self):
-        """Same coroutine frame repeated under a parent  should deduplicate."""
+        """Same coroutine frame repeated under a parent - should deduplicate."""
         input_ = [
             (
                 1,
@@ -829,7 +829,7 @@ class TestAsyncioToolsEdgeCases(unittest.TestCase):
         self.assertIn("Task-1", flat)
 
     def test_task_with_no_name(self):
-        """Task with no name in id2name  should still render with fallback."""
+        """Task with no name in id2name - should still render with fallback."""
         input_ = [(1, [(1, "root", [[["f1"], 2]]), (2, None, [])])]
         # If name is None, fallback to string should not crash
         tree = tools.build_async_tree(input_)
index 8a313cc4292574820a1baacf1ff7793e8c9ea013..37ef9fa19463761fd09c760caa23908a19e2a6a6 100644 (file)
@@ -20,7 +20,7 @@ from test.support import cpython_only
 from test.support import is_emscripten, is_wasi
 from test.support import infinite_recursion
 from test.support import os_helper
-from test.support.os_helper import TESTFN, FakePath
+from test.support.os_helper import TESTFN, FS_NONASCII, FakePath
 try:
     import fcntl
 except ImportError:
@@ -770,12 +770,16 @@ class PurePathTest(unittest.TestCase):
         self.assertEqual(self.make_uri(P('c:/')), 'file:///c:/')
         self.assertEqual(self.make_uri(P('c:/a/b.c')), 'file:///c:/a/b.c')
         self.assertEqual(self.make_uri(P('c:/a/b%#c')), 'file:///c:/a/b%25%23c')
-        self.assertEqual(self.make_uri(P('c:/a/b\xe9')), 'file:///c:/a/b%C3%A9')
         self.assertEqual(self.make_uri(P('//some/share/')), 'file://some/share/')
         self.assertEqual(self.make_uri(P('//some/share/a/b.c')),
                          'file://some/share/a/b.c')
-        self.assertEqual(self.make_uri(P('//some/share/a/b%#c\xe9')),
-                         'file://some/share/a/b%25%23c%C3%A9')
+
+        from urllib.parse import quote_from_bytes
+        QUOTED_FS_NONASCII = quote_from_bytes(os.fsencode(FS_NONASCII))
+        self.assertEqual(self.make_uri(P('c:/a/b' + FS_NONASCII)),
+                         'file:///c:/a/b' + QUOTED_FS_NONASCII)
+        self.assertEqual(self.make_uri(P('//some/share/a/b%#c' + FS_NONASCII)),
+                         'file://some/share/a/b%25%23c' + QUOTED_FS_NONASCII)
 
     @needs_windows
     def test_ordering_windows(self):
index c965860fbb10efa9dc80a6fc443a21da201495d6..bc1030eea60c3520ab5acf909c3d5b77dc68c30f 100644 (file)
@@ -109,7 +109,7 @@ class urlopen_FileTests(unittest.TestCase):
         finally:
             f.close()
         self.pathname = os_helper.TESTFN
-        self.quoted_pathname = urllib.parse.quote(self.pathname)
+        self.quoted_pathname = urllib.parse.quote(os.fsencode(self.pathname))
         self.returned_obj = urllib.request.urlopen("file:%s" % self.quoted_pathname)
 
     def tearDown(self):
index ae898150658565c042195be435fc7e9bd48f3857..43056978848c03bef1770ab55a3a9b9eae1d5224 100644 (file)
@@ -3642,7 +3642,7 @@ class EncodedMetadataTests(unittest.TestCase):
             except OSError:
                 pass
             except UnicodeEncodeError:
-                self.skipTest(f'cannot encode file name {fn!r}')
+                self.skipTest(f'cannot encode file name {fn!a}')
 
         zipfile.main(["--metadata-encoding=shift_jis", "-e", TESTFN, TESTFN2])
         listing = os.listdir(TESTFN2)