https://github.com/python/cpython/commit/563449b182ee9b2a4b7704985c5f2c50675cd3ab
commit: 563449b182ee9b2a4b7704985c5f2c50675cd3ab
branch: 3.14
author: Serhiy Storchaka <[email protected]>
committer: serhiy-storchaka <[email protected]>
date: 2026-08-29T18:34:19+03:00
summary:
[3.14] gh-155974: Add a test for the window attributes after a failed write
(GH-156565)
The bug was introduced and fixed in 3.15, but the behaviour is worth
guarding here too.
files:
M Lib/test/test_curses.py
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 80c3c564dc6271..a08d8cbaef9c04 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -428,6 +428,26 @@ def test_output_string_embedded_null_chars(self):
self.assertRaises(ValueError, stdscr.insstr, arg)
self.assertRaises(ValueError, stdscr.insnstr, arg, 1)
+ def test_output_string_attr_restored(self):
+ # A write with an attr restores the window rendition afterwards,
+ # whether it succeeded or failed.
+ win = curses.newwin(2, 10, 0, 0)
+ def current_attrs():
+ # Write a cell with the window's current rendition and read it
+ # back, so that the rendition itself is checked.
+ win.addstr(1, 0, ' ')
+ return win.inch(1, 0) & curses.A_ATTRIBUTES
+ for func, args in [(win.addstr, ('x',)), (win.addnstr, ('x', 1)),
+ (win.insstr, ('x',)), (win.insnstr, ('x', 1))]:
+ with self.subTest(func.__qualname__):
+ win.attrset(curses.A_UNDERLINE)
+ # y=100 is outside the window, so the write fails.
+ self.assertRaises(curses.error, func, 100, 0, *args,
+ curses.A_BOLD)
+ self.assertEqual(current_attrs(), curses.A_UNDERLINE)
+ func(0, 0, *args, curses.A_BOLD)
+ self.assertEqual(current_attrs(), curses.A_UNDERLINE)
+
def test_add_string_behavior(self):
# addstr() advances the cursor past the written text; addnstr()
# writes at most n characters.
_______________________________________________
Python-checkins mailing list -- [email protected]
To unsubscribe send an email to [email protected]
https://mail.python.org/mailman3//lists/python-checkins.python.org
Member address: [email protected]