OLD | NEW |
(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() |
OLD | NEW |