diff -r 2917a3ce988e Lib/test/test_curses.py --- a/Lib/test/test_curses.py Sat May 21 21:36:29 2016 +0300 +++ b/Lib/test/test_curses.py Sun May 22 07:37:39 2016 +0300 @@ -42,12 +42,15 @@ class TestCurses(unittest.TestCase): @classmethod def setUpClass(cls): - if not sys.__stdout__.isatty(): + cls.tmp = None + if sys.__stdout__.isatty(): + fd = sys.__stdout__.fileno() + elif sys.__stderr__.isatty(): + fd = sys.__stderr__.fileno() + else: cls.tmp = tempfile.TemporaryFile() fd = cls.tmp.fileno() - else: - cls.tmp = None - fd = sys.__stdout__.fileno() + cls.isatty = not cls.tmp # testing setupterm() inside initscr/endwin # causes terminal breakage curses.setupterm(fd=fd) @@ -63,11 +66,17 @@ class TestCurses(unittest.TestCase): # just to make the test output a little more readable print() self.stdscr = curses.initscr() - curses.savetty() + try: + curses.savetty() + except curses.error: + pass def tearDown(self): - curses.resetty() - curses.endwin() + try: + curses.resetty() + curses.endwin() + except curses.error: + pass def test_window_funcs(self): "Test the methods of windows" @@ -188,14 +197,20 @@ class TestCurses(unittest.TestCase): def test_module_funcs(self): "Test module-level functions" + if self.isatty: + for func in [curses.cbreak, curses.def_prog_mode, + curses.nocbreak, curses.noraw, + curses.reset_prog_mode]: + with self.subTest(func=func.__qualname__): + func() + for func in [curses.baudrate, curses.beep, curses.can_change_color, - curses.cbreak, curses.def_prog_mode, curses.doupdate, + curses.doupdate, curses.filter, 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.noecho, curses.nonl, curses.noqiflush, + curses.termattrs, curses.termname, curses.erasechar, curses.getsyx]: with self.subTest(func=func.__qualname__): func() @@ -212,7 +227,8 @@ class TestCurses(unittest.TestCase): curses.getwin(f) curses.halfdelay(1) - curses.intrflush(1) + if self.isatty: + curses.intrflush(1) curses.meta(1) curses.napms(100) curses.newpad(50,50) @@ -221,7 +237,9 @@ class TestCurses(unittest.TestCase): curses.nl() ; curses.nl(1) curses.putp(b'abc') curses.qiflush() - curses.raw() ; curses.raw(1) + if self.isatty: + curses.raw() + curses.raw(1) curses.setsyx(5,5) curses.tigetflag('hc') curses.tigetnum('co')