def test_get_actions(self): h = TextHistory() h.insert('a') h.insert('bc') h.replace('B', pos=1) h.delete(pos=0, length=1) self.assertEqual('Bc', h.text) actions = h.get_actions(1) self.assertEqual(3, len(actions)) insert, replace, delete = actions self.assertIsInstance(insert, InsertAction) self.assertIsInstance(replace, ReplaceAction) self.assertIsInstance(delete, DeleteAction) # insert self.assertEqual(1, insert.from_version) self.assertEqual(2, insert.to_version) self.assertEqual('bc', insert.text) self.assertEqual(1, insert.pos) # replace self.assertEqual(2, replace.from_version) self.assertEqual(3, replace.to_version) self.assertEqual('B', replace.text) self.assertEqual(1, replace.pos) # delete self.assertEqual(3, delete.from_version) self.assertEqual(4, delete.to_version) self.assertEqual(0, delete.pos) self.assertEqual(1, delete.length)
def test_optimized_delete(self): h = TextHistory() h.insert('ABCCDEEE') h.delete(2, 2) h.delete(2, 3) self.assertEqual('ABE', h.text) self.assertEqual(2, len(h.get_actions()))
def test_delete(self): h = TextHistory() self.assertEqual(1, h.insert('abc xyz')) self.assertEqual(2, h.delete(pos=1, length=2)) self.assertEqual('a xyz', h.text) self.assertEqual(2, h.version) self.assertEqual(3, h.delete(pos=3, length=0)) self.assertEqual('a xyz', h.text) self.assertEqual(3, h.version)
def test_optimize_delete(self): h = TextHistory() h.insert('abcdefg') h.delete(2, 2) h.delete(2, 1) actions = h.get_actions() self.assertEqual(2, len(h.get_actions())) insert, delete = actions self.assertIsInstance(insert, InsertAction) self.assertIsInstance(delete, DeleteAction)
def test_optimise_del(self): h = TextHistory() h.insert('abcdefgh') h.delete(2, 2) h.delete(2, 3) actions = h.get_actions() self.assertEqual(2, len(actions)) th = TextHistory() for act in actions: th.action(act) self.assertEqual(h.text, th.text)
def test_delete_opt(self): h = TextHistory() h.insert('a1b2c3d4e5f6g7h8') self.assertEqual('a1b2c3d4e5f6g7h8', h.text) h.delete(pos=3, length=2) self.assertEqual('a1b3d4e5f6g7h8', h.text) h.delete(pos=3, length=6) self.assertEqual('a1b6g7h8', h.text) actions = h.get_actions(1) self.assertEqual(1, len(actions)) action = actions[0] self.assertIsInstance(action, DeleteAction) opt_value = DeleteAction(3, 8, 1, 3) self.assertEqual(action.__dict__, opt_value.__dict__)
def test_get_actions_insert_delete_optimization(self): h = TextHistory() h.insert(text="abdc") h.delete(pos=1, length=2) self.assertEqual(h.text, "ac") all_actions = h.get_actions() self.assertEqual(len(all_actions), 1) insert = all_actions[0] self.assertIsInstance(insert, InsertAction) self.assertEqual(insert.text, "ac")
def test_get_optimized_actions__merge_delete(self): h = TextHistory() h.insert('0123456789') h.delete(3, 2) h.delete(3, 3) h.delete(2, 1) self.assertEqual('0189', h.text) actions = h.get_actions(optimize=True) self.assertEqual(2, len(actions)) insert, delete = actions self.assertIsInstance(insert, InsertAction) self.assertIsInstance(delete, DeleteAction) self.assertEqual(4, delete.to_version) self.assertEqual(1, delete.from_version) self.assertEqual(2, delete.pos) self.assertEqual(6, delete.length)
def test_get_actions__optimyze_1(self): h = TextHistory() h.insert('a') h.insert('b') h.delete(0, 1) h.delete(0, 1) h.replace("abc") actions = h.get_actions() self.assertEqual(3, len(actions)) insert, delete, replace = actions self.assertIsInstance(insert, InsertAction) self.assertIsInstance(delete, DeleteAction) self.assertIsInstance(replace, ReplaceAction) # insert self.assertEqual(0, insert.from_version) self.assertEqual(2, insert.to_version) self.assertEqual("ab", insert.text) #delete self.assertEqual(2, delete.from_version) self.assertEqual(4, delete.to_version) self.assertEqual(2, delete.length)
def test_get_actions_insert_optimization(self): h = TextHistory() h.insert(text="abc") h.insert(text="d") h.delete(pos=0, length=2) h.insert(text="abdc") h.insert(text="d") all_actions = h.get_actions() self.assertEqual(3, len(all_actions)) insert1, delete, insert2 = all_actions self.assertIsInstance(insert1, InsertAction) self.assertIsInstance(delete, DeleteAction) self.assertIsInstance(insert2, InsertAction) self.assertEqual(insert1.text, "abcd") self.assertEqual(insert2.text, "abdcd") self.assertEqual(insert1.pos, 0) self.assertEqual(insert2.pos, 2) self.assertEqual(h.text, "cdabdcd")
def test_delete__bad(self): h = TextHistory() self.assertEqual(1, h.insert('abc')) with self.assertRaises(ValueError): h.delete(pos=10, length=2) with self.assertRaises(ValueError): h.delete(pos=1, length=3) with self.assertRaises(ValueError): h.delete(pos=-1, length=2)
def test_delete(self): h = TextHistory() h.insert('abcdefgh') h.delete(pos=1, length=2) h.delete(pos=1, length=1)