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

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/refactor/movetest.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 from rope.base import exceptions
7 from rope.refactor import move
8 from ropetest import testutils
9
10
11 class MoveRefactoringTest(unittest.TestCase):
12
13 def setUp(self):
14 super(MoveRefactoringTest, self).setUp()
15 self.project = testutils.sample_project()
16 self.mod1 = testutils.create_module(self.project, 'mod1')
17 self.mod2 = testutils.create_module(self.project, 'mod2')
18 self.mod3 = testutils.create_module(self.project, 'mod3')
19 self.pkg = testutils.create_package(self.project, 'pkg')
20 self.mod4 = testutils.create_module(self.project, 'mod4', self.pkg)
21 self.mod5 = testutils.create_module(self.project, 'mod5', self.pkg)
22
23 def tearDown(self):
24 testutils.remove_project(self.project)
25 super(MoveRefactoringTest, self).tearDown()
26
27 def _move(self, resource, offset, dest_resource):
28 changes = move.create_move(self.project, resource, offset).\
29 get_changes(dest_resource)
30 self.project.do(changes)
31
32 def test_simple_moving(self):
33 self.mod1.write('class AClass(object):\n pass\n')
34 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
35 self.mod2)
36 self.assertEquals('', self.mod1.read())
37 self.assertEquals('class AClass(object):\n pass\n',
38 self.mod2.read())
39
40 def test_changing_other_modules_adding_normal_imports(self):
41 self.mod1.write('class AClass(object):\n pass\n')
42 self.mod3.write('import mod1\na_var = mod1.AClass()\n')
43 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
44 self.mod2)
45 self.assertEquals('import mod1\nimport mod2\na_var = mod2.AClass()\n',
46 self.mod3.read())
47
48 def test_changing_other_modules_removing_from_imports(self):
49 self.mod1.write('class AClass(object):\n pass\n')
50 self.mod3.write('from mod1 import AClass\na_var = AClass()\n')
51 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
52 self.mod2)
53 self.assertEquals('import mod2\na_var = mod2.AClass()\n',
54 self.mod3.read())
55
56 def test_changing_source_module(self):
57 self.mod1.write('class AClass(object):\n pass\na_var = AClass()\n')
58 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
59 self.mod2)
60 self.assertEquals('import mod2\na_var = mod2.AClass()\n',
61 self.mod1.read())
62
63 def test_changing_destination_module(self):
64 self.mod1.write('class AClass(object):\n pass\n')
65 self.mod2.write('from mod1 import AClass\na_var = AClass()\n')
66 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
67 self.mod2)
68 self.assertEquals('class AClass(object):\n '
69 'pass\na_var = AClass()\n',
70 self.mod2.read())
71
72 def test_folder_destination(self):
73 folder = self.project.root.create_folder('folder')
74 self.mod1.write('class AClass(object):\n pass\n')
75 with self.assertRaises(exceptions.RefactoringError):
76 self._move(self.mod1, self.mod1.read().index('AClass') + 1, folder)
77
78 def test_raising_exception_for_moving_non_global_elements(self):
79 self.mod1.write(
80 'def a_func():\n class AClass(object):\n pass\n')
81 with self.assertRaises(exceptions.RefactoringError):
82 self._move(self.mod1, self.mod1.read().index('AClass') + 1,
83 self.mod2)
84
85 def test_raising_exception_for_mov_glob_elemnts_to_the_same_module(self):
86 self.mod1.write('def a_func():\n pass\n')
87 with self.assertRaises(exceptions.RefactoringError):
88 self._move(self.mod1, self.mod1.read().index('a_func'), self.mod1)
89
90 def test_moving_used_imports_to_destination_module(self):
91 self.mod3.write('a_var = 10')
92 code = 'import mod3\n' \
93 'from mod3 import a_var\n' \
94 'def a_func():\n' \
95 ' print(mod3, a_var)\n'
96 self.mod1.write(code)
97 self._move(self.mod1, code.index('a_func') + 1, self.mod2)
98 expected = 'import mod3\n' \
99 'from mod3 import a_var\n\n\n' \
100 'def a_func():\n print(mod3, a_var)\n'
101 self.assertEquals(expected, self.mod2.read())
102
103 def test_moving_used_names_to_destination_module2(self):
104 code = 'a_var = 10\n' \
105 'def a_func():\n' \
106 ' print(a_var)\n'
107 self.mod1.write(code)
108 self._move(self.mod1, code.index('a_func') + 1, self.mod2)
109 self.assertEquals('a_var = 10\n', self.mod1.read())
110 expected = 'from mod1 import a_var\n\n\n' \
111 'def a_func():\n' \
112 ' print(a_var)\n'
113 self.assertEquals(expected, self.mod2.read())
114
115 def test_moving_used_underlined_names_to_destination_module(self):
116 code = '_var = 10\n' \
117 'def a_func():\n' \
118 ' print(_var)\n'
119 self.mod1.write(code)
120 self._move(self.mod1, code.index('a_func') + 1, self.mod2)
121 expected = 'from mod1 import _var\n\n\n' \
122 'def a_func():\n' \
123 ' print(_var)\n'
124 self.assertEquals(expected, self.mod2.read())
125
126 def test_moving_and_used_relative_imports(self):
127 code = 'import mod5\n' \
128 'def a_func():\n' \
129 ' print(mod5)\n'
130 self.mod4.write(code)
131 self._move(self.mod4, code.index('a_func') + 1, self.mod1)
132 expected = 'import pkg.mod5\n\n\n' \
133 'def a_func():\n' \
134 ' print(pkg.mod5)\n'
135 self.assertEquals(expected, self.mod1.read())
136
137 def test_moving_modules(self):
138 code = 'import mod1\nprint(mod1)'
139 self.mod2.write(code)
140 self._move(self.mod2, code.index('mod1') + 1, self.pkg)
141 expected = 'import pkg.mod1\nprint(pkg.mod1)'
142 self.assertEquals(expected, self.mod2.read())
143 self.assertTrue(not self.mod1.exists() and
144 self.project.find_module('pkg.mod1') is not None)
145
146 def test_moving_modules_and_removing_out_of_date_imports(self):
147 code = 'import pkg.mod4\nprint(pkg.mod4)'
148 self.mod2.write(code)
149 self._move(self.mod2, code.index('mod4') + 1, self.project.root)
150 expected = 'import mod4\nprint(mod4)'
151 self.assertEquals(expected, self.mod2.read())
152 self.assertTrue(self.project.find_module('mod4') is not None)
153
154 def test_moving_modules_and_removing_out_of_date_froms(self):
155 code = 'from pkg import mod4\nprint(mod4)'
156 self.mod2.write(code)
157 self._move(self.mod2, code.index('mod4') + 1, self.project.root)
158 self.assertEquals('import mod4\nprint(mod4)', self.mod2.read())
159
160 def test_moving_modules_and_removing_out_of_date_froms2(self):
161 self.mod4.write('a_var = 10')
162 code = 'from pkg.mod4 import a_var\nprint(a_var)\n'
163 self.mod2.write(code)
164 self._move(self.mod2, code.index('mod4') + 1, self.project.root)
165 expected = 'from mod4 import a_var\nprint(a_var)\n'
166 self.assertEquals(expected, self.mod2.read())
167
168 def test_moving_modules_and_relative_import(self):
169 self.mod4.write('import mod5\nprint(mod5)\n')
170 code = 'import pkg.mod4\nprint(pkg.mod4)'
171 self.mod2.write(code)
172 self._move(self.mod2, code.index('mod4') + 1, self.project.root)
173 moved = self.project.find_module('mod4')
174 expected = 'import pkg.mod5\nprint(pkg.mod5)\n'
175 self.assertEquals(expected, moved.read())
176
177 def test_moving_packages(self):
178 pkg2 = testutils.create_package(self.project, 'pkg2')
179 code = 'import pkg.mod4\nprint(pkg.mod4)'
180 self.mod1.write(code)
181 self._move(self.mod1, code.index('pkg') + 1, pkg2)
182 self.assertFalse(self.pkg.exists())
183 self.assertTrue(self.project.find_module('pkg2.pkg.mod4') is not None)
184 self.assertTrue(self.project.find_module('pkg2.pkg.mod4') is not None)
185 self.assertTrue(self.project.find_module('pkg2.pkg.mod5') is not None)
186 expected = 'import pkg2.pkg.mod4\nprint(pkg2.pkg.mod4)'
187 self.assertEquals(expected, self.mod1.read())
188
189 def test_moving_modules_with_self_imports(self):
190 self.mod1.write('import mod1\nprint(mod1)\n')
191 self.mod2.write('import mod1\n')
192 self._move(self.mod2, self.mod2.read().index('mod1') + 1, self.pkg)
193 moved = self.project.find_module('pkg.mod1')
194 self.assertEquals('import pkg.mod1\nprint(pkg.mod1)\n', moved.read())
195
196 def test_moving_modules_with_from_imports(self):
197 pkg2 = testutils.create_package(self.project, 'pkg2')
198 code = ('from pkg import mod4\n'
199 'print(mod4)')
200 self.mod1.write(code)
201 self._move(self.mod1, code.index('pkg') + 1, pkg2)
202 self.assertFalse(self.pkg.exists())
203 self.assertTrue(self.project.find_module('pkg2.pkg.mod4') is not None)
204 self.assertTrue(self.project.find_module('pkg2.pkg.mod5') is not None)
205 expected = ('from pkg2.pkg import mod4\n'
206 'print(mod4)')
207 self.assertEquals(expected, self.mod1.read())
208
209 def test_moving_modules_with_from_import(self):
210 pkg2 = testutils.create_package(self.project, 'pkg2')
211 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
212 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
213 code = ('from pkg import mod4\n'
214 'print(mod4)')
215 self.mod1.write(code)
216 self._move(self.mod4, None, pkg4)
217 self.assertTrue(
218 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
219 expected = ('from pkg2.pkg3.pkg4 import mod4\n'
220 'print(mod4)')
221 self.assertEquals(expected, self.mod1.read())
222
223 def test_moving_modules_with_multi_from_imports(self):
224 pkg2 = testutils.create_package(self.project, 'pkg2')
225 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
226 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
227 code = ('from pkg import mod4, mod5\n'
228 'print(mod4)')
229 self.mod1.write(code)
230 self._move(self.mod4, None, pkg4)
231 self.assertTrue(
232 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
233 expected = ('from pkg import mod5\n'
234 'from pkg2.pkg3.pkg4 import mod4\n'
235 'print(mod4)')
236 self.assertEquals(expected, self.mod1.read())
237
238 def test_moving_modules_with_from_and_normal_imports(self):
239 pkg2 = testutils.create_package(self.project, 'pkg2')
240 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
241 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
242 code = ('from pkg import mod4\n'
243 'import pkg.mod4\n'
244 'print(mod4)\n'
245 'print(pkg.mod4)')
246 self.mod1.write(code)
247 self._move(self.mod4, None, pkg4)
248 self.assertTrue(
249 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
250 expected = ('import pkg2.pkg3.pkg4.mod4\n'
251 'from pkg2.pkg3.pkg4 import mod4\n'
252 'print(mod4)\n'
253 'print(pkg2.pkg3.pkg4.mod4)')
254 self.assertEquals(expected, self.mod1.read())
255
256 def test_moving_modules_with_normal_and_from_imports(self):
257 pkg2 = testutils.create_package(self.project, 'pkg2')
258 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
259 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
260 code = ('import pkg.mod4\n'
261 'from pkg import mod4\n'
262 'print(mod4)\n'
263 'print(pkg.mod4)')
264 self.mod1.write(code)
265 self._move(self.mod4, None, pkg4)
266 self.assertTrue(
267 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
268 expected = ('import pkg2.pkg3.pkg4.mod4\n'
269 'from pkg2.pkg3.pkg4 import mod4\n'
270 'print(mod4)\n'
271 'print(pkg2.pkg3.pkg4.mod4)')
272 self.assertEquals(expected, self.mod1.read())
273
274 def test_moving_modules_from_import_variable(self):
275 pkg2 = testutils.create_package(self.project, 'pkg2')
276 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
277 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
278 code = ('from pkg.mod4 import foo\n'
279 'print(foo)')
280 self.mod1.write(code)
281 self._move(self.mod4, None, pkg4)
282 self.assertTrue(
283 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
284 expected = ('from pkg2.pkg3.pkg4.mod4 import foo\n'
285 'print(foo)')
286 self.assertEquals(expected, self.mod1.read())
287
288 def test_moving_modules_normal_import(self):
289 pkg2 = testutils.create_package(self.project, 'pkg2')
290 pkg3 = testutils.create_package(self.project, 'pkg3', pkg2)
291 pkg4 = testutils.create_package(self.project, 'pkg4', pkg3)
292 code = ('import pkg.mod4\n'
293 'print(pkg.mod4)')
294 self.mod1.write(code)
295 self._move(self.mod4, None, pkg4)
296 self.assertTrue(
297 self.project.find_module('pkg2.pkg3.pkg4.mod4') is not None)
298 expected = ('import pkg2.pkg3.pkg4.mod4\n'
299 'print(pkg2.pkg3.pkg4.mod4)')
300 self.assertEquals(expected, self.mod1.read())
301
302 def test_moving_package_with_from_and_normal_imports(self):
303 pkg2 = testutils.create_package(self.project, 'pkg2')
304 code = ('from pkg import mod4\n'
305 'import pkg.mod4\n'
306 'print(pkg.mod4)\n'
307 'print(mod4)')
308 self.mod1.write(code)
309 self._move(self.mod1, code.index('pkg') + 1, pkg2)
310 self.assertFalse(self.pkg.exists())
311 self.assertTrue(self.project.find_module('pkg2.pkg.mod4') is not None)
312 self.assertTrue(self.project.find_module('pkg2.pkg.mod5') is not None)
313 expected = ('from pkg2.pkg import mod4\n'
314 'import pkg2.pkg.mod4\n'
315 'print(pkg2.pkg.mod4)\n'
316 'print(mod4)')
317 self.assertEquals(expected, self.mod1.read())
318
319 def test_moving_package_with_from_and_normal_imports2(self):
320 pkg2 = testutils.create_package(self.project, 'pkg2')
321 code = ('import pkg.mod4\n'
322 'from pkg import mod4\n'
323 'print(pkg.mod4)\n'
324 'print(mod4)')
325 self.mod1.write(code)
326 self._move(self.mod1, code.index('pkg') + 1, pkg2)
327 self.assertFalse(self.pkg.exists())
328 self.assertTrue(self.project.find_module('pkg2.pkg.mod4') is not None)
329 self.assertTrue(self.project.find_module('pkg2.pkg.mod5') is not None)
330 expected = ('import pkg2.pkg.mod4\n'
331 'from pkg2.pkg import mod4\n'
332 'print(pkg2.pkg.mod4)\n'
333 'print(mod4)')
334 self.assertEquals(expected, self.mod1.read())
335
336 def test_moving_package_and_retaining_blank_lines(self):
337 pkg2 = testutils.create_package(self.project, 'pkg2', self.pkg)
338 code = ('import pkg.mod4\n\n'
339 'from pkg import mod4\n'
340 'from x import y\n'
341 'from y import z\n'
342 'from a import b\n'
343 'from b import c\n'
344 'print(pkg.mod4)\n'
345 'print(mod4)')
346 self.mod1.write(code)
347 self._move(self.mod4, None, pkg2)
348 expected = ('import pkg.pkg2.mod4\n\n'
349 'from x import y\n'
350 'from y import z\n'
351 'from a import b\n'
352 'from b import c\n'
353 'from pkg.pkg2 import mod4\n'
354 'print(pkg.pkg2.mod4)\n'
355 'print(mod4)')
356 self.assertEquals(expected, self.mod1.read())
357
358 def test_moving_funtions_to_imported_module(self):
359 code = 'import mod1\n' \
360 'def a_func():\n' \
361 ' var = mod1.a_var\n'
362 self.mod1.write('a_var = 1\n')
363 self.mod2.write(code)
364 self._move(self.mod2, code.index('a_func') + 1, self.mod1)
365 expected = 'def a_func():\n' \
366 ' var = a_var\n' \
367 'a_var = 1\n'
368 self.assertEquals(expected, self.mod1.read())
369
370 def test_moving_resources_using_move_module_refactoring(self):
371 self.mod1.write('a_var = 1')
372 self.mod2.write('import mod1\nmy_var = mod1.a_var\n')
373 mover = move.create_move(self.project, self.mod1)
374 mover.get_changes(self.pkg).do()
375 expected = 'import pkg.mod1\nmy_var = pkg.mod1.a_var\n'
376 self.assertEquals(expected, self.mod2.read())
377 self.assertTrue(self.pkg.get_child('mod1.py') is not None)
378
379 def test_moving_resources_using_move_module_for_packages(self):
380 self.mod1.write('import pkg\nmy_pkg = pkg')
381 pkg2 = testutils.create_package(self.project, 'pkg2')
382 mover = move.create_move(self.project, self.pkg)
383 mover.get_changes(pkg2).do()
384 expected = 'import pkg2.pkg\nmy_pkg = pkg2.pkg'
385 self.assertEquals(expected, self.mod1.read())
386 self.assertTrue(pkg2.get_child('pkg') is not None)
387
388 def test_moving_resources_using_move_module_for_init_dot_py(self):
389 self.mod1.write('import pkg\nmy_pkg = pkg')
390 pkg2 = testutils.create_package(self.project, 'pkg2')
391 init = self.pkg.get_child('__init__.py')
392 mover = move.create_move(self.project, init)
393 mover.get_changes(pkg2).do()
394 self.assertEquals('import pkg2.pkg\nmy_pkg = pkg2.pkg',
395 self.mod1.read())
396 self.assertTrue(pkg2.get_child('pkg') is not None)
397
398 def test_moving_module_and_star_imports(self):
399 self.mod1.write('a_var = 1')
400 self.mod2.write('from mod1 import *\na = a_var\n')
401 mover = move.create_move(self.project, self.mod1)
402 mover.get_changes(self.pkg).do()
403 self.assertEquals('from pkg.mod1 import *\na = a_var\n',
404 self.mod2.read())
405
406 def test_moving_module_and_not_removing_blanks_after_imports(self):
407 self.mod4.write('a_var = 1')
408 self.mod2.write('from pkg import mod4\n'
409 'import os\n\n\nprint(mod4.a_var)\n')
410 mover = move.create_move(self.project, self.mod4)
411 mover.get_changes(self.project.root).do()
412 self.assertEquals('import os\nimport mod4\n\n\n'
413 'print(mod4.a_var)\n', self.mod2.read())
414
415 def test_moving_module_refactoring_and_nonexistent_destinations(self):
416 self.mod4.write('a_var = 1')
417 self.mod2.write('from pkg import mod4\n'
418 'import os\n\n\nprint(mod4.a_var)\n')
419 with self.assertRaises(exceptions.RefactoringError):
420 mover = move.create_move(self.project, self.mod4)
421 mover.get_changes(None).do()
422
423 def test_moving_methods_choosing_the_correct_class(self):
424 code = 'class A(object):\n def a_method(self):\n pass\n'
425 self.mod1.write(code)
426 mover = move.create_move(self.project, self.mod1,
427 code.index('a_method'))
428 self.assertTrue(isinstance(mover, move.MoveMethod))
429
430 def test_moving_methods_getting_new_method_for_empty_methods(self):
431 code = 'class A(object):\n def a_method(self):\n pass\n'
432 self.mod1.write(code)
433 mover = move.create_move(self.project, self.mod1,
434 code.index('a_method'))
435 self.assertEquals('def new_method(self):\n pass\n',
436 mover.get_new_method('new_method'))
437
438 def test_moving_methods_getting_new_method_for_constant_methods(self):
439 code = 'class A(object):\n def a_method(self):\n return 1\n'
440 self.mod1.write(code)
441 mover = move.create_move(self.project, self.mod1,
442 code.index('a_method'))
443 self.assertEquals('def new_method(self):\n return 1\n',
444 mover.get_new_method('new_method'))
445
446 def test_moving_methods_getting_new_method_passing_simple_paremters(self):
447 code = 'class A(object):\n' \
448 ' def a_method(self, p):\n return p\n'
449 self.mod1.write(code)
450 mover = move.create_move(self.project, self.mod1,
451 code.index('a_method'))
452 self.assertEquals('def new_method(self, p):\n return p\n',
453 mover.get_new_method('new_method'))
454
455 def test_moving_methods_getting_new_method_using_main_object(self):
456 code = 'class A(object):\n attr = 1\n' \
457 ' def a_method(host):\n return host.attr\n'
458 self.mod1.write(code)
459 mover = move.create_move(self.project, self.mod1,
460 code.index('a_method'))
461 self.assertEquals('def new_method(self, host):'
462 '\n return host.attr\n',
463 mover.get_new_method('new_method'))
464
465 def test_moving_methods_getting_new_method_renaming_main_object(self):
466 code = 'class A(object):\n attr = 1\n' \
467 ' def a_method(self):\n return self.attr\n'
468 self.mod1.write(code)
469 mover = move.create_move(self.project, self.mod1,
470 code.index('a_method'))
471 self.assertEquals('def new_method(self, host):'
472 '\n return host.attr\n',
473 mover.get_new_method('new_method'))
474
475 def test_moving_methods_gettin_new_method_with_keyword_arguments(self):
476 code = 'class A(object):\n attr = 1\n' \
477 ' def a_method(self, p=None):\n return p\n'
478 self.mod1.write(code)
479 mover = move.create_move(self.project, self.mod1,
480 code.index('a_method'))
481 self.assertEquals('def new_method(self, p=None):\n return p\n',
482 mover.get_new_method('new_method'))
483
484 def test_moving_methods_gettin_new_method_with_many_kinds_arguments(self):
485 code = 'class A(object):\n attr = 1\n' \
486 ' def a_method(self, p1, *args, **kwds):\n' \
487 ' return self.attr\n'
488 self.mod1.write(code)
489 mover = move.create_move(self.project, self.mod1,
490 code.index('a_method'))
491 expected = 'def new_method(self, host, p1, *args, **kwds):\n' \
492 ' return host.attr\n'
493 self.assertEquals(expected, mover.get_new_method('new_method'))
494
495 def test_moving_methods_getting_new_method_for_multi_line_methods(self):
496 code = 'class A(object):\n' \
497 ' def a_method(self):\n' \
498 ' a = 2\n' \
499 ' return a\n'
500 self.mod1.write(code)
501 mover = move.create_move(self.project, self.mod1,
502 code.index('a_method'))
503 self.assertEquals(
504 'def new_method(self):\n a = 2\n return a\n',
505 mover.get_new_method('new_method'))
506
507 def test_moving_methods_getting_old_method_for_constant_methods(self):
508 self.mod2.write('class B(object):\n pass\n')
509 code = 'import mod2\n\n' \
510 'class A(object):\n' \
511 ' attr = mod2.B()\n' \
512 ' def a_method(self):\n' \
513 ' return 1\n'
514 self.mod1.write(code)
515 mover = move.create_move(self.project, self.mod1,
516 code.index('a_method'))
517 mover.get_changes('attr', 'new_method').do()
518 expected = 'import mod2\n\n' \
519 'class A(object):\n' \
520 ' attr = mod2.B()\n' \
521 ' def a_method(self):\n' \
522 ' return self.attr.new_method()\n'
523 self.assertEquals(expected, self.mod1.read())
524
525 def test_moving_methods_getting_getting_changes_for_goal_class(self):
526 self.mod2.write('class B(object):\n var = 1\n')
527 code = 'import mod2\n\n' \
528 'class A(object):\n' \
529 ' attr = mod2.B()\n' \
530 ' def a_method(self):\n' \
531 ' return 1\n'
532 self.mod1.write(code)
533 mover = move.create_move(self.project, self.mod1,
534 code.index('a_method'))
535 mover.get_changes('attr', 'new_method').do()
536 expected = 'class B(object):\n' \
537 ' var = 1\n\n\n' \
538 ' def new_method(self):\n' \
539 ' return 1\n'
540 self.assertEquals(expected, self.mod2.read())
541
542 def test_moving_methods_getting_getting_changes_for_goal_class2(self):
543 code = 'class B(object):\n var = 1\n\n' \
544 'class A(object):\n attr = B()\n' \
545 ' def a_method(self):\n return 1\n'
546 self.mod1.write(code)
547 mover = move.create_move(self.project, self.mod1,
548 code.index('a_method'))
549 mover.get_changes('attr', 'new_method').do()
550 self.assertEquals(
551 'class B(object):\n var = 1\n\n\n'
552 ' def new_method(self):\n'
553 ' return 1\n\n'
554 'class A(object):\n attr = B()\n'
555 ' def a_method(self):\n'
556 ' return self.attr.new_method()\n',
557 self.mod1.read())
558
559 def test_moving_methods_and_nonexistent_attributes(self):
560 code = 'class A(object):\n' \
561 ' def a_method(self):\n return 1\n'
562 self.mod1.write(code)
563 with self.assertRaises(exceptions.RefactoringError):
564 mover = move.create_move(self.project, self.mod1,
565 code.index('a_method'))
566 mover.get_changes('x', 'new_method')
567
568 def test_unknown_attribute_type(self):
569 code = 'class A(object):\n attr = 1\n' \
570 ' def a_method(self):\n return 1\n'
571 self.mod1.write(code)
572 with self.assertRaises(exceptions.RefactoringError):
573 mover = move.create_move(self.project, self.mod1,
574 code.index('a_method'))
575 mover.get_changes('attr', 'new_method')
576
577 def test_moving_methods_and_moving_used_imports(self):
578 self.mod2.write('class B(object):\n var = 1\n')
579 code = 'import sys\nimport mod2\n\n' \
580 'class A(object):\n' \
581 ' attr = mod2.B()\n' \
582 ' def a_method(self):\n' \
583 ' return sys.version\n'
584 self.mod1.write(code)
585 mover = move.create_move(self.project, self.mod1,
586 code.index('a_method'))
587 mover.get_changes('attr', 'new_method').do()
588 code = 'import sys\n' \
589 'class B(object):\n' \
590 ' var = 1\n\n\n' \
591 ' def new_method(self):\n' \
592 ' return sys.version\n'
593 self.assertEquals(code, self.mod2.read())
594
595 def test_moving_methods_getting_getting_changes_for_goal_class3(self):
596 self.mod2.write('class B(object):\n pass\n')
597 code = 'import mod2\n\n' \
598 'class A(object):\n' \
599 ' attr = mod2.B()\n' \
600 ' def a_method(self):\n' \
601 ' return 1\n'
602 self.mod1.write(code)
603 mover = move.create_move(self.project, self.mod1,
604 code.index('a_method'))
605 mover.get_changes('attr', 'new_method').do()
606 expected = 'class B(object):\n\n' \
607 ' def new_method(self):\n' \
608 ' return 1\n'
609 self.assertEquals(expected, self.mod2.read())
610
611 def test_moving_methods_and_source_class_with_parameters(self):
612 self.mod2.write('class B(object):\n pass\n')
613 code = 'import mod2\n\n' \
614 'class A(object):\n' \
615 ' attr = mod2.B()\n' \
616 ' def a_method(self, p):\n return p\n'
617 self.mod1.write(code)
618 mover = move.create_move(self.project, self.mod1,
619 code.index('a_method'))
620 mover.get_changes('attr', 'new_method').do()
621 expected1 = 'import mod2\n\n' \
622 'class A(object):\n' \
623 ' attr = mod2.B()\n' \
624 ' def a_method(self, p):\n' \
625 ' return self.attr.new_method(p)\n'
626 self.assertEquals(expected1, self.mod1.read())
627 expected2 = 'class B(object):\n\n' \
628 ' def new_method(self, p):\n' \
629 ' return p\n'
630 self.assertEquals(expected2, self.mod2.read())
631
632 def test_moving_globals_to_a_module_with_only_docstrings(self):
633 self.mod1.write('import sys\n\n\ndef f():\n print(sys.version)\n')
634 self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n')
635 mover = move.create_move(self.project, self.mod1,
636 self.mod1.read().index('f()') + 1)
637 self.project.do(mover.get_changes(self.mod2))
638 self.assertEquals(
639 '"""doc\n\nMore docs ...\n\n"""\n'
640 'import sys\n\n\ndef f():\n print(sys.version)\n',
641 self.mod2.read())
642
643 def test_moving_globals_to_a_module_with_only_docstrings2(self):
644 code = 'import os\n' \
645 'import sys\n\n\n' \
646 'def f():\n' \
647 ' print(sys.version, os.path)\n'
648 self.mod1.write(code)
649 self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n')
650 mover = move.create_move(self.project, self.mod1,
651 self.mod1.read().index('f()') + 1)
652 self.project.do(mover.get_changes(self.mod2))
653 expected = '"""doc\n\nMore docs ...\n\n"""\n' \
654 'import os\n' \
655 'import sys\n\n\n' \
656 'def f():\n' \
657 ' print(sys.version, os.path)\n'
658 self.assertEquals(expected, self.mod2.read())
659
660 def test_moving_a_global_when_it_is_used_after_a_multiline_str(self):
661 code = 'def f():\n pass\ns = """\\\n"""\nr = f()\n'
662 self.mod1.write(code)
663 mover = move.create_move(self.project, self.mod1,
664 code.index('f()') + 1)
665 self.project.do(mover.get_changes(self.mod2))
666 expected = 'import mod2\ns = """\\\n"""\nr = mod2.f()\n'
667 self.assertEquals(expected, self.mod1.read())
668
669 def test_raising_an_exception_when_moving_non_package_folders(self):
670 dir = self.project.root.create_folder('dir')
671 with self.assertRaises(exceptions.RefactoringError):
672 move.create_move(self.project, dir)
673
674 def test_moving_to_a_module_with_encoding_cookie(self):
675 code1 = '# -*- coding: utf-8 -*-'
676 self.mod1.write(code1)
677 code2 = 'def f(): pass\n'
678 self.mod2.write(code2)
679 mover = move.create_move(self.project, self.mod2,
680 code2.index('f()') + 1)
681 self.project.do(mover.get_changes(self.mod1))
682 expected = '%s\n%s' % (code1, code2)
683 self.assertEquals(expected, self.mod1.read())
684
685
686 if __name__ == '__main__':
687 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698