def setUp(self): self.io = IOMock() with self.io: self.interface = DexterInterface() self.view = self.interface.view self.terminal = self.interface.terminal
class TestDexterView(unittest.TestCase): def setUp(self): self.io = IOMock() with self.io: self.interface = DexterInterface() self.view = self.interface.view self.terminal = self.interface.terminal def tearDown(self): with self.terminal: pass def get_line(self, y): return "".join(chr(self.terminal.stdscr.inch(y, x)) for x in range(self.terminal.width)) def get_lines(self): height = self.terminal.height return [self.get_line(y) for y in range(height)] def blank_lines(self, n): return [self.blank_line] * n @property def blank_line(self): return " " * self.terminal.width def test_append_no_newline(self): self.view.append("Hello world") self.assertEqual(self.view.contents, ["Hello world"]) def test_append_with_newlines(self): self.view.append("ABC\nDEF\nGHI") self.assertEqual(self.view.contents, ["ABC", "DEF", "GHI"]) def test_multiple_append(self): self.view.append("Line 1") self.view.append("Line 2\nLine 3") self.assertEqual(self.view.contents, ["Line 1", "Line 2", "Line 3"]) def assertLines(self, lines): width = self.terminal.width expected = self.blank_lines(self.terminal.height - len(lines)) expected += [line.ljust(width) for line in lines] self.assertEqual(self.get_lines(), expected) def test_draw_empty(self): with self.io: self.interface.redraw() self.assertLines(["msglog>"]) def test_draw_one_line(self): with self.io: self.view.append("Hello") self.interface.redraw() self.assertLines(["Hello", "msglog>"]) def test_draw_two_lines(self): with self.io: self.view.append("Hello\nworld") self.interface.redraw() self.assertLines(["Hello", "world", "msglog>"]) def test_draw_long_line(self): with self.io: width = self.terminal.width self.view.append("q" * (width + 5)) self.interface.redraw() self.assertLines(["q" * width, "msglog>"]) # Trimmed to terminal width