[3.13] gh-151693: Make the curses tests portable to other curses implementations (GH-151729) (GH-151730)

Guard the chgat() check (chgat() needs wchgat()) and stop assuming a
subpad shares the parent pad's cells (implementation-defined in X/Open).
(cherry picked from commit 64fab74bd7)

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Serhiy Storchaka 2026-06-19 15:07:24 +03:00 committed by GitHub
parent 92bd69674e
commit cc7043de99
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -380,10 +380,12 @@ def test_pad(self):
pad.addstr(0, 0, 'PADTEXT')
self.assertEqual(pad.instr(0, 0, 7), b'PADTEXT')
# subpad() shares the parent pad's character cells.
# subpad() creates a pad within the parent pad. Cell sharing with
# the parent is implementation-defined, so write to the subpad itself.
sub = pad.subpad(3, 5, 0, 0)
self.assertEqual(sub.getmaxyx(), (3, 5))
self.assertEqual(sub.instr(0, 0, 5), b'PADTE')
sub.addstr(1, 0, 'sub')
self.assertEqual(sub.instr(1, 0, 3), b'sub')
# A pad is refreshed onto an explicit screen rectangle; the
# 6-argument form is required (and rejected for ordinary windows).
@ -416,7 +418,8 @@ def test_coordinate_errors(self):
self.assertRaises(curses.error, win.move, 100, 100)
self.assertRaises(curses.error, win.move, -1, -1)
self.assertRaises(curses.error, win.addch, 100, 100, ord('x'))
self.assertRaises(curses.error, win.chgat, 100, 0, curses.A_BOLD)
if hasattr(win, 'chgat'): # chgat() requires wchgat()
self.assertRaises(curses.error, win.chgat, 100, 0, curses.A_BOLD)
def test_argument_errors(self):
win = curses.newwin(5, 10, 0, 0)