test_curses failures on Python 3.16.0a1 with ncurses 6.6 on openSUSE #159579
Description
Bug report
Description
Building Python 3.16.0a1 as an openSUSE RPM fails during the test suite because of failures in test_curses. The failures occur both in the initial run and when the test runner reruns the failed tests.
Environment
- Python 3.16.0a1, built from
Python-3.16.0a1.tar.xz - openSUSE OBS build environment, Linux x86_64
- ncurses package version
6.6.20260926-115.1 TERM=linux_cursescompiled with-I/usr/include/ncurseswand linked with-lncursesw- Distribution patches applied. I have not yet reproduced this with an unpatched upstream checkout.
The tests report:
ncurses_version = curses.ncurses_version(major=6, minor=6, patch=20260926)
How the tests were run
The RPM's %check step runs make test with options including:
-u curses,-network -v -i test_freeze_simple_script --timeout=5400
The invocation also excludes some distribution-selected tests.
Failures
The failures fall into several groups. I do not know whether they share a cause.
Input and input pushback
test_get_wstr returns an empty string instead of the queued input:
FAIL: test_get_wstr (test.test_curses.TestCurses.test_get_wstr) (s='Lorem')
File "Lib/test/test_curses.py", line 1352, in test_get_wstr
self.assertEqual(win.get_wstr(0, 0), s)
AssertionError: '' != 'Lorem'
test_getstr fails while pushing input:
ERROR: test_getstr (test.test_curses.TestCurses.test_getstr)
File "Lib/test/test_curses.py", line 1324, in test_getstr
curses.ungetch(c)
curses.error: unget_wch() (called by ungetch()) returned ERR
The source routes string arguments to ungetch() through unget_wch(), while test_getch pushes strings and reads them using getch(). Could this contribute to these failures?
On the rerun, textbox input tests also fail with:
curses.error: wget_wch() (called by get_wch()): no input
Some input failures may be secondary to unread input left by earlier failed tests.
Textbox lower-right cell
The final character is missing in several textbox tests:
test_textbox_fill_last_cell:
AssertionError: 'abc ' != 'abcd'
test_textbox_fill_last_cell_insert_mode:
AssertionError: 'abc ' != 'abcd'
test_textbox_fill_last_cell_multiline:
AssertionError: 'abc\nde \n' != 'abc\ndef\n'
test_textbox_fill_last_cell_scrollok:
AssertionError: 'abc\nde \n' != 'abc\ndef\n'
Textbox._insert_printable_char() uses insch() for the lower-right cell.
WACS constants
test_wacs_in_cell_methods fails when reading back WACS_DIAMOND:
File "Lib/test/test_curses.py", line 617, in test_wacs_in_cell_methods
self.assertEqual(stdscr.in_wch(1, 0), curses.WACS_DIAMOND)
AssertionError: curses.complexchar('E', attr=1162149888, pair=69) != <curses.complexchar object at 0x7f4252bc49c0>
On the rerun, test_wacs_line_constants also raises the following for D_TTEE, T_ULCORNER, and T_URCORNER:
curses.error: getcchar() returned ERR
Overall result
1 test failed:
test_curses
467 tests OK.
Total tests: run=51,162 (filtered) failures=29 skipped=2,517
Total test files: run=541/549 (filtered) failed=1 skipped=72 resource_denied=9 rerun=1
Result: FAILURE
Related feature work includes #152233 and #155863. I have not found an existing report matching these failures.
CPython versions tested on:
3.16
Operating systems tested on:
Linux
Metadata
Metadata
Assignees
Labels
Projects
- StatusShow more project fieldsNo status
Activity
picnixz commentedon Oct 16, 2026
cc @serhiy-storchaka
serhiy-storchaka commentedon Oct 18, 2026
Thank you for the detailed report, @mcepl. I reproduced all of these on openSUSE Tumbleweed with
libncurses6-6.6.20260926-115.1. None of them is a bug in Python; there are three separate causes:test_textbox_fill_last_cell*): a regression in ncurses 6.6-20260815, still present in 20261017.insch()andins_wch()in the last column of a line insert nothing and return OK, and Textbox writes its lower-right cell withinsch(). Reported in https://lists.gnu.org/archive/html/bug-ncurses/2026-10/msg00007.html.test_wacs_*): since ncurses 6.6-20260523, only the first screen gets a table of wide ACS characters, and it is freed with that screen. In a reentrant build like openSUSE's, theWACS_*constants then point to freed memory; in other builds they become NULL. Reported in https://lists.gnu.org/archive/html/bug-ncurses/2026-10/msg00008.html.test_getch,test_getstr,test_get_wstr, the Textbox editing tests), which fail only in UTF-8 locales: openSUSE'sFORTIFY_SOURCE_3-fix.patchmakesunget_wch()push backMB_CUR_MAXbytes per character, so each character is followed by five uninitialized bytes. The failures on rerun follow from the garbage left in the input queue. Reported in https://bugzilla.opensuse.org/show_bug.cgi?id=1285901.On the current main branch,
test_resizetermcan also fail after the soft-label tests. That is an older ncurses bug, which is now visible becausecurses.LINESis taken from the size ofstdscr. Reported in https://lists.gnu.org/archive/html/bug-ncurses/2026-10/msg00009.html.