def test_search(self): screen = get_screen() y, x = screen.getmaxyx() lines = get_random_lines(300) lines1 = get_random_lines(3) prefix = lines[random.randint(y, 299)][:3] for i in range(3): lines.insert(random.randint(y, 299 + i), prefix + lines1[i][3:]) indices = [ind for ind, line in enumerate(lines) if prefix in line] sl = ScrollableList(lines) ScreenManager.draw_all() commands.add([ord(c) for c in prefix]) commands.add(ord('\n')) sl.handle_search() next_index = itertools.cycle(indices).next for i in range(10): index = next_index() self.assertEquals(sl.get_current_index(), index) self.assertTrue(lines[index] in map(screen.get_line, range(y))) sl.handle_keypress('n') sl.move_to_bottom() if prefix not in screen.get_line(-1): sl.handle_keypress('N') previous_index = itertools.cycle(reversed(indices)).next for i in range(10): index = previous_index() self.assertEquals(sl.get_current_index(), index) self.assertTrue(lines[index] in map(screen.get_line, range(y))) sl.handle_keypress('N')
def test_moving(self): lines = get_random_lines() sl = ScrollableList(lines) ScreenManager.draw_all() screen = get_screen() y, x = screen.getmaxyx() ind = sl.get_current_index self.assertEquals(ind(), 0) for i in range(y): self.assertEquals(screen.get_line(i), lines[i]) sl.move_up() self.assertEquals(ind(), 0) sl.move_to_bottom() self.assertEquals(ind(), len(lines) - 1) sl.move_down() self.assertEquals(ind(), len(lines) - 1) self.assertEquals(screen.get_line(0), lines[-y]) sl.move_to_top() self.assertEquals(ind(), 0) self.assertEquals(screen.get_line(-1), lines[y - 1]) for i in range(len(lines)): sl.move_down() self.assertEquals(ind(), len(lines) - 1) self.assertEquals(screen.get_line(0), lines[-y]) self.assertEquals(screen.get_line(-1), lines[-1]) self._move_down_and_up(sl)
def test_title(self): screen = get_screen() y = 10 screen.setmaxyx(y, 20) ta = TextArea() ta.minx = 10 lines = [chr(i) for i in range(97, 96 + y)] ta.show_text('\n'.join(lines)) self.assertEqual(screen.get_line(0), lines[0]) title = '' while len(title) < 10: title += get_random_lines(1, 20)[0].replace(' ', '') title = title[:10] ta.set_title(title) ta.draw() self.assertEqual(screen.get_line(0), title) title *= 3 ta.set_title(title) ta.draw() self.assertEqual(screen.get_line(0), '') screen.setmaxyx(y, 30) ScreenManager.resize() self.assertEqual(screen.get_line(0), title)
def test_scrolling(self): lines = get_random_lines() sl = ScrollableList(lines) ScreenManager.draw_all() screen = get_screen() y, x = screen.getmaxyx() ind = sl.get_current_index for i in range(len(lines) - y): sl.scroll_down() self.assertEquals(ind(), i + 1) self.assertEquals(screen.get_line(0), lines[i + 1]) self.assertEquals(screen.get_line(-1), lines[-1]) up = min(len(lines) - y, y) sl.scroll_screen_up() self.assertEquals(screen.get_line(-1), lines[-up-1])
def test_moving(self): win = curses.newwin(0, 0) t = TextInput(win, '>>>') screen = get_screen() line = '1 2 3 4 5 6 7 all good children go to heaven' for l in line: t.do_command(ord(l)) self.assertEquals(screen.get_line(0), t.gather()) self.assertEquals(t.gather(), '>>>' + line) t.move_to_new_window(curses.newwin(5, 0)) self.assertEquals(screen.get_line(5), t.gather()) self.assertEquals(t.gather(), '>>>' + line) t.move_to_new_window(curses.newwin(10, 10)) self.assertEquals(screen.get_line(10), t.gather()) self.assertEquals(t.gather(), '>>>' + line)
def test_text(self): screen = get_screen() screen.setmaxyx(10, 20) ta = TextArea() ta.minx = 10 lines = [] # we need some lines longer than 10 while not 0 < len([l for l in lines if len(l) > 10]) < 5: lines = get_random_lines(5, 15) def check(): for index, line in enumerate(lines): self.assertEqual(screen.get_line(index), line) ta.show_text('\n'.join(lines)) check() screen.setmaxyx(10, 10) ScreenManager.resize() nl = [] for line in lines: nl += wrap(line, 10) lines = nl check() assert len(lines) < 10 screen.setmaxyx(len(lines), 10) ScreenManager.resize() check() screen.setmaxyx(len(lines) - 1, 10) ScreenManager.resize() old, lines = lines, [''] * (len(lines) - 1) check() lines = old screen.setmaxyx(len(lines), 10) ScreenManager.resize() check() screen.setmaxyx(10, 9) ScreenManager.resize() lines = [''] * len(lines) check()
def _scroll_down_and_up(self, sl): sl.move_to_top() ind = sl.get_current_index screen = get_screen() self.assertEquals(ind(), 0) i = 0 item_id = sl.lines[i][0] while screen.get_line(-1) != sl.lines[-1][1]: sl.scroll_down() i += 1 item_id = sl.lines[i][0] self.assertEquals(ind(), item_id) sl.move_to_bottom() i = sl.last item_id = sl.lines[i][0] while screen.get_line(0) != sl.lines[0][1]: sl.scroll_up() i -= 1 item_id = sl.lines[i][0] self.assertEquals(ind(), item_id)
def test_resize(self): lines = get_random_lines() sl = ScrollableList(lines) ScreenManager.draw_all() screen = get_screen() y, x = maxyx = screen.getmaxyx() j = 0 def resize(): screen.setmaxyx(y, x) ScreenManager.resize() if not sl.hidden: self._move_down_and_up(sl) self._scroll_down_and_up(sl) if j % 2 == 0: sl.move_to_bottom() while y > 1: y -= random.randint(1, 20) if y < 1: y = 1 j += 1 resize() while y < maxyx[0]: y += random.randint(1, 20) if y > maxyx[0]: y = maxyx[0] j -= 1 resize() while x > 1: x -= random.randint(1, 20) if x < 1: x = 1 j += 1 resize() while x > maxyx[1]: x += random.randint(1, 20) if x > maxyx[1]: x = maxyx[1] j += 1 resize()
def test_current_month_cal(self): today = datetime.date.today() Calendar(today.year, today.month, today.day) ScreenManager.draw_all() # check the first line screen = get_screen() lines = screen.lines days = 'Mo Tu We Th Fr Sa Su' self.assertEquals(lines[0], list(days + ' ' * (screen.getmaxyx()[1] - len(days)))) # check the location of the first day first = datetime.date(today.year, today.month, 1) x = first.weekday() * 3 self.assertEquals(lines[1][x:x + 2], list(' 1')) # check the location of the last day last = lastday(today) x = datetime.date(today.year, today.month, last).weekday() * 3 weeks = int(math.ceil((last - (7 - first.weekday())) / 7.0)) + 1 self.assertEquals(lines[weeks][x:x + 2], list(str(last)))
def test_input(self): win = curses.newwin(0, 0) t = TextInput(win, '/') screen = get_screen() line = '' def check(): self.assertEquals(screen.get_line(0), t.gather()) self.assertEquals(t.gather(), '/' + line) check() letters = [chr(c) for c in range(97, 123)] for i in range(15): l = random.choice(letters) line += l t.do_command(ord(l)) check() t.do_command(curses.KEY_BACKSPACE) line = line[:-1] check() for i in range(len(line) + 5): t.do_command(curses.KEY_LEFT) check() l = random.choice(letters) t.do_command(ord(l)) line = l + line check() t.do_command(curses.KEY_DC) line = line[0] + line[2:] check() t.do_command(curses.KEY_END) l = random.choice(letters) t.do_command(ord(l)) line += l check() t.do_command(curses.KEY_HOME) l = random.choice(letters) t.do_command(ord(l)) line = l + line check() for i in range(len(line) + 5): t.do_command(curses.KEY_RIGHT) check() l = random.choice(letters) t.do_command(ord(l)) line += l check() for i in range(len(line)): t.do_command(curses.KEY_BACKSPACE) line = line[:-1] check() self.assertEquals(line, '') t.do_command(curses.KEY_BACKSPACE) self.assertEquals(screen.get_line(0), t.gather()) self.assertEquals(t.gather(), '')