From b8cb0555d80bdb7a4d7a858d41402133a4d8ae9a Mon Sep 17 00:00:00 2001 From: Serhiy Storchaka Date: Mon, 29 Jun 2026 17:00:21 +0300 Subject: [PATCH] gh-133031: Fix test_textbox_edit_wide on a narrow build (GH-152592) 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 --- Lib/test/test_curses.py | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index c79801aae469..17b31e4c7c80 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -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) -- 2.47.3