Implement character manipulation APIs

This commit is contained in:
Kovid Goyal
2016-10-19 11:25:55 +05:30
parent 3ae0e4e5ac
commit 56bff2f4a7
3 changed files with 102 additions and 17 deletions

View File

@@ -100,3 +100,64 @@ class TestScreen(BaseTest):
self.ae(str(s.linebuf[4]), 'a\u0306b1\u030623')
self.ae((s.cursor.x, s.cursor.y), (2, 4))
self.assertChanges(t, ignore='cursor', cells={4: ((0, 4),)})
def test_char_manipulation(self):
s, t = self.create_screen()
def init():
s.reset(), t.reset()
s.draw(b'abcde')
s.cursor.bold = True
s.cursor_back(4)
t.reset()
self.ae(s.cursor.x, 1)
init()
s.insert_characters(2)
self.ae(str(s.linebuf[0]), 'a bc')
self.assertTrue(s.linebuf[0].cursor_from(1).bold)
self.assertChanges(t, ignore='cursor', cells={0: ((1, 4),)})
s.cursor_back(1)
s.insert_characters(20)
self.ae(str(s.linebuf[0]), ' ')
self.assertChanges(t, ignore='cursor', cells={0: ((0, 4),)})
s.draw('xココ'.encode('utf-8'))
s.cursor_back(5)
t.reset()
s.insert_characters(1)
self.ae(str(s.linebuf[0]), ' xコ ')
self.assertChanges(t, ignore='cursor', cells={0: ((0, 4),)})
init()
s.delete_characters(2)
self.ae(str(s.linebuf[0]), 'ade ')
self.assertTrue(s.linebuf[0].cursor_from(4).bold)
self.assertFalse(s.linebuf[0].cursor_from(2).bold)
self.assertChanges(t, ignore='cursor', cells={0: ((1, 4),)})
init()
s.erase_characters(2)
self.ae(str(s.linebuf[0]), 'a de')
self.assertTrue(s.linebuf[0].cursor_from(1).bold)
self.assertFalse(s.linebuf[0].cursor_from(4).bold)
self.assertChanges(t, cells={0: ((1, 2),)})
s.erase_characters(20)
self.ae(str(s.linebuf[0]), 'a ')
init()
s.erase_in_line()
self.ae(str(s.linebuf[0]), 'a ')
self.assertTrue(s.linebuf[0].cursor_from(1).bold)
self.assertFalse(s.linebuf[0].cursor_from(0).bold)
self.assertChanges(t, cells={0: ((1, 4),)})
init()
s.erase_in_line(1)
self.ae(str(s.linebuf[0]), ' cde')
self.assertChanges(t, cells={0: ((0, 2),)})
init()
s.erase_in_line(2)
self.ae(str(s.linebuf[0]), ' ')
self.assertChanges(t, cells={0: ((0, 4),)})
init()
s.erase_in_line(2, private=True)
self.ae((False, False, False, False, False), tuple(map(lambda i: s.linebuf[0].cursor_from(i).bold, range(5))))