From: Serhiy Storchaka Date: Mon, 29 Jun 2026 14:00:21 +0000 (+0300) Subject: gh-133031: Fix test_textbox_edit_wide on a narrow build (GH-152592) X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=b8cb0555d80bdb7a4d7a858d41402133a4d8ae9a;p=thirdparty%2FPython%2Fcpython.git 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 --- 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)