Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(241)

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/historytest.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 try:
2 import unittest2 as unittest
3 except ImportError:
4 import unittest
5
6 import rope.base.history
7 from rope.base import exceptions
8 import rope.base.change
9 from ropetest import testutils
10
11
12 class HistoryTest(unittest.TestCase):
13
14 def setUp(self):
15 super(HistoryTest, self).setUp()
16 self.project = testutils.sample_project()
17 self.history = self.project.history
18
19 def tearDown(self):
20 testutils.remove_project(self.project)
21 super(HistoryTest, self).tearDown()
22
23 def test_undoing_writes(self):
24 my_file = self.project.root.create_file('my_file.txt')
25 my_file.write('text1')
26 self.history.undo()
27 self.assertEquals('', my_file.read())
28
29 def test_moving_files(self):
30 my_file = self.project.root.create_file('my_file.txt')
31 my_file.move('new_file.txt')
32 self.history.undo()
33 self.assertEquals('', my_file.read())
34
35 def test_moving_files_to_folders(self):
36 my_file = self.project.root.create_file('my_file.txt')
37 my_folder = self.project.root.create_folder('my_folder')
38 my_file.move(my_folder.path)
39 self.history.undo()
40 self.assertEquals('', my_file.read())
41
42 def test_writing_files_that_does_not_change_contents(self):
43 my_file = self.project.root.create_file('my_file.txt')
44 my_file.write('')
45 self.project.history.undo()
46 self.assertFalse(my_file.exists())
47
48
49 class IsolatedHistoryTest(unittest.TestCase):
50
51 def setUp(self):
52 super(IsolatedHistoryTest, self).setUp()
53 self.project = testutils.sample_project()
54 self.history = rope.base.history.History(self.project)
55 self.file1 = self.project.root.create_file('file1.txt')
56 self.file2 = self.project.root.create_file('file2.txt')
57
58 def tearDown(self):
59 testutils.remove_project(self.project)
60 super(IsolatedHistoryTest, self).tearDown()
61
62 def test_simple_undo(self):
63 change = rope.base.change.ChangeContents(self.file1, '1')
64 self.history.do(change)
65 self.assertEquals('1', self.file1.read())
66 self.history.undo()
67 self.assertEquals('', self.file1.read())
68
69 def test_tobe_undone(self):
70 change1 = rope.base.change.ChangeContents(self.file1, '1')
71 self.assertEquals(None, self.history.tobe_undone)
72 self.history.do(change1)
73 self.assertEquals(change1, self.history.tobe_undone)
74 change2 = rope.base.change.ChangeContents(self.file1, '2')
75 self.history.do(change2)
76 self.assertEquals(change2, self.history.tobe_undone)
77 self.history.undo()
78 self.assertEquals(change1, self.history.tobe_undone)
79
80 def test_tobe_redone(self):
81 change = rope.base.change.ChangeContents(self.file1, '1')
82 self.history.do(change)
83 self.assertEquals(None, self.history.tobe_redone)
84 self.history.undo()
85 self.assertEquals(change, self.history.tobe_redone)
86
87 def test_undo_limit(self):
88 history = rope.base.history.History(self.project, maxundos=1)
89 history.do(rope.base.change.ChangeContents(self.file1, '1'))
90 history.do(rope.base.change.ChangeContents(self.file1, '2'))
91 try:
92 history.undo()
93 with self.assertRaises(exceptions.HistoryError):
94 history.undo()
95 finally:
96 self.assertEquals('1', self.file1.read())
97
98 def test_simple_redo(self):
99 change = rope.base.change.ChangeContents(self.file1, '1')
100 self.history.do(change)
101 self.history.undo()
102 self.history.redo()
103 self.assertEquals('1', self.file1.read())
104
105 def test_simple_re_undo(self):
106 change = rope.base.change.ChangeContents(self.file1, '1')
107 self.history.do(change)
108 self.history.undo()
109 self.history.redo()
110 self.history.undo()
111 self.assertEquals('', self.file1.read())
112
113 def test_multiple_undos(self):
114 change = rope.base.change.ChangeContents(self.file1, '1')
115 self.history.do(change)
116 change = rope.base.change.ChangeContents(self.file1, '2')
117 self.history.do(change)
118 self.history.undo()
119 self.assertEquals('1', self.file1.read())
120 change = rope.base.change.ChangeContents(self.file1, '3')
121 self.history.do(change)
122 self.history.undo()
123 self.assertEquals('1', self.file1.read())
124 self.history.redo()
125 self.assertEquals('3', self.file1.read())
126
127 def test_undo_list_underflow(self):
128 with self.assertRaises(exceptions.HistoryError):
129 self.history.undo()
130
131 def test_redo_list_underflow(self):
132 with self.assertRaises(exceptions.HistoryError):
133 self.history.redo()
134
135 def test_dropping_undone_changes(self):
136 self.file1.write('1')
137 with self.assertRaises(exceptions.HistoryError):
138 self.history.undo(drop=True)
139 self.history.redo()
140
141 def test_undoing_choosen_changes(self):
142 change = rope.base.change.ChangeContents(self.file1, '1')
143 self.history.do(change)
144 self.history.undo(change)
145 self.assertEquals('', self.file1.read())
146 self.assertFalse(self.history.undo_list)
147
148 def test_undoing_choosen_changes2(self):
149 change1 = rope.base.change.ChangeContents(self.file1, '1')
150 self.history.do(change1)
151 self.history.do(rope.base.change.ChangeContents(self.file1, '2'))
152 self.history.undo(change1)
153 self.assertEquals('', self.file1.read())
154 self.assertFalse(self.history.undo_list)
155
156 def test_undoing_choosen_changes_not_undoing_others(self):
157 change1 = rope.base.change.ChangeContents(self.file1, '1')
158 self.history.do(change1)
159 self.history.do(rope.base.change.ChangeContents(self.file2, '2'))
160 self.history.undo(change1)
161 self.assertEquals('', self.file1.read())
162 self.assertEquals('2', self.file2.read())
163
164 def test_undoing_writing_after_moving(self):
165 change1 = rope.base.change.ChangeContents(self.file1, '1')
166 self.history.do(change1)
167 self.history.do(rope.base.change.MoveResource(self.file1, 'file3.txt'))
168 file3 = self.project.get_resource('file3.txt')
169 self.history.undo(change1)
170 self.assertEquals('', self.file1.read())
171 self.assertFalse(file3.exists())
172
173 def test_undoing_folder_movements_for_undoing_writes_inside_it(self):
174 folder = self.project.root.create_folder('folder')
175 file3 = folder.create_file('file3.txt')
176 change1 = rope.base.change.ChangeContents(file3, '1')
177 self.history.do(change1)
178 self.history.do(rope.base.change.MoveResource(folder, 'new_folder'))
179 new_folder = self.project.get_resource('new_folder')
180 self.history.undo(change1)
181 self.assertEquals('', file3.read())
182 self.assertFalse(new_folder.exists())
183
184 def test_undoing_changes_that_depend_on_a_dependant_change(self):
185 change1 = rope.base.change.ChangeContents(self.file1, '1')
186 self.history.do(change1)
187 changes = rope.base.change.ChangeSet('2nd change')
188 changes.add_change(rope.base.change.ChangeContents(self.file1, '2'))
189 changes.add_change(rope.base.change.ChangeContents(self.file2, '2'))
190 self.history.do(changes)
191 self.history.do(rope.base.change.MoveResource(self.file2, 'file3.txt'))
192 file3 = self.project.get_resource('file3.txt')
193
194 self.history.undo(change1)
195 self.assertEquals('', self.file1.read())
196 self.assertEquals('', self.file2.read())
197 self.assertFalse(file3.exists())
198
199 def test_undoing_writes_for_undoing_folder_movements_containing_it(self):
200 folder = self.project.root.create_folder('folder')
201 old_file = folder.create_file('file3.txt')
202 change1 = rope.base.change.MoveResource(folder, 'new_folder')
203 self.history.do(change1)
204 new_file = self.project.get_resource('new_folder/file3.txt')
205 self.history.do(rope.base.change.ChangeContents(new_file, '1'))
206 self.history.undo(change1)
207 self.assertEquals('', old_file.read())
208 self.assertFalse(new_file.exists())
209
210 def test_undoing_not_available_change(self):
211 change = rope.base.change.ChangeContents(self.file1, '1')
212 with self.assertRaises(exceptions.HistoryError):
213 self.history.undo(change)
214
215 def test_ignoring_ignored_resources(self):
216 self.project.set('ignored_resources', ['ignored*'])
217 ignored = self.project.get_file('ignored.txt')
218 change = rope.base.change.CreateResource(ignored)
219 self.history.do(change)
220 self.assertTrue(ignored.exists())
221 self.assertEquals(0, len(self.history.undo_list))
222
223 def test_get_file_undo_list_simple(self):
224 change = rope.base.change.ChangeContents(self.file1, '1')
225 self.history.do(change)
226 self.assertEquals(set([change]),
227 set(self.history.get_file_undo_list(self.file1)))
228
229 def test_get_file_undo_list_for_moves(self):
230 change = rope.base.change.MoveResource(self.file1, 'file2.txt')
231 self.history.do(change)
232 self.assertEquals(set([change]),
233 set(self.history.get_file_undo_list(self.file1)))
234
235 # XXX: What happens for moves before the file is created?
236 def xxx_test_get_file_undo_list_and_moving_its_contining_folder(self):
237 folder = self.project.root.create_folder('folder')
238 old_file = folder.create_file('file3.txt')
239 change1 = rope.base.change.MoveResource(folder, 'new_folder')
240 self.history.do(change1)
241 self.assertEquals(set([change1]),
242 set(self.history.get_file_undo_list(old_file)))
243
244 def test_clearing_redo_list_after_do(self):
245 change = rope.base.change.ChangeContents(self.file1, '1')
246 self.history.do(change)
247 self.history.undo()
248 self.history.do(change)
249 self.assertEquals(0, len(self.history.redo_list))
250
251 def test_undoing_a_not_yet_performed_change(self):
252 change = rope.base.change.ChangeContents(self.file1, '1')
253 str(change)
254 with self.assertRaises(exceptions.HistoryError):
255 change.undo()
256
257 def test_clearing_up_the_history(self):
258 change1 = rope.base.change.ChangeContents(self.file1, '1')
259 change2 = rope.base.change.ChangeContents(self.file1, '2')
260 self.history.do(change1)
261 self.history.do(change2)
262 self.history.undo()
263 self.history.clear()
264 self.assertEquals(0, len(self.history.undo_list))
265 self.assertEquals(0, len(self.history.redo_list))
266
267 def test_redoing_choosen_changes_not_undoing_others(self):
268 change1 = rope.base.change.ChangeContents(self.file1, '1')
269 change2 = rope.base.change.ChangeContents(self.file2, '2')
270 self.history.do(change1)
271 self.history.do(change2)
272 self.history.undo()
273 self.history.undo()
274 redone = self.history.redo(change2)
275 self.assertEquals([change2], redone)
276 self.assertEquals('', self.file1.read())
277 self.assertEquals('2', self.file2.read())
278
279
280 class SavingHistoryTest(unittest.TestCase):
281
282 def setUp(self):
283 super(SavingHistoryTest, self).setUp()
284 self.project = testutils.sample_project()
285 self.history = rope.base.history.History(self.project)
286 self.to_data = rope.base.change.ChangeToData()
287 self.to_change = rope.base.change.DataToChange(self.project)
288
289 def tearDown(self):
290 testutils.remove_project(self.project)
291 super(SavingHistoryTest, self).tearDown()
292
293 def test_simple_set_saving(self):
294 data = self.to_data(rope.base.change.ChangeSet('testing'))
295 change = self.to_change(data)
296 self.assertEquals('testing', str(change))
297
298 def test_simple_change_content_saving(self):
299 myfile = self.project.get_file('myfile.txt')
300 myfile.create()
301 myfile.write('1')
302 data = self.to_data(rope.base.change.ChangeContents(myfile, '2'))
303 change = self.to_change(data)
304 self.history.do(change)
305 self.assertEquals('2', myfile.read())
306 self.history.undo()
307 self.assertEquals('1', change.old_contents)
308
309 def test_move_resource_saving(self):
310 myfile = self.project.root.create_file('myfile.txt')
311 myfolder = self.project.root.create_folder('myfolder')
312 data = self.to_data(rope.base.change.MoveResource(myfile, 'myfolder'))
313 change = self.to_change(data)
314 self.history.do(change)
315 self.assertFalse(myfile.exists())
316 self.assertTrue(myfolder.has_child('myfile.txt'))
317 self.history.undo()
318 self.assertTrue(myfile.exists())
319 self.assertFalse(myfolder.has_child('myfile.txt'))
320
321 def test_move_resource_saving_for_folders(self):
322 myfolder = self.project.root.create_folder('myfolder')
323 newfolder = self.project.get_folder('newfolder')
324 change = rope.base.change.MoveResource(myfolder, 'newfolder')
325 self.history.do(change)
326
327 data = self.to_data(change)
328 change = self.to_change(data)
329 change.undo()
330 self.assertTrue(myfolder.exists())
331 self.assertFalse(newfolder.exists())
332
333 def test_create_file_saving(self):
334 myfile = self.project.get_file('myfile.txt')
335 data = self.to_data(rope.base.change.CreateFile(self.project.root,
336 'myfile.txt'))
337 change = self.to_change(data)
338 self.history.do(change)
339 self.assertTrue(myfile.exists())
340 self.history.undo()
341 self.assertFalse(myfile.exists())
342
343 def test_create_folder_saving(self):
344 myfolder = self.project.get_folder('myfolder')
345 data = self.to_data(rope.base.change.CreateFolder(self.project.root,
346 'myfolder'))
347 change = self.to_change(data)
348 self.history.do(change)
349 self.assertTrue(myfolder.exists())
350 self.history.undo()
351 self.assertFalse(myfolder.exists())
352
353 def test_create_resource_saving(self):
354 myfile = self.project.get_file('myfile.txt')
355 data = self.to_data(rope.base.change.CreateResource(myfile))
356 change = self.to_change(data)
357 self.history.do(change)
358 self.assertTrue(myfile.exists())
359 self.history.undo()
360 self.assertFalse(myfile.exists())
361
362 def test_remove_resource_saving(self):
363 myfile = self.project.root.create_file('myfile.txt')
364 data = self.to_data(rope.base.change.RemoveResource(myfile))
365 change = self.to_change(data)
366 self.history.do(change)
367 self.assertFalse(myfile.exists())
368
369 def test_change_set_saving(self):
370 change = rope.base.change.ChangeSet('testing')
371 myfile = self.project.get_file('myfile.txt')
372 change.add_change(rope.base.change.CreateResource(myfile))
373 change.add_change(rope.base.change.ChangeContents(myfile, '1'))
374
375 data = self.to_data(change)
376 change = self.to_change(data)
377 self.history.do(change)
378 self.assertEquals('1', myfile.read())
379 self.history.undo()
380 self.assertFalse(myfile.exists())
381
382 def test_writing_and_reading_history(self):
383 history_file = self.project.get_file('history.pickle') # noqa
384 self.project.set('save_history', True)
385 history = rope.base.history.History(self.project)
386 myfile = self.project.get_file('myfile.txt')
387 history.do(rope.base.change.CreateResource(myfile))
388 history.write()
389
390 history = rope.base.history.History(self.project)
391 history.undo()
392 self.assertFalse(myfile.exists())
393
394 def test_writing_and_reading_history2(self):
395 history_file = self.project.get_file('history.pickle') # noqa
396 self.project.set('save_history', True)
397 history = rope.base.history.History(self.project)
398 myfile = self.project.get_file('myfile.txt')
399 history.do(rope.base.change.CreateResource(myfile))
400 history.undo()
401 history.write()
402
403 history = rope.base.history.History(self.project)
404 history.redo()
405 self.assertTrue(myfile.exists())
406
407
408 def suite():
409 result = unittest.TestSuite()
410 result.addTests(unittest.makeSuite(HistoryTest))
411 result.addTests(unittest.makeSuite(IsolatedHistoryTest))
412 result.addTests(unittest.makeSuite(SavingHistoryTest))
413 return result
414
415 if __name__ == '__main__':
416 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698