]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-151693: Make the curses tests portable to other curses implementations (GH-151729) main
authorSerhiy Storchaka <storchaka@gmail.com>
Fri, 19 Jun 2026 11:32:02 +0000 (14:32 +0300)
committerGitHub <noreply@github.com>
Fri, 19 Jun 2026 11:32:02 +0000 (11:32 +0000)
Make the curses tests portable to other curses implementations

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

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

index 647959146a792c17ad692430bd4c9f3efc6e5f62..c6a762c04e05253f39f5b1c2c8df9fedbf1f7440 100644 (file)
@@ -377,10 +377,12 @@ class TestCurses(unittest.TestCase):
         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).
@@ -414,7 +416,8 @@ class TestCurses(unittest.TestCase):
         self.assertRaises(curses.error, win.move, -1, -1)
         self.assertRaises(curses.error, win.addch, 100, 100, ord('x'))
         self.assertRaises(curses.error, win.inch, 100, 100)
-        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)