Index: tools/telemetry/third_party/rope/ropetest/historytest.py |
diff --git a/tools/telemetry/third_party/rope/ropetest/historytest.py b/tools/telemetry/third_party/rope/ropetest/historytest.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2eaa92cafe43fe4e990bdf684f17a780931a920d |
--- /dev/null |
+++ b/tools/telemetry/third_party/rope/ropetest/historytest.py |
@@ -0,0 +1,416 @@ |
+try: |
+ import unittest2 as unittest |
+except ImportError: |
+ import unittest |
+ |
+import rope.base.history |
+from rope.base import exceptions |
+import rope.base.change |
+from ropetest import testutils |
+ |
+ |
+class HistoryTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ super(HistoryTest, self).setUp() |
+ self.project = testutils.sample_project() |
+ self.history = self.project.history |
+ |
+ def tearDown(self): |
+ testutils.remove_project(self.project) |
+ super(HistoryTest, self).tearDown() |
+ |
+ def test_undoing_writes(self): |
+ my_file = self.project.root.create_file('my_file.txt') |
+ my_file.write('text1') |
+ self.history.undo() |
+ self.assertEquals('', my_file.read()) |
+ |
+ def test_moving_files(self): |
+ my_file = self.project.root.create_file('my_file.txt') |
+ my_file.move('new_file.txt') |
+ self.history.undo() |
+ self.assertEquals('', my_file.read()) |
+ |
+ def test_moving_files_to_folders(self): |
+ my_file = self.project.root.create_file('my_file.txt') |
+ my_folder = self.project.root.create_folder('my_folder') |
+ my_file.move(my_folder.path) |
+ self.history.undo() |
+ self.assertEquals('', my_file.read()) |
+ |
+ def test_writing_files_that_does_not_change_contents(self): |
+ my_file = self.project.root.create_file('my_file.txt') |
+ my_file.write('') |
+ self.project.history.undo() |
+ self.assertFalse(my_file.exists()) |
+ |
+ |
+class IsolatedHistoryTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ super(IsolatedHistoryTest, self).setUp() |
+ self.project = testutils.sample_project() |
+ self.history = rope.base.history.History(self.project) |
+ self.file1 = self.project.root.create_file('file1.txt') |
+ self.file2 = self.project.root.create_file('file2.txt') |
+ |
+ def tearDown(self): |
+ testutils.remove_project(self.project) |
+ super(IsolatedHistoryTest, self).tearDown() |
+ |
+ def test_simple_undo(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.assertEquals('1', self.file1.read()) |
+ self.history.undo() |
+ self.assertEquals('', self.file1.read()) |
+ |
+ def test_tobe_undone(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ self.assertEquals(None, self.history.tobe_undone) |
+ self.history.do(change1) |
+ self.assertEquals(change1, self.history.tobe_undone) |
+ change2 = rope.base.change.ChangeContents(self.file1, '2') |
+ self.history.do(change2) |
+ self.assertEquals(change2, self.history.tobe_undone) |
+ self.history.undo() |
+ self.assertEquals(change1, self.history.tobe_undone) |
+ |
+ def test_tobe_redone(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.assertEquals(None, self.history.tobe_redone) |
+ self.history.undo() |
+ self.assertEquals(change, self.history.tobe_redone) |
+ |
+ def test_undo_limit(self): |
+ history = rope.base.history.History(self.project, maxundos=1) |
+ history.do(rope.base.change.ChangeContents(self.file1, '1')) |
+ history.do(rope.base.change.ChangeContents(self.file1, '2')) |
+ try: |
+ history.undo() |
+ with self.assertRaises(exceptions.HistoryError): |
+ history.undo() |
+ finally: |
+ self.assertEquals('1', self.file1.read()) |
+ |
+ def test_simple_redo(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.history.undo() |
+ self.history.redo() |
+ self.assertEquals('1', self.file1.read()) |
+ |
+ def test_simple_re_undo(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.history.undo() |
+ self.history.redo() |
+ self.history.undo() |
+ self.assertEquals('', self.file1.read()) |
+ |
+ def test_multiple_undos(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ change = rope.base.change.ChangeContents(self.file1, '2') |
+ self.history.do(change) |
+ self.history.undo() |
+ self.assertEquals('1', self.file1.read()) |
+ change = rope.base.change.ChangeContents(self.file1, '3') |
+ self.history.do(change) |
+ self.history.undo() |
+ self.assertEquals('1', self.file1.read()) |
+ self.history.redo() |
+ self.assertEquals('3', self.file1.read()) |
+ |
+ def test_undo_list_underflow(self): |
+ with self.assertRaises(exceptions.HistoryError): |
+ self.history.undo() |
+ |
+ def test_redo_list_underflow(self): |
+ with self.assertRaises(exceptions.HistoryError): |
+ self.history.redo() |
+ |
+ def test_dropping_undone_changes(self): |
+ self.file1.write('1') |
+ with self.assertRaises(exceptions.HistoryError): |
+ self.history.undo(drop=True) |
+ self.history.redo() |
+ |
+ def test_undoing_choosen_changes(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.history.undo(change) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertFalse(self.history.undo_list) |
+ |
+ def test_undoing_choosen_changes2(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change1) |
+ self.history.do(rope.base.change.ChangeContents(self.file1, '2')) |
+ self.history.undo(change1) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertFalse(self.history.undo_list) |
+ |
+ def test_undoing_choosen_changes_not_undoing_others(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change1) |
+ self.history.do(rope.base.change.ChangeContents(self.file2, '2')) |
+ self.history.undo(change1) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertEquals('2', self.file2.read()) |
+ |
+ def test_undoing_writing_after_moving(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change1) |
+ self.history.do(rope.base.change.MoveResource(self.file1, 'file3.txt')) |
+ file3 = self.project.get_resource('file3.txt') |
+ self.history.undo(change1) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertFalse(file3.exists()) |
+ |
+ def test_undoing_folder_movements_for_undoing_writes_inside_it(self): |
+ folder = self.project.root.create_folder('folder') |
+ file3 = folder.create_file('file3.txt') |
+ change1 = rope.base.change.ChangeContents(file3, '1') |
+ self.history.do(change1) |
+ self.history.do(rope.base.change.MoveResource(folder, 'new_folder')) |
+ new_folder = self.project.get_resource('new_folder') |
+ self.history.undo(change1) |
+ self.assertEquals('', file3.read()) |
+ self.assertFalse(new_folder.exists()) |
+ |
+ def test_undoing_changes_that_depend_on_a_dependant_change(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change1) |
+ changes = rope.base.change.ChangeSet('2nd change') |
+ changes.add_change(rope.base.change.ChangeContents(self.file1, '2')) |
+ changes.add_change(rope.base.change.ChangeContents(self.file2, '2')) |
+ self.history.do(changes) |
+ self.history.do(rope.base.change.MoveResource(self.file2, 'file3.txt')) |
+ file3 = self.project.get_resource('file3.txt') |
+ |
+ self.history.undo(change1) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertEquals('', self.file2.read()) |
+ self.assertFalse(file3.exists()) |
+ |
+ def test_undoing_writes_for_undoing_folder_movements_containing_it(self): |
+ folder = self.project.root.create_folder('folder') |
+ old_file = folder.create_file('file3.txt') |
+ change1 = rope.base.change.MoveResource(folder, 'new_folder') |
+ self.history.do(change1) |
+ new_file = self.project.get_resource('new_folder/file3.txt') |
+ self.history.do(rope.base.change.ChangeContents(new_file, '1')) |
+ self.history.undo(change1) |
+ self.assertEquals('', old_file.read()) |
+ self.assertFalse(new_file.exists()) |
+ |
+ def test_undoing_not_available_change(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ with self.assertRaises(exceptions.HistoryError): |
+ self.history.undo(change) |
+ |
+ def test_ignoring_ignored_resources(self): |
+ self.project.set('ignored_resources', ['ignored*']) |
+ ignored = self.project.get_file('ignored.txt') |
+ change = rope.base.change.CreateResource(ignored) |
+ self.history.do(change) |
+ self.assertTrue(ignored.exists()) |
+ self.assertEquals(0, len(self.history.undo_list)) |
+ |
+ def test_get_file_undo_list_simple(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.assertEquals(set([change]), |
+ set(self.history.get_file_undo_list(self.file1))) |
+ |
+ def test_get_file_undo_list_for_moves(self): |
+ change = rope.base.change.MoveResource(self.file1, 'file2.txt') |
+ self.history.do(change) |
+ self.assertEquals(set([change]), |
+ set(self.history.get_file_undo_list(self.file1))) |
+ |
+ # XXX: What happens for moves before the file is created? |
+ def xxx_test_get_file_undo_list_and_moving_its_contining_folder(self): |
+ folder = self.project.root.create_folder('folder') |
+ old_file = folder.create_file('file3.txt') |
+ change1 = rope.base.change.MoveResource(folder, 'new_folder') |
+ self.history.do(change1) |
+ self.assertEquals(set([change1]), |
+ set(self.history.get_file_undo_list(old_file))) |
+ |
+ def test_clearing_redo_list_after_do(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ self.history.do(change) |
+ self.history.undo() |
+ self.history.do(change) |
+ self.assertEquals(0, len(self.history.redo_list)) |
+ |
+ def test_undoing_a_not_yet_performed_change(self): |
+ change = rope.base.change.ChangeContents(self.file1, '1') |
+ str(change) |
+ with self.assertRaises(exceptions.HistoryError): |
+ change.undo() |
+ |
+ def test_clearing_up_the_history(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ change2 = rope.base.change.ChangeContents(self.file1, '2') |
+ self.history.do(change1) |
+ self.history.do(change2) |
+ self.history.undo() |
+ self.history.clear() |
+ self.assertEquals(0, len(self.history.undo_list)) |
+ self.assertEquals(0, len(self.history.redo_list)) |
+ |
+ def test_redoing_choosen_changes_not_undoing_others(self): |
+ change1 = rope.base.change.ChangeContents(self.file1, '1') |
+ change2 = rope.base.change.ChangeContents(self.file2, '2') |
+ self.history.do(change1) |
+ self.history.do(change2) |
+ self.history.undo() |
+ self.history.undo() |
+ redone = self.history.redo(change2) |
+ self.assertEquals([change2], redone) |
+ self.assertEquals('', self.file1.read()) |
+ self.assertEquals('2', self.file2.read()) |
+ |
+ |
+class SavingHistoryTest(unittest.TestCase): |
+ |
+ def setUp(self): |
+ super(SavingHistoryTest, self).setUp() |
+ self.project = testutils.sample_project() |
+ self.history = rope.base.history.History(self.project) |
+ self.to_data = rope.base.change.ChangeToData() |
+ self.to_change = rope.base.change.DataToChange(self.project) |
+ |
+ def tearDown(self): |
+ testutils.remove_project(self.project) |
+ super(SavingHistoryTest, self).tearDown() |
+ |
+ def test_simple_set_saving(self): |
+ data = self.to_data(rope.base.change.ChangeSet('testing')) |
+ change = self.to_change(data) |
+ self.assertEquals('testing', str(change)) |
+ |
+ def test_simple_change_content_saving(self): |
+ myfile = self.project.get_file('myfile.txt') |
+ myfile.create() |
+ myfile.write('1') |
+ data = self.to_data(rope.base.change.ChangeContents(myfile, '2')) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertEquals('2', myfile.read()) |
+ self.history.undo() |
+ self.assertEquals('1', change.old_contents) |
+ |
+ def test_move_resource_saving(self): |
+ myfile = self.project.root.create_file('myfile.txt') |
+ myfolder = self.project.root.create_folder('myfolder') |
+ data = self.to_data(rope.base.change.MoveResource(myfile, 'myfolder')) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertFalse(myfile.exists()) |
+ self.assertTrue(myfolder.has_child('myfile.txt')) |
+ self.history.undo() |
+ self.assertTrue(myfile.exists()) |
+ self.assertFalse(myfolder.has_child('myfile.txt')) |
+ |
+ def test_move_resource_saving_for_folders(self): |
+ myfolder = self.project.root.create_folder('myfolder') |
+ newfolder = self.project.get_folder('newfolder') |
+ change = rope.base.change.MoveResource(myfolder, 'newfolder') |
+ self.history.do(change) |
+ |
+ data = self.to_data(change) |
+ change = self.to_change(data) |
+ change.undo() |
+ self.assertTrue(myfolder.exists()) |
+ self.assertFalse(newfolder.exists()) |
+ |
+ def test_create_file_saving(self): |
+ myfile = self.project.get_file('myfile.txt') |
+ data = self.to_data(rope.base.change.CreateFile(self.project.root, |
+ 'myfile.txt')) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertTrue(myfile.exists()) |
+ self.history.undo() |
+ self.assertFalse(myfile.exists()) |
+ |
+ def test_create_folder_saving(self): |
+ myfolder = self.project.get_folder('myfolder') |
+ data = self.to_data(rope.base.change.CreateFolder(self.project.root, |
+ 'myfolder')) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertTrue(myfolder.exists()) |
+ self.history.undo() |
+ self.assertFalse(myfolder.exists()) |
+ |
+ def test_create_resource_saving(self): |
+ myfile = self.project.get_file('myfile.txt') |
+ data = self.to_data(rope.base.change.CreateResource(myfile)) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertTrue(myfile.exists()) |
+ self.history.undo() |
+ self.assertFalse(myfile.exists()) |
+ |
+ def test_remove_resource_saving(self): |
+ myfile = self.project.root.create_file('myfile.txt') |
+ data = self.to_data(rope.base.change.RemoveResource(myfile)) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertFalse(myfile.exists()) |
+ |
+ def test_change_set_saving(self): |
+ change = rope.base.change.ChangeSet('testing') |
+ myfile = self.project.get_file('myfile.txt') |
+ change.add_change(rope.base.change.CreateResource(myfile)) |
+ change.add_change(rope.base.change.ChangeContents(myfile, '1')) |
+ |
+ data = self.to_data(change) |
+ change = self.to_change(data) |
+ self.history.do(change) |
+ self.assertEquals('1', myfile.read()) |
+ self.history.undo() |
+ self.assertFalse(myfile.exists()) |
+ |
+ def test_writing_and_reading_history(self): |
+ history_file = self.project.get_file('history.pickle') # noqa |
+ self.project.set('save_history', True) |
+ history = rope.base.history.History(self.project) |
+ myfile = self.project.get_file('myfile.txt') |
+ history.do(rope.base.change.CreateResource(myfile)) |
+ history.write() |
+ |
+ history = rope.base.history.History(self.project) |
+ history.undo() |
+ self.assertFalse(myfile.exists()) |
+ |
+ def test_writing_and_reading_history2(self): |
+ history_file = self.project.get_file('history.pickle') # noqa |
+ self.project.set('save_history', True) |
+ history = rope.base.history.History(self.project) |
+ myfile = self.project.get_file('myfile.txt') |
+ history.do(rope.base.change.CreateResource(myfile)) |
+ history.undo() |
+ history.write() |
+ |
+ history = rope.base.history.History(self.project) |
+ history.redo() |
+ self.assertTrue(myfile.exists()) |
+ |
+ |
+def suite(): |
+ result = unittest.TestSuite() |
+ result.addTests(unittest.makeSuite(HistoryTest)) |
+ result.addTests(unittest.makeSuite(IsolatedHistoryTest)) |
+ result.addTests(unittest.makeSuite(SavingHistoryTest)) |
+ return result |
+ |
+if __name__ == '__main__': |
+ unittest.main() |