]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-133031: Fix test_textbox_edit_wide on a narrow build (GH-152592)
authorSerhiy Storchaka <storchaka@gmail.com>
Mon, 29 Jun 2026 14:00:21 +0000 (17:00 +0300)
committerGitHub <noreply@github.com>
Mon, 29 Jun 2026 14:00:21 +0000 (14:00 +0000)
unget_wch() can push only a single-byte character on a narrow build,
so skip the multi-byte cases there.

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Lib/test/test_curses.py

index c79801aae4699b71a5e9fd020bcf3eb5746a2798..17b31e4c7c8063cf519d2aa453a86597fbad2a4c 100644 (file)
@@ -2366,15 +2366,19 @@ class TestCurses(unittest.TestCase):
             self.assertEqual(box.gather(), text + ' ')
 
     def test_textbox_edit_wide(self):
-        # edit() reads characters through get_wch().  Each is used only if
-        # encodable in the current locale.
+        # edit() reads characters through get_wch().  Each character is pushed
+        # with unget_wch(), which on a narrow build requires it to encode to a
+        # single byte, so a non-ASCII case needs a wide build or an 8-bit locale.
         for ch in ['A', 'é', '¤', '€', 'д']:
-            if self._encodable(ch):
-                with self.subTest(ch=ch):
-                    box, win = self._make_textbox(1, 10)
-                    for c in reversed(['a', ch, chr(curses.ascii.BEL)]):
-                        curses.unget_wch(c)
-                    self.assertEqual(box.edit(), 'a' + ch + ' ')
+            if not self._encodable(ch):
+                continue
+            if not WIDE_BUILD and len(ch.encode(self.stdscr.encoding)) != 1:
+                continue
+            with self.subTest(ch=ch):
+                box, win = self._make_textbox(1, 10)
+                for c in reversed(['a', ch, chr(curses.ascii.BEL)]):
+                    curses.unget_wch(c)
+                self.assertEqual(box.edit(), 'a' + ch + ' ')
 
     def test_textbox_movement(self):
         box, win = self._make_textbox(3, 10)