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

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/refactor/inlinetest.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.exceptions
7 from rope.refactor import inline
8 from ropetest import testutils
9
10
11 class InlineTest(unittest.TestCase):
12
13 def setUp(self):
14 super(InlineTest, self).setUp()
15 self.project = testutils.sample_project()
16 self.pycore = self.project.pycore
17 self.mod = testutils.create_module(self.project, 'mod')
18 self.mod2 = testutils.create_module(self.project, 'mod2')
19
20 def tearDown(self):
21 testutils.remove_project(self.project)
22 super(InlineTest, self).tearDown()
23
24 def _inline(self, code, offset, **kwds):
25 self.mod.write(code)
26 self._inline2(self.mod, offset, **kwds)
27 return self.mod.read()
28
29 def _inline2(self, resource, offset, **kwds):
30 inliner = inline.create_inline(self.project, resource, offset)
31 changes = inliner.get_changes(**kwds)
32 self.project.do(changes)
33 return self.mod.read()
34
35 def test_simple_case(self):
36 code = 'a_var = 10\nanother_var = a_var\n'
37 refactored = self._inline(code, code.index('a_var') + 1)
38 self.assertEquals('another_var = 10\n', refactored)
39
40 def test_empty_case(self):
41 code = 'a_var = 10\n'
42 refactored = self._inline(code, code.index('a_var') + 1)
43 self.assertEquals('', refactored)
44
45 def test_long_definition(self):
46 code = 'a_var = 10 + (10 + 10)\nanother_var = a_var\n'
47 refactored = self._inline(code, code.index('a_var') + 1)
48 self.assertEquals('another_var = 10 + (10 + 10)\n', refactored)
49
50 def test_explicit_continuation(self):
51 code = 'a_var = (10 +\n 10)\nanother_var = a_var\n'
52 refactored = self._inline(code, code.index('a_var') + 1)
53 self.assertEquals('another_var = (10 + 10)\n', refactored)
54
55 def test_implicit_continuation(self):
56 code = 'a_var = 10 +\\\n 10\nanother_var = a_var\n'
57 refactored = self._inline(code, code.index('a_var') + 1)
58 self.assertEquals('another_var = 10 + 10\n', refactored)
59
60 def test_inlining_at_the_end_of_input(self):
61 code = 'a = 1\nb = a'
62 refactored = self._inline(code, code.index('a') + 1)
63 self.assertEquals('b = 1', refactored)
64
65 def test_on_classes(self):
66 code = 'class AClass(object):\n pass\n'
67 with self.assertRaises(rope.base.exceptions.RefactoringError):
68 self._inline(code, code.index('AClass') + 1)
69
70 def test_multiple_assignments(self):
71 code = 'a_var = 10\na_var = 20\n'
72 with self.assertRaises(rope.base.exceptions.RefactoringError):
73 self._inline(code, code.index('a_var') + 1)
74
75 def test_tuple_assignments(self):
76 code = 'a_var, another_var = (20, 30)\n'
77 with self.assertRaises(rope.base.exceptions.RefactoringError):
78 self._inline(code, code.index('a_var') + 1)
79
80 def test_on_unknown_vars(self):
81 code = 'a_var = another_var\n'
82 with self.assertRaises(rope.base.exceptions.RefactoringError):
83 self._inline(code, code.index('another_var') + 1)
84
85 def test_attribute_inlining(self):
86 code = 'class A(object):\n def __init__(self):\n' \
87 ' self.an_attr = 3\n range(self.an_attr)\n'
88 refactored = self._inline(code, code.index('an_attr') + 1)
89 expected = 'class A(object):\n def __init__(self):\n' \
90 ' range(3)\n'
91 self.assertEquals(expected, refactored)
92
93 def test_attribute_inlining2(self):
94 code = 'class A(object):\n def __init__(self):\n' \
95 ' self.an_attr = 3\n range(self.an_attr)\n' \
96 'a = A()\nrange(a.an_attr)'
97 refactored = self._inline(code, code.index('an_attr') + 1)
98 expected = 'class A(object):\n def __init__(self):\n' \
99 ' range(3)\n' \
100 'a = A()\nrange(3)'
101 self.assertEquals(expected, refactored)
102
103 def test_a_function_with_no_occurance(self):
104 self.mod.write('def a_func():\n pass\n')
105 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
106 self.assertEquals('', self.mod.read())
107
108 def test_a_function_with_no_occurance2(self):
109 self.mod.write('a_var = 10\ndef a_func():\n pass\nprint(a_var)\n')
110 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
111 self.assertEquals('a_var = 10\nprint(a_var)\n', self.mod.read())
112
113 def test_replacing_calls_with_function_definition_in_other_modules(self):
114 self.mod.write('def a_func():\n print(1)\n')
115 mod1 = testutils.create_module(self.project, 'mod1')
116 mod1.write('import mod\nmod.a_func()\n')
117 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
118 self.assertEquals('import mod\nprint(1)\n', mod1.read())
119
120 def test_replacing_calls_with_function_definition_in_other_modules2(self):
121 self.mod.write('def a_func():\n print(1)\n')
122 mod1 = testutils.create_module(self.project, 'mod1')
123 mod1.write('import mod\nif True:\n mod.a_func()\n')
124 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
125 self.assertEquals('import mod\nif True:\n print(1)\n', mod1.read())
126
127 def test_replacing_calls_with_method_definition_in_other_modules(self):
128 self.mod.write('class A(object):\n var = 10\n'
129 ' def a_func(self):\n print(1)\n')
130 mod1 = testutils.create_module(self.project, 'mod1')
131 mod1.write('import mod\nmod.A().a_func()\n')
132 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
133 self.assertEquals('import mod\nprint(1)\n', mod1.read())
134 self.assertEquals('class A(object):\n var = 10\n', self.mod.read())
135
136 def test_replacing_calls_with_function_definition_in_defining_module(self):
137 self.mod.write('def a_func():\n print(1)\na_func()\n')
138 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
139 self.assertEquals('print(1)\n', self.mod.read())
140
141 def test_replac_calls_with_function_definition_in_defining_module2(self):
142 self.mod.write('def a_func():\n '
143 'for i in range(10):\n print(1)\na_func()\n')
144 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
145 self.assertEquals('for i in range(10):\n print(1)\n',
146 self.mod.read())
147
148 def test_replacing_calls_with_method_definition_in_defining_modules(self):
149 self.mod.write('class A(object):\n var = 10\n'
150 ' def a_func(self):\n print(1)\nA().a_func()')
151 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
152 self.assertEquals('class A(object):\n var = 10\nprint(1)\n',
153 self.mod.read())
154
155 def test_parameters_with_the_same_name_as_passed(self):
156 self.mod.write('def a_func(var):\n '
157 'print(var)\nvar = 1\na_func(var)\n')
158 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
159 self.assertEquals('var = 1\nprint(var)\n', self.mod.read())
160
161 def test_parameters_with_the_same_name_as_passed2(self):
162 self.mod.write('def a_func(var):\n '
163 'print(var)\nvar = 1\na_func(var=var)\n')
164 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
165 self.assertEquals('var = 1\nprint(var)\n', self.mod.read())
166
167 def test_simple_parameters_renaming(self):
168 self.mod.write('def a_func(param):\n '
169 'print(param)\nvar = 1\na_func(var)\n')
170 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
171 self.assertEquals('var = 1\nprint(var)\n', self.mod.read())
172
173 def test_simple_parameters_renaming_for_multiple_params(self):
174 self.mod.write('def a_func(param1, param2):\n p = param1 + param2\n'
175 'var1 = 1\nvar2 = 1\na_func(var1, var2)\n')
176 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
177 self.assertEquals('var1 = 1\nvar2 = 1\np = var1 + var2\n',
178 self.mod.read())
179
180 def test_parameters_renaming_for_passed_constants(self):
181 self.mod.write('def a_func(param):\n print(param)\na_func(1)\n')
182 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
183 self.assertEquals('print(1)\n', self.mod.read())
184
185 def test_parameters_renaming_for_passed_statements(self):
186 self.mod.write('def a_func(param):\n '
187 'print(param)\na_func((1 + 2) / 3)\n')
188 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
189 self.assertEquals('print((1 + 2) / 3)\n', self.mod.read())
190
191 def test_simple_parameters_renam_for_multiple_params_using_keywords(self):
192 self.mod.write('def a_func(param1, param2):\n '
193 'p = param1 + param2\n'
194 'var1 = 1\nvar2 = 1\n'
195 'a_func(param2=var1, param1=var2)\n')
196 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
197 self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n',
198 self.mod.read())
199
200 def test_simple_params_renam_for_multi_params_using_mixed_keywords(self):
201 self.mod.write('def a_func(param1, param2):\n p = param1 + param2\n'
202 'var1 = 1\nvar2 = 1\na_func(var2, param2=var1)\n')
203 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
204 self.assertEquals('var1 = 1\nvar2 = 1\np = var2 + var1\n',
205 self.mod.read())
206
207 def test_simple_putting_in_default_arguments(self):
208 self.mod.write('def a_func(param=None):\n print(param)\n'
209 'a_func()\n')
210 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
211 self.assertEquals('print(None)\n', self.mod.read())
212
213 def test_overriding_default_arguments(self):
214 self.mod.write('def a_func(param1=1, param2=2):'
215 '\n print(param1, param2)\n'
216 'a_func(param2=3)\n')
217 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
218 self.assertEquals('print(1, 3)\n', self.mod.read())
219
220 def test_badly_formatted_text(self):
221 self.mod.write('def a_func ( param1 = 1 ,param2 = 2 ) :'
222 '\n print(param1, param2)\n'
223 'a_func ( param2 \n = 3 ) \n')
224 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
225 self.assertEquals('print(1, 3)\n', self.mod.read())
226
227 def test_passing_first_arguments_for_methods(self):
228 a_class = 'class A(object):\n' \
229 ' def __init__(self):\n' \
230 ' self.var = 1\n' \
231 ' self.a_func(self.var)\n' \
232 ' def a_func(self, param):\n' \
233 ' print(param)\n'
234 self.mod.write(a_class)
235 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
236 expected = 'class A(object):\n' \
237 ' def __init__(self):\n' \
238 ' self.var = 1\n' \
239 ' print(self.var)\n'
240 self.assertEquals(expected, self.mod.read())
241
242 def test_passing_first_arguments_for_methods2(self):
243 a_class = 'class A(object):\n' \
244 ' def __init__(self):\n' \
245 ' self.var = 1\n' \
246 ' def a_func(self, param):\n' \
247 ' print(param, self.var)\n' \
248 'an_a = A()\n' \
249 'an_a.a_func(1)\n'
250 self.mod.write(a_class)
251 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
252 expected = 'class A(object):\n' \
253 ' def __init__(self):\n' \
254 ' self.var = 1\n' \
255 'an_a = A()\n' \
256 'print(1, an_a.var)\n'
257 self.assertEquals(expected, self.mod.read())
258
259 def test_passing_first_arguments_for_methods3(self):
260 a_class = 'class A(object):\n' \
261 ' def __init__(self):\n' \
262 ' self.var = 1\n' \
263 ' def a_func(self, param):\n' \
264 ' print(param, self.var)\n' \
265 'an_a = A()\n' \
266 'A.a_func(an_a, 1)\n'
267 self.mod.write(a_class)
268 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
269 expected = 'class A(object):\n' \
270 ' def __init__(self):\n' \
271 ' self.var = 1\n' \
272 'an_a = A()\n' \
273 'print(1, an_a.var)\n'
274 self.assertEquals(expected, self.mod.read())
275
276 def test_inlining_staticmethods(self):
277 a_class = 'class A(object):\n' \
278 ' @staticmethod\n' \
279 ' def a_func(param):\n' \
280 ' print(param)\n' \
281 'A.a_func(1)\n'
282 self.mod.write(a_class)
283 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
284 expected = 'class A(object):\n' \
285 ' pass\n' \
286 'print(1)\n'
287 self.assertEquals(expected, self.mod.read())
288
289 def test_static_methods2(self):
290 a_class = 'class A(object):\n' \
291 ' var = 10\n' \
292 ' @staticmethod\n' \
293 ' def a_func(param):\n' \
294 ' print(param)\n' \
295 'an_a = A()\n' \
296 'an_a.a_func(1)\n' \
297 'A.a_func(2)\n'
298 self.mod.write(a_class)
299 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
300 expected = 'class A(object):\n' \
301 ' var = 10\n' \
302 'an_a = A()\n' \
303 'print(1)\n' \
304 'print(2)\n'
305 self.assertEquals(expected, self.mod.read())
306
307 def test_inlining_classmethods(self):
308 a_class = 'class A(object):\n' \
309 ' @classmethod\n' \
310 ' def a_func(cls, param):\n' \
311 ' print(param)\n' \
312 'A.a_func(1)\n'
313 self.mod.write(a_class)
314 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
315 expected = 'class A(object):\n' \
316 ' pass\n' \
317 'print(1)\n'
318 self.assertEquals(expected, self.mod.read())
319
320 def test_inlining_classmethods2(self):
321 a_class = 'class A(object):\n' \
322 ' @classmethod\n' \
323 ' def a_func(cls, param):\n' \
324 ' return cls\n' \
325 'print(A.a_func(1))\n'
326 self.mod.write(a_class)
327 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
328 expected = 'class A(object):\n' \
329 ' pass\n' \
330 'print(A)\n'
331 self.assertEquals(expected, self.mod.read())
332
333 def test_simple_return_values_and_inlining_functions(self):
334 self.mod.write('def a_func():\n return 1\na = a_func()\n')
335 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
336 self.assertEquals('a = 1\n',
337 self.mod.read())
338
339 def test_simple_return_values_and_inlining_lonely_functions(self):
340 self.mod.write('def a_func():\n return 1\na_func()\n')
341 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
342 self.assertEquals('1\n', self.mod.read())
343
344 def test_empty_returns_and_inlining_lonely_functions(self):
345 self.mod.write('def a_func():\n '
346 'if True:\n return\na_func()\n')
347 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
348 self.assertEquals('if True:\n pass\n', self.mod.read())
349
350 def test_multiple_returns(self):
351 self.mod.write('def less_than_five(var):\n if var < 5:\n'
352 ' return True\n return False\n'
353 'a = less_than_five(2)\n')
354 with self.assertRaises(rope.base.exceptions.RefactoringError):
355 self._inline2(self.mod, self.mod.read().index('less') + 1)
356
357 def test_multiple_returns_and_not_using_the_value(self):
358 self.mod.write('def less_than_five(var):\n if var < 5:\n'
359 ' return True\n '
360 'return False\nless_than_five(2)\n')
361 self._inline2(self.mod, self.mod.read().index('less') + 1)
362 self.assertEquals('if 2 < 5:\n True\nFalse\n', self.mod.read())
363
364 def test_raising_exception_for_list_arguments(self):
365 self.mod.write('def a_func(*args):\n print(args)\na_func(1)\n')
366 with self.assertRaises(rope.base.exceptions.RefactoringError):
367 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
368
369 def test_raising_exception_for_list_keywods(self):
370 self.mod.write('def a_func(**kwds):\n print(kwds)\na_func(n=1)\n')
371 with self.assertRaises(rope.base.exceptions.RefactoringError):
372 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
373
374 def test_function_parameters_and_returns_in_other_functions(self):
375 code = 'def a_func(param1, param2):\n' \
376 ' return param1 + param2\n' \
377 'range(a_func(20, param2=abs(10)))\n'
378 self.mod.write(code)
379 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
380 self.assertEquals('range(20 + abs(10))\n', self.mod.read())
381
382 def test_function_references_other_than_call(self):
383 self.mod.write('def a_func(param):\n print(param)\nf = a_func\n')
384 with self.assertRaises(rope.base.exceptions.RefactoringError):
385 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
386
387 def test_function_referencing_itself(self):
388 self.mod.write('def a_func(var):\n func = a_func\n')
389 with self.assertRaises(rope.base.exceptions.RefactoringError):
390 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
391
392 def test_recursive_functions(self):
393 self.mod.write('def a_func(var):\n a_func(var)\n')
394 with self.assertRaises(rope.base.exceptions.RefactoringError):
395 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
396
397 # TODO: inlining on function parameters
398 def xxx_test_inlining_function_default_parameters(self):
399 self.mod.write('def a_func(p1=1):\n pass\na_func()\n')
400 self._inline2(self.mod, self.mod.read().index('p1') + 1)
401 self.assertEquals('def a_func(p1=1):\n pass\na_func()\n',
402 self.mod.read())
403
404 def test_simple_inlining_after_extra_indented_lines(self):
405 self.mod.write('def a_func():\n for i in range(10):\n pass\n'
406 'if True:\n pass\na_func()\n')
407 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
408 self.assertEquals('if True:\n pass\nfor i in range(10):'
409 '\n pass\n',
410 self.mod.read())
411
412 def test_inlining_a_function_with_pydoc(self):
413 self.mod.write('def a_func():\n """docs"""\n a = 1\na_func()')
414 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
415 self.assertEquals('a = 1\n', self.mod.read())
416
417 def test_inlining_methods(self):
418 self.mod.write("class A(object):\n name = 'hey'\n"
419 " def get_name(self):\n return self.name\n"
420 "a = A()\nname = a.get_name()\n")
421 self._inline2(self.mod, self.mod.read().rindex('get_name') + 1)
422 self.assertEquals("class A(object):\n name = 'hey'\n"
423 "a = A()\nname = a.name\n", self.mod.read())
424
425 def test_simple_returns_with_backslashes(self):
426 self.mod.write('def a_func():\n return 1'
427 '\\\n + 2\na = a_func()\n')
428 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
429 self.assertEquals('a = 1 + 2\n', self.mod.read())
430
431 def test_a_function_with_pass_body(self):
432 self.mod.write('def a_func():\n print(1)\na = a_func()\n')
433 self._inline2(self.mod, self.mod.read().index('a_func') + 1)
434 self.assertEquals('print(1)\na = None\n', self.mod.read())
435
436 def test_inlining_the_last_method_of_a_class(self):
437 self.mod.write('class A(object):\n'
438 ' def a_func(self):\n pass\n')
439 self._inline2(self.mod, self.mod.read().rindex('a_func') + 1)
440 self.assertEquals('class A(object):\n pass\n',
441 self.mod.read())
442
443 def test_adding_needed_imports_in_the_dest_module(self):
444 self.mod.write('import sys\n\ndef ver():\n print(sys.version)\n')
445 self.mod2.write('import mod\n\nmod.ver()')
446 self._inline2(self.mod, self.mod.read().index('ver') + 1)
447 self.assertEquals('import mod\nimport sys\n\nprint(sys.version)\n',
448 self.mod2.read())
449
450 def test_adding_needed_imports_in_the_dest_module_removing_selfs(self):
451 self.mod.write('import mod2\n\ndef f():\n print(mod2.var)\n')
452 self.mod2.write('import mod\n\nvar = 1\nmod.f()\n')
453 self._inline2(self.mod, self.mod.read().index('f(') + 1)
454 self.assertEquals('import mod\n\nvar = 1\nprint(var)\n',
455 self.mod2.read())
456
457 def test_handling_relative_imports_when_inlining(self):
458 pkg = testutils.create_package(self.project, 'pkg')
459 mod3 = testutils.create_module(self.project, 'mod3', pkg)
460 mod4 = testutils.create_module(self.project, 'mod4', pkg)
461 mod4.write('var = 1\n')
462 mod3.write('from . import mod4\n\ndef f():\n print(mod4.var)\n')
463 self.mod.write('import pkg.mod3\n\npkg.mod3.f()\n')
464 self._inline2(self.mod, self.mod.read().index('f(') + 1)
465 # Cannot determine the exact import
466 self.assertTrue('\n\nprint(mod4.var)\n' in self.mod.read())
467
468 def test_adding_needed_imports_for_elements_in_source(self):
469 self.mod.write('def f1():\n return f2()\ndef f2():\n return 1\n')
470 self.mod2.write('import mod\n\nprint(mod.f1())\n')
471 self._inline2(self.mod, self.mod.read().index('f1') + 1)
472 self.assertEquals('import mod\nfrom mod import f2\n\nprint(f2())\n',
473 self.mod2.read())
474
475 def test_relative_imports_and_changing_inlining_body(self):
476 pkg = testutils.create_package(self.project, 'pkg')
477 mod3 = testutils.create_module(self.project, 'mod3', pkg)
478 mod4 = testutils.create_module(self.project, 'mod4', pkg)
479 mod4.write('var = 1\n')
480 mod3.write('import mod4\n\ndef f():\n print(mod4.var)\n')
481 self.mod.write('import pkg.mod3\n\npkg.mod3.f()\n')
482 self._inline2(self.mod, self.mod.read().index('f(') + 1)
483 self.assertEquals(
484 'import pkg.mod3\nimport pkg.mod4\n\nprint(pkg.mod4.var)\n',
485 self.mod.read())
486
487 def test_inlining_with_different_returns(self):
488 self.mod.write('def f(p):\n return p\n'
489 'print(f(1))\nprint(f(2))\nprint(f(1))\n')
490 self._inline2(self.mod, self.mod.read().index('f(') + 1)
491 self.assertEquals('print(1)\nprint(2)\nprint(1)\n',
492 self.mod.read())
493
494 def test_not_removing_definition_for_variables(self):
495 code = 'a_var = 10\nanother_var = a_var\n'
496 refactored = self._inline(code, code.index('a_var') + 1,
497 remove=False)
498 self.assertEquals('a_var = 10\nanother_var = 10\n', refactored)
499
500 def test_not_removing_definition_for_methods(self):
501 code = 'def func():\n print(1)\n\nfunc()\n'
502 refactored = self._inline(code, code.index('func') + 1,
503 remove=False)
504 self.assertEquals('def func():\n print(1)\n\nprint(1)\n',
505 refactored)
506
507 def test_only_current_for_methods(self):
508 code = 'def func():\n print(1)\n\nfunc()\nfunc()\n'
509 refactored = self._inline(code, code.rindex('func') + 1,
510 remove=False, only_current=True)
511 self.assertEquals('def func():\n print(1)\n\nfunc()\nprint(1)\n',
512 refactored)
513
514 def test_only_current_for_variables(self):
515 code = 'one = 1\n\na = one\nb = one\n'
516 refactored = self._inline(code, code.rindex('one') + 1,
517 remove=False, only_current=True)
518 self.assertEquals('one = 1\n\na = one\nb = 1\n', refactored)
519
520 def test_inlining_one_line_functions(self):
521 code = 'def f(): return 1\nvar = f()\n'
522 refactored = self._inline(code, code.rindex('f'))
523 self.assertEquals('var = 1\n', refactored)
524
525 def test_inlining_one_line_functions_with_breaks(self):
526 code = 'def f(\np): return p\nvar = f(1)\n'
527 refactored = self._inline(code, code.rindex('f'))
528 self.assertEquals('var = 1\n', refactored)
529
530 def test_inlining_one_line_functions_with_breaks2(self):
531 code = 'def f(\n): return 1\nvar = f()\n'
532 refactored = self._inline(code, code.rindex('f'))
533 self.assertEquals('var = 1\n', refactored)
534
535 def test_resources_parameter(self):
536 self.mod.write('def a_func():\n print(1)\n')
537 mod1 = testutils.create_module(self.project, 'mod1')
538 mod1.write('import mod\nmod.a_func()\n')
539 self._inline2(self.mod, self.mod.read().index('a_func'),
540 resources=[self.mod])
541 self.assertEquals('', self.mod.read())
542 self.assertEquals('import mod\nmod.a_func()\n', mod1.read())
543
544 def test_inlining_parameters(self):
545 code = 'def f(p=1):\n pass\nf()\n'
546 result = self._inline(code, code.index('p'))
547 self.assertEquals('def f(p=1):\n pass\nf(1)\n', result)
548
549 def test_inlining_function_with_line_breaks_in_args(self):
550 code = 'def f(p): return p\nvar = f(1 +\n1)\n'
551 refactored = self._inline(code, code.rindex('f'))
552 self.assertEquals('var = 1 + 1\n', refactored)
553
554 def test_inlining_variables_before_comparison(self):
555 code = 'start = 1\nprint(start <= 2)\n'
556 refactored = self._inline(code, code.index('start'))
557 self.assertEquals('print(1 <= 2)\n', refactored)
558
559 def test_inlining_variables_in_other_modules(self):
560 self.mod.write('myvar = 1\n')
561 self.mod2.write('import mod\nprint(mod.myvar)\n')
562 self._inline2(self.mod, 2)
563 self.assertEquals('import mod\nprint(1)\n', self.mod2.read())
564
565 def test_inlining_variables_and_back_importing(self):
566 self.mod.write('mainvar = 1\nmyvar = mainvar\n')
567 self.mod2.write('import mod\nprint(mod.myvar)\n')
568 self._inline2(self.mod, self.mod.read().index('myvar'))
569 expected = 'import mod\n' \
570 'from mod import mainvar\n' \
571 'print(mainvar)\n'
572 self.assertEquals(expected, self.mod2.read())
573
574 def test_inlining_variables_and_importing_used_imports(self):
575 self.mod.write('import sys\nmyvar = sys.argv\n')
576 self.mod2.write('import mod\nprint(mod.myvar)\n')
577 self._inline2(self.mod, self.mod.read().index('myvar'))
578 expected = 'import mod\n' \
579 'import sys\n' \
580 'print(sys.argv)\n'
581 self.assertEquals(expected, self.mod2.read())
582
583 def test_inlining_variables_and_removing_old_froms(self):
584 self.mod.write('var = 1\n')
585 self.mod2.write('from mod import var\nprint(var)\n')
586 self._inline2(self.mod2, self.mod2.read().rindex('var'))
587 self.assertEquals('print(1)\n', self.mod2.read())
588
589 def test_inlining_method_and_removing_old_froms(self):
590 self.mod.write('def f(): return 1\n')
591 self.mod2.write('from mod import f\nprint(f())\n')
592 self._inline2(self.mod2, self.mod2.read().rindex('f'))
593 self.assertEquals('print(1)\n', self.mod2.read())
594
595 def test_inlining_functions_in_other_modules_and_only_current(self):
596 code1 = 'def f():\n' \
597 ' return 1\n' \
598 'print(f())\n'
599 code2 = 'import mod\n' \
600 'print(mod.f())\n' \
601 'print(mod.f())\n'
602 self.mod.write(code1)
603 self.mod2.write(code2)
604 self._inline2(self.mod2, self.mod2.read().rindex('f'),
605 remove=False, only_current=True)
606 expected2 = 'import mod\n' \
607 'print(mod.f())\n' \
608 'print(1)\n'
609 self.assertEquals(code1, self.mod.read())
610 self.assertEquals(expected2, self.mod2.read())
611
612 def test_inlining_variables_in_other_modules_and_only_current(self):
613 code1 = 'var = 1\n' \
614 'print(var)\n'
615 code2 = 'import mod\n' \
616 'print(mod.var)\n' \
617 'print(mod.var)\n'
618 self.mod.write(code1)
619 self.mod2.write(code2)
620 self._inline2(self.mod2, self.mod2.read().rindex('var'),
621 remove=False, only_current=True)
622 expected2 = 'import mod\n' \
623 'print(mod.var)\n' \
624 'print(1)\n'
625 self.assertEquals(code1, self.mod.read())
626 self.assertEquals(expected2, self.mod2.read())
627
628 def test_inlining_does_not_change_string_constants(self):
629 code = 'var = 1\n' \
630 'print("var\\\n' \
631 '")\n'
632 expected = 'var = 1\n' \
633 'print("var\\\n' \
634 '")\n'
635 refactored = self._inline(code, code.rindex('var'),
636 remove=False, only_current=True, docs=False)
637 self.assertEquals(expected, refactored)
638
639 def test_inlining_does_change_string_constants_if_docs_is_set(self):
640 code = 'var = 1\n' \
641 'print("var\\\n' \
642 '")\n'
643 expected = 'var = 1\n' \
644 'print("1\\\n' \
645 '")\n'
646 refactored = self._inline(code, code.rindex('var'),
647 remove=False, only_current=True, docs=True)
648 self.assertEquals(expected, refactored)
649
650
651 def suite():
652 result = unittest.TestSuite()
653 result.addTests(unittest.makeSuite(InlineTest))
654 return result
655
656
657 if __name__ == '__main__':
658 unittest.main()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698