[2.7] bpo-31891: Fix building the curses module on NetBSD. (GH-4165). (#4194)
(cherry picked from commit baac01e629d90f63dfde6b5cc433f4bc65c5feeb)
diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py
index 743e56e..0ee8f05 100644
--- a/Lib/test/test_curses.py
+++ b/Lib/test/test_curses.py
@@ -26,9 +26,12 @@
# If either of these don't exist, skip the tests.
curses = import_module('curses')
-import_module('curses.panel')
import_module('curses.ascii')
import_module('curses.textpad')
+try:
+ import curses.panel
+except ImportError:
+ pass
def requires_curses_func(name):
return unittest.skipUnless(hasattr(curses, name),
@@ -137,7 +140,8 @@
stdscr.idcok(1)
stdscr.idlok(1)
- stdscr.immedok(1)
+ if hasattr(stdscr, 'immedok'):
+ stdscr.immedok(1)
stdscr.insch('c')
stdscr.insdelln(1)
stdscr.insnstr('abc', 3)
@@ -171,7 +175,8 @@
stdscr.setscrreg(10,15)
win3 = stdscr.subwin(10,10)
win3 = stdscr.subwin(10,10, 5,5)
- stdscr.syncok(1)
+ if hasattr(stdscr, 'syncok'):
+ stdscr.syncok(1)
stdscr.timeout(5)
stdscr.touchline(5,5)
stdscr.touchline(5,5,0)
@@ -201,14 +206,18 @@
"Test module-level functions"
for func in [curses.baudrate, curses.beep, curses.can_change_color,
curses.cbreak, curses.def_prog_mode, curses.doupdate,
- curses.filter, curses.flash, curses.flushinp,
+ curses.flash, curses.flushinp,
curses.has_colors, curses.has_ic, curses.has_il,
curses.isendwin, curses.killchar, curses.longname,
curses.nocbreak, curses.noecho, curses.nonl,
curses.noqiflush, curses.noraw,
curses.reset_prog_mode, curses.termattrs,
- curses.termname, curses.erasechar, curses.getsyx]:
+ curses.termname, curses.erasechar]:
func()
+ if hasattr(curses, 'filter'):
+ curses.filter()
+ if hasattr(curses, 'getsyx'):
+ curses.getsyx()
# Functions that actually need arguments
if curses.tigetstr("cnorm"):
@@ -232,15 +241,18 @@
curses.putp(b'abc')
curses.qiflush()
curses.raw() ; curses.raw(1)
- curses.setsyx(5,5)
+ if hasattr(curses, 'setsyx'):
+ curses.setsyx(5,5)
curses.tigetflag('hc')
curses.tigetnum('co')
curses.tigetstr('cr')
curses.tparm(b'cr')
- curses.typeahead(sys.__stdin__.fileno())
+ if hasattr(curses, 'typeahead'):
+ curses.typeahead(sys.__stdin__.fileno())
curses.unctrl('a')
curses.ungetch('a')
- curses.use_env(1)
+ if hasattr(curses, 'use_env'):
+ curses.use_env(1)
# Functions only available on a few platforms
def test_colors_funcs(self):
@@ -274,6 +286,7 @@
curses.ungetmouse(0, 0, 0, 0, curses.BUTTON1_PRESSED)
m = curses.getmouse()
+ @requires_curses_func('panel')
def test_userptr_without_set(self):
w = curses.newwin(10, 10)
p = curses.panel.new_panel(w)
@@ -282,6 +295,7 @@
msg='userptr should fail since not set'):
p.userptr()
+ @requires_curses_func('panel')
def test_userptr_memory_leak(self):
w = curses.newwin(10, 10)
p = curses.panel.new_panel(w)
@@ -294,6 +308,7 @@
self.assertEqual(sys.getrefcount(obj), nrefs,
"set_userptr leaked references")
+ @requires_curses_func('panel')
def test_userptr_segfault(self):
panel = curses.panel.new_panel(self.stdscr)
class A:
@@ -302,6 +317,7 @@
panel.set_userptr(A())
panel.set_userptr(None)
+ @requires_curses_func('panel')
def test_new_curses_panel(self):
panel = curses.panel.new_panel(self.stdscr)
self.assertRaises(TypeError, type(panel))