mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	[3.14] gh-133677: Fix tests when running in non-UTF-8 locale (GH-133865) (GH-133938)
(cherry picked from commit 14305a83d3)
Co-authored-by: Serhiy Storchaka <storchaka@gmail.com>
			
			
This commit is contained in:
		
							parent
							
								
									89c801b84e
								
							
						
					
					
						commit
						c11fc4bc96
					
				
					 6 changed files with 16 additions and 12 deletions
				
			
		| 
						 | 
					@ -38,7 +38,7 @@ def events(self):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        This assumes the program under inspection doesn't print any non-utf8
 | 
					        This assumes the program under inspection doesn't print any non-utf8
 | 
				
			||||||
        strings which would mix into the strace output."""
 | 
					        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 = [
 | 
					        matches = [
 | 
				
			||||||
            _syscall_regex.match(event)
 | 
					            _syscall_regex.match(event)
 | 
				
			||||||
            for event in decoded_events.splitlines()
 | 
					            for event in decoded_events.splitlines()
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -6973,7 +6973,7 @@ def make_zip_script(self, script_name, name_in_zip=None):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def check_usage(self, expected, *args, **kwargs):
 | 
					    def check_usage(self, expected, *args, **kwargs):
 | 
				
			||||||
        res = script_helper.assert_python_ok('-Xutf8', *args, '-h', **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]')
 | 
					                         f'usage: {expected} [-h]')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_script(self, compiled=False):
 | 
					    def test_script(self, compiled=False):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -791,21 +791,21 @@ def test_table_output_format(self):
 | 
				
			||||||
class TestAsyncioToolsEdgeCases(unittest.TestCase):
 | 
					class TestAsyncioToolsEdgeCases(unittest.TestCase):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_task_awaits_self(self):
 | 
					    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]])])]
 | 
					        input_ = [(1, [(1, "Self-Awaiter", [[["loopback"], 1]])])]
 | 
				
			||||||
        with self.assertRaises(tools.CycleFoundException) as ctx:
 | 
					        with self.assertRaises(tools.CycleFoundException) as ctx:
 | 
				
			||||||
            tools.build_async_tree(input_)
 | 
					            tools.build_async_tree(input_)
 | 
				
			||||||
        self.assertIn([1, 1], ctx.exception.cycles)
 | 
					        self.assertIn([1, 1], ctx.exception.cycles)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_task_with_missing_awaiter_id(self):
 | 
					    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
 | 
					        input_ = [(1, [(1, "Task-A", [[["coro"], 999]])])]  # 999 not defined
 | 
				
			||||||
        table = tools.build_task_table(input_)
 | 
					        table = tools.build_task_table(input_)
 | 
				
			||||||
        self.assertEqual(len(table), 1)
 | 
					        self.assertEqual(len(table), 1)
 | 
				
			||||||
        self.assertEqual(table[0][4], "Unknown")
 | 
					        self.assertEqual(table[0][4], "Unknown")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_duplicate_coroutine_frames(self):
 | 
					    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_ = [
 | 
					        input_ = [
 | 
				
			||||||
            (
 | 
					            (
 | 
				
			||||||
                1,
 | 
					                1,
 | 
				
			||||||
| 
						 | 
					@ -829,7 +829,7 @@ def test_duplicate_coroutine_frames(self):
 | 
				
			||||||
        self.assertIn("Task-1", flat)
 | 
					        self.assertIn("Task-1", flat)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def test_task_with_no_name(self):
 | 
					    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, [])])]
 | 
					        input_ = [(1, [(1, "root", [[["f1"], 2]]), (2, None, [])])]
 | 
				
			||||||
        # If name is None, fallback to string should not crash
 | 
					        # If name is None, fallback to string should not crash
 | 
				
			||||||
        tree = tools.build_async_tree(input_)
 | 
					        tree = tools.build_async_tree(input_)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -20,7 +20,7 @@
 | 
				
			||||||
from test.support import is_emscripten, is_wasi
 | 
					from test.support import is_emscripten, is_wasi
 | 
				
			||||||
from test.support import infinite_recursion
 | 
					from test.support import infinite_recursion
 | 
				
			||||||
from test.support import os_helper
 | 
					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:
 | 
					try:
 | 
				
			||||||
    import fcntl
 | 
					    import fcntl
 | 
				
			||||||
except ImportError:
 | 
					except ImportError:
 | 
				
			||||||
| 
						 | 
					@ -770,12 +770,16 @@ def test_as_uri_windows(self):
 | 
				
			||||||
        self.assertEqual(self.make_uri(P('c:/')), 'file:///c:/')
 | 
					        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.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%#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/')), 'file://some/share/')
 | 
				
			||||||
        self.assertEqual(self.make_uri(P('//some/share/a/b.c')),
 | 
					        self.assertEqual(self.make_uri(P('//some/share/a/b.c')),
 | 
				
			||||||
                         'file://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
 | 
					    @needs_windows
 | 
				
			||||||
    def test_ordering_windows(self):
 | 
					    def test_ordering_windows(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -109,7 +109,7 @@ def setUp(self):
 | 
				
			||||||
        finally:
 | 
					        finally:
 | 
				
			||||||
            f.close()
 | 
					            f.close()
 | 
				
			||||||
        self.pathname = os_helper.TESTFN
 | 
					        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)
 | 
					        self.returned_obj = urllib.request.urlopen("file:%s" % self.quoted_pathname)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def tearDown(self):
 | 
					    def tearDown(self):
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -3642,7 +3642,7 @@ def test_cli_with_metadata_encoding_extract(self):
 | 
				
			||||||
            except OSError:
 | 
					            except OSError:
 | 
				
			||||||
                pass
 | 
					                pass
 | 
				
			||||||
            except UnicodeEncodeError:
 | 
					            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])
 | 
					        zipfile.main(["--metadata-encoding=shift_jis", "-e", TESTFN, TESTFN2])
 | 
				
			||||||
        listing = os.listdir(TESTFN2)
 | 
					        listing = os.listdir(TESTFN2)
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue