def filled_line_buf(ynum=5, xnum=5, cursor=Cursor()): ans = LineBuf(ynum, xnum) cursor.x = 0 for i in range(ynum): t = ('{}'.format(i)) * xnum ans.line(i).set_text(t, 0, xnum, cursor) return ans
def create_lbuf(*lines): maxw = max(map(len, lines)) ans = LineBuf(len(lines), maxw) prev_full_length = False for i, l0 in enumerate(lines): ans.line(i).set_text(l0, 0, len(l0), C()) ans.set_continued(i, prev_full_length) prev_full_length = len(l0) == maxw return ans
def test_linebuf(self): old = filled_line_buf(2, 3, filled_cursor()) new = LineBuf(1, 3) new.copy_old(old) self.ae(new.line(0), old.line(1)) new.clear() self.ae(str(new.line(0)), '') old.set_attribute(REVERSE, False) for y in range(old.ynum): for x in range(old.xnum): l0 = old.line(y) c = l0.cursor_from(x) self.assertFalse(c.reverse) self.assertTrue(c.bold) self.assertFalse(old.is_continued(0)) old.set_continued(0, True) self.assertTrue(old.is_continued(0)) self.assertFalse(old.is_continued(1)) lb = filled_line_buf(5, 5, filled_cursor()) lb2 = LineBuf(5, 5) lb2.copy_old(lb) lb.index(0, 4) for i in range(0, 4): self.ae(lb.line(i), lb2.line(i + 1)) self.ae(lb.line(4), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.index(1, 3) self.ae(lb.line(0), lb2.line(0)) self.ae(lb.line(1), lb2.line(2)) self.ae(lb.line(2), lb2.line(3)) self.ae(lb.line(3), lb2.line(1)) self.ae(lb.line(4), lb2.line(4)) self.ae(lb.create_line_copy(1), lb2.line(2)) l2 = lb.create_line_copy(2) lb.copy_line_to(1, l2) self.ae(l2, lb2.line(2)) lb.clear_line(0) self.ae(lb.line(0), LineBuf(1, lb.xnum).create_line_copy(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.reverse_index(0, 4) self.ae(lb.line(0), lb2.line(4)) for i in range(1, 5): self.ae(lb.line(i), lb2.line(i - 1)) lb = filled_line_buf(5, 5, filled_cursor()) clb = filled_line_buf(5, 5, filled_cursor()) lb2 = LineBuf(1, 5) lb.insert_lines(2, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(3), clb.line(1)) self.ae(lb.line(4), clb.line(2)) self.ae(lb.line(1), lb2.line(0)) self.ae(lb.line(2), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(10, 0, lb.ynum - 1) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(10, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) for i in range(1, lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.insert_lines(1, 1, 3) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), lb2.line(0)) self.ae(lb.line(2), clb.line(1)) self.ae(lb.line(3), clb.line(2)) self.ae(lb.line(4), clb.line(4)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(2, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), clb.line(3)) self.ae(lb.line(2), clb.line(4)) self.ae(lb.line(3), lb2.line(0)) self.ae(lb.line(4), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(10, 0, lb.ynum - 1) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(10, 1, lb.ynum - 1) self.ae(lb.line(0), clb.line(0)) for i in range(1, lb.ynum): self.ae(lb.line(i), lb2.line(0)) lb = filled_line_buf(5, 5, filled_cursor()) lb.delete_lines(1, 1, 3) self.ae(lb.line(0), clb.line(0)) self.ae(lb.line(1), clb.line(2)) self.ae(lb.line(2), clb.line(3)) self.ae(lb.line(3), lb2.line(0)) self.ae(lb.line(4), clb.line(4)) lb = filled_line_buf(5, 5, filled_cursor()) l0 = lb.line(0) l0.add_combining_char(1, '\u0300') l0.clear_text(1, 2) self.ae(str(l0), '0 00') self.assertEqualAttributes(l0.cursor_from(1), l0.cursor_from(0)) lb = filled_line_buf(10, 10, filled_cursor()) lb.clear() lb2 = LineBuf(lb.ynum, lb.ynum) for i in range(lb.ynum): self.ae(lb.line(i), lb2.line(i))
def line_comparison_rewrap(self, lb, *lines): lb2 = LineBuf(len(lines), max(map(len, lines))) self.rewrap(lb, lb2) self.line_comparison(lb2, *lines) return lb2
def test_rewrap_simple(self): ' Same width buffers ' lb = filled_line_buf(5, 5) lb2 = LineBuf(lb.ynum, lb.xnum) self.rewrap(lb, lb2) for i in range(lb.ynum): self.ae(lb2.line(i), lb.line(i)) lb2 = LineBuf(8, 5) cy = self.rewrap(lb, lb2)[1] self.ae(cy, 5) for i in range(lb.ynum): self.ae(lb2.line(i), lb.line(i)) empty = LineBuf(1, lb2.xnum) for i in range(lb.ynum, lb2.ynum): self.ae(str(lb2.line(i)), str(empty.line(0))) lb2 = LineBuf(3, 5) cy = self.rewrap(lb, lb2)[1] self.ae(cy, 3) for i in range(lb2.ynum): self.ae(lb2.line(i), lb.line(i + 2)) self.assertFalse(lb.dirty_lines()) self.ae(lb2.dirty_lines(), list(range(lb2.ynum)))
def create(t): lb = create.lb = LineBuf(1, len(t)) lf = lb.line(0) lf.set_text(t, 0, len(t), C()) return lf
def test_line(self): lb = LineBuf(2, 3) for y in range(lb.ynum): line = lb.line(y) self.ae(str(line), '') for x in range(lb.xnum): self.ae(line[x], '\0') with self.assertRaises(IndexError): lb.line(lb.ynum) with self.assertRaises(IndexError): lb.line(0)[lb.xnum] l0 = lb.line(0) l0.set_text(' ', 0, len(' '), C()) l0.add_combining_char(0, '\u0300') self.ae(l0[0], ' \u0300') l0.add_combining_char(0, '\U000e0100') self.ae(l0[0], ' \u0300\U000e0100') l0.add_combining_char(0, '\u0302') self.ae(l0[0], ' \u0300\u0302') self.ae(l0[1], '\0') self.ae(str(l0), ' \u0300\u0302') t = 'Testing with simple text' lb = LineBuf(2, len(t)) l0 = lb.line(0) l0.set_text(t, 0, len(t), C()) self.ae(str(l0), t) l0.set_text('a', 0, 1, C()) self.assertEqual(str(l0), 'a' + t[1:]) c = C(3, 5) c.bold = c.italic = c.reverse = c.strikethrough = c.dim = True c.fg = c.bg = c.decoration_fg = 0x0101 self.ae(c, c) c2, c3 = c.copy(), c.copy() self.ae(repr(c), repr(c2)) self.ae(c, c2) c2.bold = False self.assertNotEqual(c, c2) l0.set_text(t, 0, len(t), C()) l0.apply_cursor(c2, 3) self.assertEqualAttributes(c2, l0.cursor_from(3)) l0.apply_cursor(c2, 0, len(l0)) for i in range(len(l0)): self.assertEqualAttributes(c2, l0.cursor_from(i)) l0.apply_cursor(c3, 0) self.assertEqualAttributes(c3, l0.cursor_from(0)) l0.copy_char(0, l0, 1) self.assertEqualAttributes(c3, l0.cursor_from(1)) t = '0123456789' lb = LineBuf(1, len(t)) l3 = lb.line(0) l3.set_text(t, 0, len(t), C()) self.ae(t, str(l3)) l3.right_shift(4, 2) self.ae('0123454567', str(l3)) l3.set_text(t, 0, len(t), C()) l3.right_shift(0, 0) self.ae(t, str(l3)) l3.right_shift(0, 1) self.ae(str(l3), '0' + t[:-1]) l3.set_text(t, 0, len(t), C()) l3.left_shift(0, 2) self.ae(str(l3), t[2:] + '89') l3.set_text(t, 0, len(t), C()) l3.left_shift(7, 3) self.ae(str(l3), t) l3.set_text(t, 0, len(t), C()) q = C() q.bold = q.italic = q.reverse = q.strikethrough = c.dim = True q.decoration = 2 c = C() c.x = 3 l3.set_text('axyb', 1, 2, c) self.ae(str(l3), '012xy56789') l3.set_char(0, 'x', 1, q) self.assertEqualAttributes(l3.cursor_from(0), q)