def test_moving_module_refactoring_and_nonexistent_destinations(self): self.mod4.write('a_var = 1') self.mod2.write('from pkg import mod4\n' 'import os\n\n\nprint(mod4.a_var)\n') with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod4) mover.get_changes(None).do()
def test_moving_methods_and_nonexistent_attributes(self): code = 'class A(object):\n' \ ' def a_method(self):\n return 1\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('x', 'new_method')
def test_moving_methods_getting_new_method_for_constant_methods(self): code = 'class A(object):\n def a_method(self):\n return 1\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals('def new_method(self):\n return 1\n', mover.get_new_method('new_method'))
def test_moving_module_and_star_imports(self): self.mod1.write('a_var = 1') self.mod2.write('from mod1 import *\na = a_var\n') mover = move.create_move(self.project, self.mod1) mover.get_changes(self.pkg).do() self.assertEquals('from pkg.mod1 import *\na = a_var\n', self.mod2.read())
def test_unknown_attribute_type(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self):\n return 1\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method')
def test_moving_a_global_when_it_is_used_after_a_multiline_str(self): code = 'def f():\n pass\ns = """\\\n"""\nr = f()\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("f()") + 1) self.project.do(mover.get_changes(self.mod2)) expected = 'import mod2\ns = """\\\n"""\nr = mod2.f()\n' self.assertEquals(expected, self.mod1.read())
def test_moving_methods_gettin_new_method_with_keyword_arguments(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self, p=None):\n return p\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals('def new_method(self, p=None):\n return p\n', mover.get_new_method('new_method'))
def test_moving_methods_getting_new_method_renaming_main_object(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self):\n return self.attr\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals('def new_method(self, host):\n return host.attr\n', mover.get_new_method('new_method'))
def test_moving_module_and_not_removing_blanks_after_imports(self): self.mod4.write('a_var = 1') self.mod2.write('from pkg import mod4\n' 'import os\n\n\nprint(mod4.a_var)\n') mover = move.create_move(self.project, self.mod4) mover.get_changes(self.project.root).do() self.assertEquals('import os\nimport mod4\n\n\n' 'print(mod4.a_var)\n', self.mod2.read())
def test_unknown_attribute_type(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self):\n return 1\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method')
def test_moving_resources_using_move_module_for_packages(self): self.mod1.write('import pkg\nmy_pkg = pkg') pkg2 = testutils.create_package(self.project, 'pkg2') mover = move.create_move(self.project, self.pkg) mover.get_changes(pkg2).do() expected = 'import pkg2.pkg\nmy_pkg = pkg2.pkg' self.assertEquals(expected, self.mod1.read()) self.assertTrue(pkg2.get_child('pkg') is not None)
def test_moving_resources_using_move_module_refactoring(self): self.mod1.write('a_var = 1') self.mod2.write('import mod1\nmy_var = mod1.a_var\n') mover = move.create_move(self.project, self.mod1) mover.get_changes(self.pkg).do() expected = 'import pkg.mod1\nmy_var = pkg.mod1.a_var\n' self.assertEquals(expected, self.mod2.read()) self.assertTrue(self.pkg.get_child('mod1.py') is not None)
def test_moving_a_global_when_it_is_used_after_a_multiline_str(self): code = 'def f():\n pass\ns = """\\\n"""\nr = f()\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('f()') + 1) self.project.do(mover.get_changes(self.mod2)) expected = 'import mod2\ns = """\\\n"""\nr = mod2.f()\n' self.assertEquals(expected, self.mod1.read())
def test_moving_methods_and_nonexistent_attributes(self): code = 'class A(object):\n' \ ' def a_method(self):\n return 1\n' self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('x', 'new_method')
def test_moving_methods_getting_new_method_passing_simple_paremters(self): code = 'class A(object):\n' \ ' def a_method(self, p):\n return p\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals('def new_method(self, p):\n return p\n', mover.get_new_method('new_method'))
def test_moving_resources_using_move_module_refactoring(self): self.mod1.write("a_var = 1") self.mod2.write("import mod1\nmy_var = mod1.a_var\n") mover = move.create_move(self.project, self.mod1) mover.get_changes(self.pkg).do() expected = "import pkg.mod1\nmy_var = pkg.mod1.a_var\n" self.assertEquals(expected, self.mod2.read()) self.assertTrue(self.pkg.get_child("mod1.py") is not None)
def test_moving_resources_using_move_module_for_packages(self): self.mod1.write("import pkg\nmy_pkg = pkg") pkg2 = testutils.create_package(self.project, "pkg2") mover = move.create_move(self.project, self.pkg) mover.get_changes(pkg2).do() expected = "import pkg2.pkg\nmy_pkg = pkg2.pkg" self.assertEquals(expected, self.mod1.read()) self.assertTrue(pkg2.get_child("pkg") is not None)
def test_moving_resources_using_move_module_for_init_dot_py(self): self.mod1.write("import pkg\nmy_pkg = pkg") pkg2 = testutils.create_package(self.project, "pkg2") init = self.pkg.get_child("__init__.py") mover = move.create_move(self.project, init) mover.get_changes(pkg2).do() self.assertEquals("import pkg2.pkg\nmy_pkg = pkg2.pkg", self.mod1.read()) self.assertTrue(pkg2.get_child("pkg") is not None)
def test_moving_globals_to_a_module_with_only_docstrings(self): self.mod1.write("import sys\n\n\ndef f():\n print(sys.version)\n") self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n') mover = move.create_move(self.project, self.mod1, self.mod1.read().index("f()") + 1) self.project.do(mover.get_changes(self.mod2)) self.assertEquals( '"""doc\n\nMore docs ...\n\n"""\n' "import sys\n\n\ndef f():\n print(sys.version)\n", self.mod2.read() )
def test_raising_an_exception_for_moving_non_global_variable(self): code = dedent("""\ class TestClass: CONSTANT = 5 """) self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod1, code.index("CONSTANT") + 1)
def test_moving_methods_getting_new_method_renaming_main_object(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self):\n return self.attr\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals( 'def new_method(self, host):' '\n return host.attr\n', mover.get_new_method('new_method'))
def test_moving_to_a_module_with_encoding_cookie(self): code1 = "# -*- coding: utf-8 -*-" self.mod1.write(code1) code2 = "def f(): pass\n" self.mod2.write(code2) mover = move.create_move(self.project, self.mod2, code2.index("f()") + 1) self.project.do(mover.get_changes(self.mod1)) expected = "%s\n%s" % (code1, code2) self.assertEquals(expected, self.mod1.read())
def test_moving_resources_using_move_module_for_init_dot_py(self): self.mod1.write('import pkg\nmy_pkg = pkg') pkg2 = testutils.create_package(self.project, 'pkg2') init = self.pkg.get_child('__init__.py') mover = move.create_move(self.project, init) mover.get_changes(pkg2).do() self.assertEquals('import pkg2.pkg\nmy_pkg = pkg2.pkg', self.mod1.read()) self.assertTrue(pkg2.get_child('pkg') is not None)
def get_refactor(ctx): """ Function description. :return Rename: """ _, offset = env.get_offset_params() if offset == 0: offset = None return move.create_move(ctx.project, ctx.resource, offset)
def test_moving_methods_gettin_new_method_with_many_kinds_arguments(self): code = ( "class A(object):\n attr = 1\n" " def a_method(self, p1, *args, **kwds):\n" " return self.attr\n" ) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) expected = "def new_method(self, host, p1, *args, **kwds):\n" " return host.attr\n" self.assertEquals(expected, mover.get_new_method("new_method"))
def test_moving_methods_gettin_new_method_with_many_kinds_arguments(self): code = 'class A(object):\n attr = 1\n' \ ' def a_method(self, p1, *args, **kwds):\n' \ ' return self.attr\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) expected = 'def new_method(self, host, p1, *args, **kwds):\n' \ ' return host.attr\n' self.assertEquals(expected, mover.get_new_method('new_method'))
def test_moving_globals_to_a_module_with_only_docstrings(self): self.mod1.write('import sys\n\n\ndef f():\n print(sys.version)\n') self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n') mover = move.create_move(self.project, self.mod1, self.mod1.read().index('f()') + 1) self.project.do(mover.get_changes(self.mod2)) self.assertEquals( '"""doc\n\nMore docs ...\n\n"""\n' 'import sys\n\n\ndef f():\n print(sys.version)\n', self.mod2.read())
def test_moving_methods_getting_new_method_for_multi_line_methods(self): code = 'class A(object):\n' \ ' def a_method(self):\n' \ ' a = 2\n' \ ' return a\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) self.assertEquals('def new_method(self):\n a = 2\n return a\n', mover.get_new_method('new_method'))
def test_moving_to_a_module_with_encoding_cookie(self): code1 = '# -*- coding: utf-8 -*-' self.mod1.write(code1) code2 = 'def f(): pass\n' self.mod2.write(code2) mover = move.create_move(self.project, self.mod2, code2.index('f()') + 1) self.project.do(mover.get_changes(self.mod1)) expected = '%s\n%s' % (code1, code2) self.assertEquals(expected, self.mod1.read())
def test_moving_methods_choosing_the_correct_class(self): code = dedent("""\ class A(object): def a_method(self): pass """) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) self.assertTrue(isinstance(mover, move.MoveMethod))
def test_moving_methods_and_nonexistent_attributes(self): code = dedent("""\ class A(object): def a_method(self): return 1 """) self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("x", "new_method")
def test_unknown_attribute_type(self): code = dedent("""\ class A(object): attr = 1 def a_method(self): return 1 """) self.mod1.write(code) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("attr", "new_method")
def test_moving_to_a_module_with_encoding_cookie(self): code1 = "# -*- coding: utf-8 -*-" self.mod1.write(code1) code2 = dedent("""\ def f(): pass """) self.mod2.write(code2) mover = move.create_move(self.project, self.mod2, code2.index("f()") + 1) self.project.do(mover.get_changes(self.mod1)) expected = "%s\n%s" % (code1, code2) self.assertEqual(expected, self.mod1.read())
def test_moving_resources_using_move_module_for_packages(self): self.mod1.write( dedent("""\ import pkg my_pkg = pkg""")) pkg2 = testutils.create_package(self.project, "pkg2") mover = move.create_move(self.project, self.pkg) mover.get_changes(pkg2).do() expected = dedent("""\ import pkg2.pkg my_pkg = pkg2.pkg""") self.assertEqual(expected, self.mod1.read()) self.assertTrue(pkg2.get_child("pkg") is not None)
def test_moving_module_refactoring_and_nonexistent_destinations(self): self.mod4.write("a_var = 1") self.mod2.write( dedent("""\ from pkg import mod4 import os print(mod4.a_var) """)) with self.assertRaises(exceptions.RefactoringError): mover = move.create_move(self.project, self.mod4) mover.get_changes(None).do()
def test_moving_methods_getting_getting_changes_for_goal_class3(self): self.mod2.write("class B(object):\n pass\n") code = ( "import mod2\n\n" "class A(object):\n" " attr = mod2.B()\n" " def a_method(self):\n" " return 1\n" ) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("attr", "new_method").do() expected = "class B(object):\n\n" " def new_method(self):\n" " return 1\n" self.assertEquals(expected, self.mod2.read())
def test_moving_globals_to_a_module_with_only_docstrings2(self): code = "import os\n" "import sys\n\n\n" "def f():\n" " print(sys.version, os.path)\n" self.mod1.write(code) self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n') mover = move.create_move(self.project, self.mod1, self.mod1.read().index("f()") + 1) self.project.do(mover.get_changes(self.mod2)) expected = ( '"""doc\n\nMore docs ...\n\n"""\n' "import os\n" "import sys\n\n\n" "def f():\n" " print(sys.version, os.path)\n" ) self.assertEquals(expected, self.mod2.read())
def test_moving_methods_getting_getting_changes_for_goal_class2(self): code = 'class B(object):\n var = 1\n\n' \ 'class A(object):\n attr = B()\n' \ ' def a_method(self):\n return 1\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method').do() self.assertEquals( 'class B(object):\n var = 1\n\n\n' ' def new_method(self):\n' ' return 1\n\n' 'class A(object):\n attr = B()\n' ' def a_method(self):\n' ' return self.attr.new_method()\n', self.mod1.read())
def test_moving_methods_getting_getting_changes_for_goal_class3(self): self.mod2.write('class B(object):\n pass\n') code = 'import mod2\n\n' \ 'class A(object):\n' \ ' attr = mod2.B()\n' \ ' def a_method(self):\n' \ ' return 1\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method').do() expected = 'class B(object):\n\n' \ ' def new_method(self):\n' \ ' return 1\n' self.assertEquals(expected, self.mod2.read())
def test_moving_methods_gettin_new_method_with_many_kinds_arguments(self): code = dedent("""\ class A(object): attr = 1 def a_method(self, p1, *args, **kwds): return self.attr """) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) expected = dedent("""\ def new_method(self, host, p1, *args, **kwds): return host.attr """) self.assertEqual(expected, mover.get_new_method("new_method"))
def test_moving_resources_using_move_module_refactoring(self): self.mod1.write("a_var = 1") self.mod2.write( dedent("""\ import mod1 my_var = mod1.a_var """)) mover = move.create_move(self.project, self.mod1) mover.get_changes(self.pkg).do() expected = dedent("""\ import pkg.mod1 my_var = pkg.mod1.a_var """) self.assertEqual(expected, self.mod2.read()) self.assertTrue(self.pkg.get_child("mod1.py") is not None)
def test_moving_module_and_star_imports(self): self.mod1.write("a_var = 1") self.mod2.write( dedent("""\ from mod1 import * a = a_var """)) mover = move.create_move(self.project, self.mod1) mover.get_changes(self.pkg).do() self.assertEqual( dedent("""\ from pkg.mod1 import * a = a_var """), self.mod2.read(), )
def test_moving_methods_getting_new_method_for_constant_methods(self): code = dedent("""\ class A(object): def a_method(self): return 1 """) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) self.assertEqual( dedent("""\ def new_method(self): return 1 """), mover.get_new_method("new_method"), )
def test_moving_globals_to_a_module_with_only_docstrings2(self): code = 'import os\n' \ 'import sys\n\n\n' \ 'def f():\n' \ ' print(sys.version, os.path)\n' self.mod1.write(code) self.mod2.write('"""doc\n\nMore docs ...\n\n"""\n') mover = move.create_move(self.project, self.mod1, self.mod1.read().index('f()') + 1) self.project.do(mover.get_changes(self.mod2)) expected = '"""doc\n\nMore docs ...\n\n"""\n' \ 'import os\n' \ 'import sys\n\n\n' \ 'def f():\n' \ ' print(sys.version, os.path)\n' self.assertEquals(expected, self.mod2.read())
def test_moving_methods_getting_new_method_passing_simple_paremters(self): code = dedent("""\ class A(object): def a_method(self, p): return p """) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) self.assertEqual( dedent("""\ def new_method(self, p): return p """), mover.get_new_method("new_method"), )
def test_moving_methods_and_moving_used_imports(self): self.mod2.write('class B(object):\n var = 1\n') code = 'import sys\nimport mod2\n\n' \ 'class A(object):\n' \ ' attr = mod2.B()\n' \ ' def a_method(self):\n' \ ' return sys.version\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method').do() code = 'import sys\n' \ 'class B(object):\n' \ ' var = 1\n\n\n' \ ' def new_method(self):\n' \ ' return sys.version\n' self.assertEquals(code, self.mod2.read())
def test_moving_methods_getting_getting_changes_for_goal_class2(self): code = ( "class B(object):\n var = 1\n\n" "class A(object):\n attr = B()\n" " def a_method(self):\n return 1\n" ) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("attr", "new_method").do() self.assertEquals( "class B(object):\n var = 1\n\n\n" " def new_method(self):\n" " return 1\n\n" "class A(object):\n attr = B()\n" " def a_method(self):\n" " return self.attr.new_method()\n", self.mod1.read(), )
def test_moving_methods_and_source_class_with_parameters(self): self.mod2.write('class B(object):\n pass\n') code = 'import mod2\n\n' \ 'class A(object):\n' \ ' attr = mod2.B()\n' \ ' def a_method(self, p):\n return p\n' self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index('a_method')) mover.get_changes('attr', 'new_method').do() expected1 = 'import mod2\n\n' \ 'class A(object):\n' \ ' attr = mod2.B()\n' \ ' def a_method(self, p):\n' \ ' return self.attr.new_method(p)\n' self.assertEquals(expected1, self.mod1.read()) expected2 = 'class B(object):\n\n' \ ' def new_method(self, p):\n' \ ' return p\n' self.assertEquals(expected2, self.mod2.read())
def test_moving_methods_and_moving_used_imports(self): self.mod2.write("class B(object):\n var = 1\n") code = ( "import sys\nimport mod2\n\n" "class A(object):\n" " attr = mod2.B()\n" " def a_method(self):\n" " return sys.version\n" ) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("attr", "new_method").do() code = ( "import sys\n" "class B(object):\n" " var = 1\n\n\n" " def new_method(self):\n" " return sys.version\n" ) self.assertEquals(code, self.mod2.read())
def test_moving_methods_and_source_class_with_parameters(self): self.mod2.write("class B(object):\n pass\n") code = ( "import mod2\n\n" "class A(object):\n" " attr = mod2.B()\n" " def a_method(self, p):\n return p\n" ) self.mod1.write(code) mover = move.create_move(self.project, self.mod1, code.index("a_method")) mover.get_changes("attr", "new_method").do() expected1 = ( "import mod2\n\n" "class A(object):\n" " attr = mod2.B()\n" " def a_method(self, p):\n" " return self.attr.new_method(p)\n" ) self.assertEquals(expected1, self.mod1.read()) expected2 = "class B(object):\n\n" " def new_method(self, p):\n" " return p\n" self.assertEquals(expected2, self.mod2.read())
def refactor_move_module(self, new_name): """Move the current module.""" refactor = create_move(self.project, self.resource) resource = path_to_resource(self.project, new_name) changes = refactor.get_changes(resource) return translate_changes(changes)
def test_raising_an_exception_when_moving_non_package_folders(self): dir = self.project.root.create_folder("dir") with self.assertRaises(exceptions.RefactoringError): move.create_move(self.project, dir)