Lines Matching defs:curses
13 # Optionally test curses module. This currently requires that the
14 # 'curses' resource be given on the regrtest command line using the -u
16 requires('curses')
19 curses = import_module('curses')
20 import_module('curses.ascii')
21 import_module('curses.textpad')
23 import curses.panel
28 return unittest.skipUnless(hasattr(curses, name),
29 'requires curses.%s' % name)
36 raise unittest.SkipTest('requires curses.window.%s' % name)
45 if not curses.has_colors():
47 curses.start_color()
58 "cygwin's curses mostly just hangs")
68 curses.setupterm(fd=stdout_fd)
111 self.stdscr = curses.initscr()
113 curses.savetty()
114 self.addCleanup(curses.endwin)
115 self.addCleanup(curses.resetty)
122 curses.filter()
128 curses.use_env(False)
129 curses.use_env(True)
132 win = curses.newwin(5, 10)
137 win = curses.newwin(10, 15, 2, 5)
259 stdscr.addch('A', curses.A_BOLD)
261 stdscr.addch(2, 3, 'A', curses.A_BOLD)
277 stdscr.echochar('A', curses.A_BOLD)
294 func('abcd', curses.A_BOLD)
296 func(2, 3, 'abcd', curses.A_BOLD)
310 func('1234', 3, curses.A_BOLD)
312 func(2, 3, '1234', 3, curses.A_BOLD)
326 stdscr.addstr(0, 1, 'ABCD', curses.A_BOLD)
329 self.assertEqual(stdscr.inch(), 65 | curses.A_BOLD)
330 self.assertEqual(stdscr.inch(0, 3), 67 | curses.A_BOLD)
341 win = curses.newwin(5, 12, 5, 2)
345 curses.ungetch(c)
356 win = curses.newwin(5, 12, 5, 2)
357 curses.echo()
358 self.addCleanup(curses.noecho)
365 curses.ungetch(c)
378 win = curses.newwin(5, 15, 5, 2)
398 win = curses.newwin(5, 15, 5, 2)
440 win = curses.newwin(5, 15, 5, 2)
455 win = curses.newwin(5, 15, 5, 2)
456 win.attron(curses.A_BOLD)
457 win.attroff(curses.A_BOLD)
458 win.attrset(curses.A_BOLD)
465 win = curses.newwin(5, 15, 5, 2)
470 win.chgat(curses.A_BLINK)
472 self.assertEqual(win.inch(2, 8), b's'[0] | curses.A_BLINK)
473 self.assertEqual(win.inch(2, 14), b' '[0] | curses.A_BLINK)
476 win.chgat(3, curses.A_BOLD)
478 self.assertEqual(win.inch(2, 1), b'o'[0] | curses.A_BOLD)
479 self.assertEqual(win.inch(2, 3), b'e'[0] | curses.A_BOLD)
482 win.chgat(3, 2, curses.A_UNDERLINE)
484 self.assertEqual(win.inch(3, 2), b'l'[0] | curses.A_UNDERLINE)
485 self.assertEqual(win.inch(3, 14), b' '[0] | curses.A_UNDERLINE)
487 win.chgat(3, 4, 7, curses.A_BLINK)
488 self.assertEqual(win.inch(3, 3), b'o'[0] | curses.A_UNDERLINE)
489 self.assertEqual(win.inch(3, 4), b'r'[0] | curses.A_BLINK)
490 self.assertEqual(win.inch(3, 10), b'a'[0] | curses.A_BLINK)
491 self.assertEqual(win.inch(3, 11), b'm'[0] | curses.A_UNDERLINE)
492 self.assertEqual(win.inch(3, 14), b' '[0] | curses.A_UNDERLINE)
495 win = curses.newwin(5, 15, 5, 2)
510 win.bkgdset('#', curses.A_REVERSE)
511 self.assertEqual(win.getbkgd(), b'#'[0] | curses.A_REVERSE)
522 win.bkgd('#', curses.A_REVERSE)
523 self.assertEqual(win.getbkgd(), b'#'[0] | curses.A_REVERSE)
524 self.assertEqual(win.inch(0, 0), b'L'[0] | curses.A_REVERSE)
525 self.assertEqual(win.inch(0, 5), b'#'[0] | curses.A_REVERSE)
528 srcwin = curses.newwin(5, 18, 3, 4)
530 dstwin = curses.newwin(7, 17, 5, 7)
557 win = curses.newwin(5, 15, 2, 5)
562 curses.doupdate()
566 win = curses.newwin(5, 15, 2, 5)
574 win = curses.newwin(5, 15, 2, 5)
583 win = curses.newwin(5, 12, 1, 2)
589 win = curses.getwin(f)
595 win = curses.newwin(5, 10, 5, 2)
635 win.hline('-', 5, curses.A_BOLD)
637 win.hline(1, 1, '-', 5, curses.A_BOLD)
643 win.vline('a', 3, curses.A_STANDOUT)
645 win.vline(1, 1, ';', 2, curses.A_STANDOUT)
646 self.assertEqual(win.inch(1, 1), b';'[0] | curses.A_STANDOUT)
647 self.assertEqual(win.inch(2, 1), b';'[0] | curses.A_STANDOUT)
652 self.assertEqual(curses.unctrl(b'A'), b'A')
653 self.assertEqual(curses.unctrl('A'), b'A')
654 self.assertEqual(curses.unctrl(65), b'A')
655 self.assertEqual(curses.unctrl(b'\n'), b'^J')
656 self.assertEqual(curses.unctrl('\n'), b'^J')
657 self.assertEqual(curses.unctrl(10), b'^J')
658 self.assertRaises(TypeError, curses.unctrl, b'')
659 self.assertRaises(TypeError, curses.unctrl, b'AB')
660 self.assertRaises(TypeError, curses.unctrl, '')
661 self.assertRaises(TypeError, curses.unctrl, 'AB')
662 self.assertRaises(OverflowError, curses.unctrl, 2**64)
667 self.assertIs(curses.isendwin(), False)
668 curses.endwin()
669 self.assertIs(curses.isendwin(), True)
670 curses.doupdate()
671 self.assertIs(curses.isendwin(), False)
674 self.assertIsInstance(curses.tigetflag('hc'), int)
675 self.assertEqual(curses.tigetflag('cols'), -1)
676 self.assertEqual(curses.tigetflag('cr'), -1)
678 self.assertIsInstance(curses.tigetnum('cols'), int)
679 self.assertEqual(curses.tigetnum('hc'), -2)
680 self.assertEqual(curses.tigetnum('cr'), -2)
682 self.assertIsInstance(curses.tigetstr('cr'), (bytes, type(None)))
683 self.assertIsNone(curses.tigetstr('hc'))
684 self.assertIsNone(curses.tigetstr('cols'))
686 cud = curses.tigetstr('cud')
690 curses.tparm(cud, 2)
691 cud_2 = curses.tparm(cud, 2)
693 curses.putp(cud_2)
695 curses.putp(b'abc\n')
698 curses.delay_output(1)
699 curses.flushinp()
701 curses.doupdate()
702 self.assertIs(curses.isendwin(), False)
704 curses.napms(100)
706 curses.newpad(50, 50)
710 self.assertIsInstance(curses.termname(), bytes)
711 self.assertIsInstance(curses.longname(), bytes)
712 self.assertIsInstance(curses.baudrate(), int)
713 self.assertIsInstance(curses.has_ic(), bool)
714 self.assertIsInstance(curses.has_il(), bool)
715 self.assertIsInstance(curses.termattrs(), int)
717 c = curses.killchar()
720 c = curses.erasechar()
748 curses.nonl()
749 curses.nl(True)
750 curses.nl(False)
751 curses.nl()
758 curses.nocbreak()
759 curses.cbreak()
760 curses.cbreak(False)
761 curses.cbreak(True)
763 curses.intrflush(True)
764 curses.intrflush(False)
766 curses.raw()
767 curses.raw(False)
768 curses.raw(True)
769 curses.noraw()
771 curses.noecho()
772 curses.echo()
773 curses.echo(False)
774 curses.echo(True)
776 curses.halfdelay(255)
777 curses.halfdelay(1)
782 curses.meta(True)
783 curses.meta(False)
788 curses.noqiflush()
789 curses.qiflush(True)
790 curses.qiflush(False)
791 curses.qiflush()
802 curses.typeahead(sys.__stdin__.fileno())
803 curses.typeahead(-1)
808 curses.def_prog_mode()
809 curses.reset_prog_mode()
812 if (curses.tigetstr("bel") is not None
813 or curses.tigetstr("flash") is not None):
814 curses.beep()
817 curses.beep()
818 except curses.error:
822 if (curses.tigetstr("bel") is not None
823 or curses.tigetstr("flash") is not None):
824 curses.flash()
827 curses.flash()
828 except curses.error:
833 if curses.tigetstr(cap) is not None:
834 curses.curs_set(vis)
837 curses.curs_set(vis)
838 except curses.error:
843 escdelay = curses.get_escdelay()
845 curses.set_escdelay(25)
846 self.assertEqual(curses.get_escdelay(), 25)
847 curses.set_escdelay(escdelay)
851 tabsize = curses.get_tabsize()
853 curses.set_tabsize(4)
854 self.assertEqual(curses.get_tabsize(), 4)
855 curses.set_tabsize(tabsize)
859 y, x = curses.getsyx()
862 curses.setsyx(4, 5)
863 self.assertEqual(curses.getsyx(), (4, 5))
866 return (-1, curses.COLORS, -2**31 - 1, 2**31, -2**63 - 1, 2**63, 2**64)
869 return (curses.COLORS, 2**31, 2**63, 2**64)
875 self.assertIsInstance(curses.has_colors(), bool)
876 self.assertIsInstance(curses.can_change_color(), bool)
879 if not curses.has_colors():
881 curses.start_color()
883 print(f'COLORS = {curses.COLORS}', file=sys.stderr)
884 print(f'COLOR_PAIRS = {curses.COLOR_PAIRS}', file=sys.stderr)
888 self.assertEqual(curses.color_content(curses.COLOR_BLACK), (0, 0, 0))
889 curses.color_content(0)
890 maxcolor = curses.COLORS - 1
891 curses.color_content(maxcolor)
894 self.assertRaises(ValueError, curses.color_content, color)
898 if not curses.can_change_color():
901 old = curses.color_content(0)
903 curses.init_color(0, *old)
904 except curses.error:
906 self.addCleanup(curses.init_color, 0, *old)
907 curses.init_color(0, 0, 0, 0)
908 self.assertEqual(curses.color_content(0), (0, 0, 0))
909 curses.init_color(0, 1000, 1000, 1000)
910 self.assertEqual(curses.color_content(0), (1000, 1000, 1000))
912 maxcolor = curses.COLORS - 1
913 old = curses.color_content(maxcolor)
914 curses.init_color(maxcolor, *old)
915 self.addCleanup(curses.init_color, maxcolor, *old)
916 curses.init_color(maxcolor, 0, 500, 1000)
917 self.assertEqual(curses.color_content(maxcolor), (0, 500, 1000))
920 self.assertRaises(ValueError, curses.init_color, color, 0, 0, 0)
922 self.assertRaises(ValueError, curses.init_color, 0, comp, 0, 0)
923 self.assertRaises(ValueError, curses.init_color, 0, 0, comp, 0)
924 self.assertRaises(ValueError, curses.init_color, 0, 0, 0, comp)
927 pair_limit = curses.COLOR_PAIRS
928 if hasattr(curses, 'ncurses_version'):
929 if curses.has_extended_color_support():
930 pair_limit += 2*curses.COLORS + 1
931 if (not curses.has_extended_color_support()
932 or (6, 1) <= curses.ncurses_version < (6, 2)):
938 curses.init_pair(pair_limit - 1, 0, 0)
940 pair_limit = curses.COLOR_PAIRS
945 if not hasattr(curses, 'use_default_colors'):
946 self.assertEqual(curses.pair_content(0),
947 (curses.COLOR_WHITE, curses.COLOR_BLACK))
948 curses.pair_content(0)
951 curses.pair_content(maxpair)
954 self.assertRaises(ValueError, curses.pair_content, pair)
958 old = curses.pair_content(1)
959 curses.init_pair(1, *old)
960 self.addCleanup(curses.init_pair, 1, *old)
962 curses.init_pair(1, 0, 0)
963 self.assertEqual(curses.pair_content(1), (0, 0))
964 maxcolor = curses.COLORS - 1
965 curses.init_pair(1, maxcolor, 0)
966 self.assertEqual(curses.pair_content(1), (maxcolor, 0))
967 curses.init_pair(1, 0, maxcolor)
968 self.assertEqual(curses.pair_content(1), (0, maxcolor))
971 curses.init_pair(maxpair, 0, 0)
972 self.assertEqual(curses.pair_content(maxpair), (0, 0))
975 self.assertRaises(ValueError, curses.init_pair, pair, 0, 0)
977 self.assertRaises(ValueError, curses.init_pair, 1, color, 0)
978 self.assertRaises(ValueError, curses.init_pair, 1, 0, color)
983 attr = curses.color_pair(pair)
984 self.assertEqual(curses.pair_number(attr), pair, attr)
985 self.assertEqual(curses.pair_number(attr | curses.A_BOLD), pair)
986 self.assertEqual(curses.color_pair(0), 0)
987 self.assertEqual(curses.pair_number(0), 0)
992 old = curses.pair_content(0)
994 curses.use_default_colors()
995 except curses.error:
997 self.assertEqual(curses.pair_content(0), (-1, -1))
998 self.assertIn(old, [(curses.COLOR_WHITE, curses.COLOR_BLACK), (-1, -1), (0, 0)])
1002 self.assertEqual(curses.keyname(65), b'A')
1003 self.assertEqual(curses.keyname(13), b'^M')
1004 self.assertEqual(curses.keyname(127), b'^?')
1005 self.assertEqual(curses.keyname(0), b'^@')
1006 self.assertRaises(ValueError, curses.keyname, -1)
1007 self.assertIsInstance(curses.keyname(256), bytes)
1011 curses.has_key(13)
1015 (availmask, oldmask) = curses.mousemask(curses.BUTTON1_PRESSED)
1018 curses.mouseinterval(10)
1020 curses.ungetmouse(0, 0, 0, 0, curses.BUTTON1_PRESSED)
1021 m = curses.getmouse()
1025 w = curses.newwin(10, 10)
1026 p = curses.panel.new_panel(w)
1028 with self.assertRaises(curses.panel.error,
1034 w = curses.newwin(10, 10)
1035 p = curses.panel.new_panel(w)
1047 w = curses.newwin(10, 10)
1048 panel = curses.panel.new_panel(w)
1059 w = curses.newwin(10, 10)
1060 panel = curses.panel.new_panel(w)
1065 lines, cols = curses.LINES, curses.COLS
1066 self.assertIs(curses.is_term_resized(lines, cols), False)
1067 self.assertIs(curses.is_term_resized(lines-1, cols-1), True)
1071 curses.update_lines_cols()
1072 lines, cols = curses.LINES, curses.COLS
1075 curses.resize_term(new_lines, new_cols)
1076 self.assertEqual(curses.LINES, new_lines)
1077 self.assertEqual(curses.COLS, new_cols)
1079 curses.resize_term(lines, cols)
1080 self.assertEqual(curses.LINES, lines)
1081 self.assertEqual(curses.COLS, cols)
1085 curses.update_lines_cols()
1086 lines, cols = curses.LINES, curses.COLS
1089 curses.resizeterm(new_lines, new_cols)
1090 self.assertEqual(curses.LINES, new_lines)
1091 self.assertEqual(curses.COLS, new_cols)
1093 curses.resizeterm(lines, cols)
1094 self.assertEqual(curses.LINES, lines)
1095 self.assertEqual(curses.COLS, cols)
1098 curses.ungetch(b'A')
1100 curses.ungetch('B')
1102 curses.ungetch(67)
1106 curses.ungetch(1025)
1110 @unittest.skipIf(getattr(curses, 'ncurses_version', (99,)) < (5, 8),
1121 curses.unget_wch(ch)
1129 curses.unget_wch(code)
1150 # when converting curses.window.addch to Argument Clinic
1174 win = curses.newwin(5, 15, 2, 5)
1175 box = curses.textpad.Textbox(win, insert_mode=True)
1186 curses.update_lines_cols()
1187 lines, cols = curses.LINES, curses.COLS
1188 curses.LINES = curses.COLS = 0
1189 curses.update_lines_cols()
1190 self.assertEqual(curses.LINES, lines)
1191 self.assertEqual(curses.COLS, cols)
1195 v = curses.ncurses_version
1197 print(f'ncurses_version = {curses.ncurses_version}', flush=True)
1214 r = curses.has_extended_color_support()
1221 for name in curses.ascii.controlnames:
1222 self.assertTrue(hasattr(curses.ascii, name), name)
1233 check(curses.ascii.isalnum, b.isalnum())
1234 check(curses.ascii.isalpha, b.isalpha())
1235 check(curses.ascii.isdigit, b.isdigit())
1236 check(curses.ascii.islower, b.islower())
1237 check(curses.ascii.isspace, b.isspace())
1238 check(curses.ascii.isupper, b.isupper())
1240 check(curses.ascii.isascii, i < 128)
1241 check(curses.ascii.ismeta, i >= 128)
1242 check(curses.ascii.isctrl, i < 32)
1243 check(curses.ascii.iscntrl, i < 32 or i == 127)
1244 check(curses.ascii.isblank, c in ' \t')
1245 check(curses.ascii.isgraph, 32 < i <= 126)
1246 check(curses.ascii.isprint, 32 <= i <= 126)
1247 check(curses.ascii.ispunct, c in string.punctuation)
1248 check(curses.ascii.isxdigit, c in string.hexdigits)
1251 self.assertFalse(curses.ascii.isalnum(i))
1252 self.assertFalse(curses.ascii.isalpha(i))
1253 self.assertFalse(curses.ascii.isdigit(i))
1254 self.assertFalse(curses.ascii.islower(i))
1255 self.assertFalse(curses.ascii.isspace(i))
1256 self.assertFalse(curses.ascii.isupper(i))
1258 self.assertFalse(curses.ascii.isascii(i))
1259 self.assertFalse(curses.ascii.isctrl(i))
1260 self.assertFalse(curses.ascii.iscntrl(i))
1261 self.assertFalse(curses.ascii.isblank(i))
1262 self.assertFalse(curses.ascii.isgraph(i))
1263 self.assertFalse(curses.ascii.isprint(i))
1264 self.assertFalse(curses.ascii.ispunct(i))
1265 self.assertFalse(curses.ascii.isxdigit(i))
1267 self.assertFalse(curses.ascii.ismeta(-1))
1270 ascii = curses.ascii.ascii
1276 ctrl = curses.ascii.ctrl
1283 alt = curses.ascii.alt
1289 unctrl = curses.ascii.unctrl