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

Unified Diff: tools/telemetry/third_party/rope/ropetest/refactor/__init__.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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/rope/ropetest/refactor/__init__.py
diff --git a/tools/telemetry/third_party/rope/ropetest/refactor/__init__.py b/tools/telemetry/third_party/rope/ropetest/refactor/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..ab91529266f319e42cd07b64487b461f4d2703d0
--- /dev/null
+++ b/tools/telemetry/third_party/rope/ropetest/refactor/__init__.py
@@ -0,0 +1,938 @@
+try:
+ import unittest2 as unittest
+except ImportError:
+ import unittest
+
+import rope.base.taskhandle
+import rope.refactor.introduce_parameter
+import ropetest.refactor.extracttest
+import ropetest.refactor.importutilstest
+import ropetest.refactor.inlinetest
+import ropetest.refactor.movetest
+import ropetest.refactor.multiprojecttest
+import ropetest.refactor.patchedasttest
+import ropetest.refactor.renametest
+import ropetest.refactor.restructuretest
+import ropetest.refactor.suitestest
+import ropetest.refactor.usefunctiontest
+from rope.base.exceptions import RefactoringError, InterruptedTaskError
+from rope.refactor.encapsulate_field import EncapsulateField
+from rope.refactor.introduce_factory import IntroduceFactory
+from rope.refactor.localtofield import LocalToField
+from rope.refactor.method_object import MethodObject
+from ropetest import testutils
+from ropetest.refactor import change_signature_test, similarfindertest
+
+
+class MethodObjectTest(unittest.TestCase):
+
+ def setUp(self):
+ super(MethodObjectTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+ self.mod = testutils.create_module(self.project, 'mod')
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(MethodObjectTest, self).tearDown()
+
+ def test_empty_method(self):
+ code = 'def func():\n pass\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n def __call__(self):\n pass\n',
+ replacer.get_new_class('_New'))
+
+ def test_trivial_return(self):
+ code = 'def func():\n return 1\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n def __call__(self):'
+ '\n return 1\n',
+ replacer.get_new_class('_New'))
+
+ def test_multi_line_header(self):
+ code = 'def func(\n ):\n return 1\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n def __call__(self):'
+ '\n return 1\n',
+ replacer.get_new_class('_New'))
+
+ def test_a_single_parameter(self):
+ code = 'def func(param):\n return 1\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n'
+ ' def __init__(self, param):\n self.param = param\n\n'
+ ' def __call__(self):\n return 1\n',
+ replacer.get_new_class('_New'))
+
+ def test_self_parameter(self):
+ code = 'def func(self):\n return 1\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n'
+ ' def __init__(self, host):\n self.self = host\n\n'
+ ' def __call__(self):\n return 1\n',
+ replacer.get_new_class('_New'))
+
+ def test_simple_using_passed_parameters(self):
+ code = 'def func(param):\n return param\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.assertEquals(
+ 'class _New(object):\n\n'
+ ' def __init__(self, param):\n self.param = param\n\n'
+ ' def __call__(self):\n return self.param\n',
+ replacer.get_new_class('_New'))
+
+ def test_self_keywords_and_args_parameters(self):
+ code = 'def func(arg, *args, **kwds):\n' \
+ ' result = arg + args[0] + kwds[arg]\n' \
+ ' return result\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ expected = 'class _New(object):\n\n' \
+ ' def __init__(self, arg, args, kwds):\n' \
+ ' self.arg = arg\n' \
+ ' self.args = args\n' \
+ ' self.kwds = kwds\n\n' \
+ ' def __call__(self):\n' \
+ ' result = self.arg + ' \
+ 'self.args[0] + self.kwds[self.arg]\n' \
+ ' return result\n'
+ self.assertEquals(expected, replacer.get_new_class('_New'))
+
+ def test_performing_on_not_a_function(self):
+ code = 'my_var = 10\n'
+ self.mod.write(code)
+ with self.assertRaises(RefactoringError):
+ MethodObject(self.project, self.mod, code.index('my_var'))
+
+ def test_changing_the_module(self):
+ code = 'def func():\n return 1\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.project.do(replacer.get_changes('_New'))
+ expected = 'def func():\n' \
+ ' return _New()()\n\n\n' \
+ 'class _New(object):\n\n' \
+ ' def __call__(self):\n' \
+ ' return 1\n'
+ self.assertEquals(expected, self.mod.read())
+
+ def test_changing_the_module_and_class_methods(self):
+ code = 'class C(object):\n\n' \
+ ' def a_func(self):\n' \
+ ' return 1\n\n' \
+ ' def another_func(self):\n' \
+ ' pass\n'
+ self.mod.write(code)
+ replacer = MethodObject(self.project, self.mod, code.index('func'))
+ self.project.do(replacer.get_changes('_New'))
+ expected = 'class C(object):\n\n' \
+ ' def a_func(self):\n' \
+ ' return _New(self)()\n\n' \
+ ' def another_func(self):\n' \
+ ' pass\n\n\n' \
+ 'class _New(object):\n\n' \
+ ' def __init__(self, host):\n' \
+ ' self.self = host\n\n' \
+ ' def __call__(self):\n' \
+ ' return 1\n'
+ self.assertEquals(expected, self.mod.read())
+
+
+class IntroduceFactoryTest(unittest.TestCase):
+
+ def setUp(self):
+ super(IntroduceFactoryTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(IntroduceFactoryTest, self).tearDown()
+
+ def _introduce_factory(self, resource, offset, *args, **kwds):
+ factory_introducer = IntroduceFactory(self.project,
+ resource, offset)
+ changes = factory_introducer.get_changes(*args, **kwds)
+ self.project.do(changes)
+
+ def test_adding_the_method(self):
+ code = 'class AClass(object):\n an_attr = 10\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1, 'create')
+ self.assertEquals(expected, mod.read())
+
+ def test_changing_occurances_in_the_main_module(self):
+ code = 'class AClass(object):\n' \
+ ' an_attr = 10\n' \
+ 'a_var = AClass()'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'\
+ 'a_var = AClass.create()'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1, 'create')
+ self.assertEquals(expected, mod.read())
+
+ def test_changing_occurances_with_arguments(self):
+ code = 'class AClass(object):\n' \
+ ' def __init__(self, arg):\n' \
+ ' pass\n' \
+ 'a_var = AClass(10)\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n' \
+ ' def __init__(self, arg):\n' \
+ ' pass\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n' \
+ 'a_var = AClass.create(10)\n'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1, 'create')
+ self.assertEquals(expected, mod.read())
+
+ def test_changing_occurances_in_other_modules(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ mod1.write('class AClass(object):\n an_attr = 10\n')
+ mod2.write('import mod1\na_var = mod1.AClass()\n')
+ self._introduce_factory(mod1, mod1.read().index('AClass') + 1,
+ 'create')
+ expected1 = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ expected2 = 'import mod1\n' \
+ 'a_var = mod1.AClass.create()\n'
+ self.assertEquals(expected1, mod1.read())
+ self.assertEquals(expected2, mod2.read())
+
+ def test_raising_exception_for_non_classes(self):
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write('def a_func():\n pass\n')
+ with self.assertRaises(RefactoringError):
+ self._introduce_factory(mod, mod.read().index('a_func') + 1,
+ 'create')
+
+ def test_undoing_introduce_factory(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ code1 = 'class AClass(object):\n an_attr = 10\n'
+ mod1.write(code1)
+ code2 = 'from mod1 import AClass\na_var = AClass()\n'
+ mod2.write(code2)
+ self._introduce_factory(mod1, mod1.read().index('AClass') + 1,
+ 'create')
+ self.project.history.undo()
+ self.assertEquals(code1, mod1.read())
+ self.assertEquals(code2, mod2.read())
+
+ def test_using_on_an_occurance_outside_the_main_module(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ mod1.write('class AClass(object):\n an_attr = 10\n')
+ mod2.write('import mod1\na_var = mod1.AClass()\n')
+ self._introduce_factory(mod2, mod2.read().index('AClass') + 1,
+ 'create')
+ expected1 = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ expected2 = 'import mod1\n' \
+ 'a_var = mod1.AClass.create()\n'
+ self.assertEquals(expected1, mod1.read())
+ self.assertEquals(expected2, mod2.read())
+
+ def test_introduce_factory_in_nested_scopes(self):
+ code = 'def create_var():\n'\
+ ' class AClass(object):\n'\
+ ' an_attr = 10\n'\
+ ' return AClass()\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'def create_var():\n'\
+ ' class AClass(object):\n'\
+ ' an_attr = 10\n\n'\
+ ' @staticmethod\n ' \
+ 'def create(*args, **kwds):\n'\
+ ' return AClass(*args, **kwds)\n'\
+ ' return AClass.create()\n'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1, 'create')
+ self.assertEquals(expected, mod.read())
+
+ def test_adding_factory_for_global_factories(self):
+ code = 'class AClass(object):\n an_attr = 10\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ 'def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1,
+ 'create', global_factory=True)
+ self.assertEquals(expected, mod.read())
+
+ def test_get_name_for_factories(self):
+ code = 'class C(object):\n pass\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ factory = IntroduceFactory(self.project, mod,
+ mod.read().index('C') + 1)
+ self.assertEquals('C', factory.get_name())
+
+ def test_raising_exception_for_global_factory_for_nested_classes(self):
+ code = 'def create_var():\n'\
+ ' class AClass(object):\n'\
+ ' an_attr = 10\n'\
+ ' return AClass()\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ with self.assertRaises(RefactoringError):
+ self._introduce_factory(mod, mod.read().index('AClass') + 1,
+ 'create', global_factory=True)
+
+ def test_changing_occurances_in_the_main_module_for_global_factories(self):
+ code = 'class AClass(object):\n' \
+ ' an_attr = 10\n' \
+ 'a_var = AClass()'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n an_attr = 10\n\n' \
+ 'def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'\
+ 'a_var = create()'
+ self._introduce_factory(mod, mod.read().index('AClass') + 1,
+ 'create', global_factory=True)
+ self.assertEquals(expected, mod.read())
+
+ def test_changing_occurances_in_other_modules_for_global_factories(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ mod1.write('class AClass(object):\n an_attr = 10\n')
+ mod2.write('import mod1\na_var = mod1.AClass()\n')
+ self._introduce_factory(mod1, mod1.read().index('AClass') + 1,
+ 'create', global_factory=True)
+ expected1 = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ 'def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ expected2 = 'import mod1\n' \
+ 'a_var = mod1.create()\n'
+ self.assertEquals(expected1, mod1.read())
+ self.assertEquals(expected2, mod2.read())
+
+ def test_import_if_necessary_in_other_mods_for_global_factories(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ mod1.write('class AClass(object):\n an_attr = 10\n')
+ mod2.write('from mod1 import AClass\npair = AClass(), AClass\n')
+ self._introduce_factory(mod1, mod1.read().index('AClass') + 1,
+ 'create', global_factory=True)
+ expected1 = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ 'def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n'
+ expected2 = 'from mod1 import AClass, create\n' \
+ 'pair = create(), AClass\n'
+ self.assertEquals(expected1, mod1.read())
+ self.assertEquals(expected2, mod2.read())
+
+ def test_changing_occurances_for_renamed_classes(self):
+ code = 'class AClass(object):\n an_attr = 10' \
+ '\na_class = AClass\na_var = a_class()'
+ mod = testutils.create_module(self.project, 'mod')
+ mod.write(code)
+ expected = 'class AClass(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return AClass(*args, **kwds)\n' \
+ 'a_class = AClass\n' \
+ 'a_var = a_class()'
+ self._introduce_factory(mod, mod.read().index('a_class') + 1, 'create')
+ self.assertEquals(expected, mod.read())
+
+ def test_changing_occurrs_in_the_same_module_with_conflict_ranges(self):
+ mod = testutils.create_module(self.project, 'mod')
+ code = 'class C(object):\n' \
+ ' def create(self):\n' \
+ ' return C()\n'
+ mod.write(code)
+ self._introduce_factory(mod, mod.read().index('C'), 'create_c', True)
+ expected = 'class C(object):\n' \
+ ' def create(self):\n' \
+ ' return create_c()\n'
+ self.assertTrue(mod.read().startswith(expected))
+
+ def _transform_module_to_package(self, resource):
+ self.project.do(rope.refactor.ModuleToPackage(
+ self.project, resource).get_changes())
+
+ def test_transform_module_to_package(self):
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod1.write('import mod2\nfrom mod2 import AClass\n')
+ mod2 = testutils.create_module(self.project, 'mod2')
+ mod2.write('class AClass(object):\n pass\n')
+ self._transform_module_to_package(mod2)
+ mod2 = self.project.get_resource('mod2')
+ root_folder = self.project.root
+ self.assertFalse(root_folder.has_child('mod2.py'))
+ self.assertEquals('class AClass(object):\n pass\n',
+ root_folder.get_child('mod2').
+ get_child('__init__.py').read())
+
+ def test_transform_module_to_package_undoing(self):
+ pkg = testutils.create_package(self.project, 'pkg')
+ mod = testutils.create_module(self.project, 'mod', pkg)
+ self._transform_module_to_package(mod)
+ self.assertFalse(pkg.has_child('mod.py'))
+ self.assertTrue(pkg.get_child('mod').has_child('__init__.py'))
+ self.project.history.undo()
+ self.assertTrue(pkg.has_child('mod.py'))
+ self.assertFalse(pkg.has_child('mod'))
+
+ def test_transform_module_to_package_with_relative_imports(self):
+ pkg = testutils.create_package(self.project, 'pkg')
+ mod1 = testutils.create_module(self.project, 'mod1', pkg)
+ mod1.write('import mod2\nfrom mod2 import AClass\n')
+ mod2 = testutils.create_module(self.project, 'mod2', pkg)
+ mod2.write('class AClass(object):\n pass\n')
+ self._transform_module_to_package(mod1)
+ new_init = self.project.get_resource('pkg/mod1/__init__.py')
+ self.assertEquals('import pkg.mod2\nfrom pkg.mod2 import AClass\n',
+ new_init.read())
+
+ def test_resources_parameter(self):
+ code = 'class A(object):\n an_attr = 10\n'
+ code1 = 'import mod\na = mod.A()\n'
+ mod = testutils.create_module(self.project, 'mod')
+ mod1 = testutils.create_module(self.project, 'mod1')
+ mod.write(code)
+ mod1.write(code1)
+ expected = 'class A(object):\n' \
+ ' an_attr = 10\n\n' \
+ ' @staticmethod\n' \
+ ' def create(*args, **kwds):\n' \
+ ' return A(*args, **kwds)\n'
+ self._introduce_factory(mod, mod.read().index('A') + 1,
+ 'create', resources=[mod])
+ self.assertEquals(expected, mod.read())
+ self.assertEquals(code1, mod1.read())
+
+
+class EncapsulateFieldTest(unittest.TestCase):
+
+ def setUp(self):
+ super(EncapsulateFieldTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+ self.mod = testutils.create_module(self.project, 'mod')
+ self.mod1 = testutils.create_module(self.project, 'mod1')
+ self.a_class = 'class A(object):\n' \
+ ' def __init__(self):\n' \
+ ' self.attr = 1\n'
+ self.added_methods = '\n' \
+ ' def get_attr(self):\n' \
+ ' return self.attr\n\n' \
+ ' def set_attr(self, value):\n' \
+ ' self.attr = value\n'
+ self.encapsulated = self.a_class + self.added_methods
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(EncapsulateFieldTest, self).tearDown()
+
+ def _encapsulate(self, resource, offset, **args):
+ changes = EncapsulateField(self.project, resource, offset).\
+ get_changes(**args)
+ self.project.do(changes)
+
+ def test_adding_getters_and_setters(self):
+ code = self.a_class
+ self.mod.write(code)
+ self._encapsulate(self.mod, code.index('attr') + 1)
+ self.assertEquals(self.encapsulated, self.mod.read())
+
+ def test_changing_getters_in_other_modules(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'range(a_var.attr)\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'range(a_var.get_attr())\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_setters_in_other_modules(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr = 1\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.set_attr(1)\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_getters_in_setters(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr = 1 + a_var.attr\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.set_attr(1 + a_var.get_attr())\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_appending_to_class_end(self):
+ self.mod1.write(self.a_class + 'a_var = A()\n')
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+ self.assertEquals(self.encapsulated + 'a_var = A()\n',
+ self.mod1.read())
+
+ def test_performing_in_other_modules(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'range(a_var.attr)\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+ self.assertEquals(self.encapsulated, self.mod.read())
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'range(a_var.get_attr())\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_main_module_occurances(self):
+ code = self.a_class + \
+ 'a_var = A()\n' \
+ 'a_var.attr = a_var.attr * 2\n'
+ self.mod1.write(code)
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+ expected = self.encapsulated + \
+ 'a_var = A()\n' \
+ 'a_var.set_attr(a_var.get_attr() * 2)\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_raising_exception_when_performed_on_non_attributes(self):
+ self.mod1.write('attr = 10')
+ with self.assertRaises(RefactoringError):
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+
+ def test_raising_exception_on_tuple_assignments(self):
+ self.mod.write(self.a_class)
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr = 1\n' \
+ 'a_var.attr, b = 1, 2\n'
+ self.mod1.write(code)
+ with self.assertRaises(RefactoringError):
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+
+ def test_raising_exception_on_tuple_assignments2(self):
+ self.mod.write(self.a_class)
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr = 1\n' \
+ 'b, a_var.attr = 1, 2\n'
+ self.mod1.write(code)
+ with self.assertRaises(RefactoringError):
+ self._encapsulate(self.mod1, self.mod1.read().index('attr') + 1)
+
+ def test_tuple_assignments_and_function_calls(self):
+ code = 'import mod\n' \
+ 'def func(a1=0, a2=0):\n' \
+ ' pass\n' \
+ 'a_var = mod.A()\n' \
+ 'func(a_var.attr, a2=2)\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'def func(a1=0, a2=0):\n' \
+ ' pass\n' \
+ 'a_var = mod.A()\n' \
+ 'func(a_var.get_attr(), a2=2)\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_tuple_assignments(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a, b = a_var.attr, 1\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a, b = a_var.get_attr(), 1\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_augmented_assignments(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr += 1\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.set_attr(a_var.get_attr() + 1)\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_augmented_assignments2(self):
+ code = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.attr <<= 1\n'
+ self.mod1.write(code)
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = 'import mod\n' \
+ 'a_var = mod.A()\n' \
+ 'a_var.set_attr(a_var.get_attr() << 1)\n'
+ self.assertEquals(expected, self.mod1.read())
+
+ def test_changing_occurrences_inside_the_class(self):
+ new_class = self.a_class + '\n' \
+ ' def a_func(self):\n' \
+ ' self.attr = 1\n'
+ self.mod.write(new_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1)
+ expected = self.a_class + '\n' \
+ ' def a_func(self):\n' \
+ ' self.set_attr(1)\n' + \
+ self.added_methods
+ self.assertEquals(expected, self.mod.read())
+
+ def test_getter_and_setter_parameters(self):
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1,
+ getter='getAttr', setter='setAttr')
+ new_methods = self.added_methods.replace('get_attr', 'getAttr').\
+ replace('set_attr', 'setAttr')
+ expected = self.a_class + new_methods
+ self.assertEquals(expected, self.mod.read())
+
+ def test_using_resources_parameter(self):
+ self.mod1.write('import mod\na = mod.A()\nvar = a.attr\n')
+ self.mod.write(self.a_class)
+ self._encapsulate(self.mod, self.mod.read().index('attr') + 1,
+ resources=[self.mod])
+ self.assertEquals('import mod\na = mod.A()\nvar = a.attr\n',
+ self.mod1.read())
+ expected = self.a_class + self.added_methods
+ self.assertEquals(expected, self.mod.read())
+
+
+class LocalToFieldTest(unittest.TestCase):
+
+ def setUp(self):
+ super(LocalToFieldTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+ self.mod = testutils.create_module(self.project, 'mod')
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(LocalToFieldTest, self).tearDown()
+
+ def _perform_convert_local_variable_to_field(self, resource, offset):
+ changes = LocalToField(
+ self.project, resource, offset).get_changes()
+ self.project.do(changes)
+
+ def test_simple_local_to_field(self):
+ code = 'class A(object):\n' \
+ ' def a_func(self):\n' \
+ ' var = 10\n'
+ self.mod.write(code)
+ self._perform_convert_local_variable_to_field(self.mod,
+ code.index('var') + 1)
+ expected = 'class A(object):\n' \
+ ' def a_func(self):\n' \
+ ' self.var = 10\n'
+ self.assertEquals(expected, self.mod.read())
+
+ def test_raising_exception_when_performed_on_a_global_var(self):
+ self.mod.write('var = 10\n')
+ with self.assertRaises(RefactoringError):
+ self._perform_convert_local_variable_to_field(
+ self.mod, self.mod.read().index('var') + 1)
+
+ def test_raising_exception_when_performed_on_field(self):
+ code = 'class A(object):\n' \
+ ' def a_func(self):\n' \
+ ' self.var = 10\n'
+ self.mod.write(code)
+ with self.assertRaises(RefactoringError):
+ self._perform_convert_local_variable_to_field(
+ self.mod, self.mod.read().index('var') + 1)
+
+ def test_raising_exception_when_performed_on_a_parameter(self):
+ code = 'class A(object):\n' \
+ ' def a_func(self, var):\n' \
+ ' a = var\n'
+ self.mod.write(code)
+ with self.assertRaises(RefactoringError):
+ self._perform_convert_local_variable_to_field(
+ self.mod, self.mod.read().index('var') + 1)
+
+ # NOTE: This situation happens alot and is normally not an error
+ #@testutils.assert_raises(RefactoringError)
+ def test_not_rais_exception_when_there_is_a_field_with_the_same_name(self):
+ code = 'class A(object):\n' \
+ ' def __init__(self):\n' \
+ ' self.var = 1\n' \
+ ' def a_func(self):\n var = 10\n'
+ self.mod.write(code)
+ self._perform_convert_local_variable_to_field(
+ self.mod, self.mod.read().rindex('var') + 1)
+
+ def test_local_to_field_with_self_renamed(self):
+ code = 'class A(object):\n' \
+ ' def a_func(myself):\n' \
+ ' var = 10\n'
+ self.mod.write(code)
+ self._perform_convert_local_variable_to_field(self.mod,
+ code.index('var') + 1)
+ expected = 'class A(object):\n' \
+ ' def a_func(myself):\n' \
+ ' myself.var = 10\n'
+ self.assertEquals(expected, self.mod.read())
+
+
+class IntroduceParameterTest(unittest.TestCase):
+
+ def setUp(self):
+ super(IntroduceParameterTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+ self.mod = testutils.create_module(self.project, 'mod')
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(IntroduceParameterTest, self).tearDown()
+
+ def _introduce_parameter(self, offset, name):
+ rope.refactor.introduce_parameter.IntroduceParameter(
+ self.project, self.mod, offset).get_changes(name).do()
+
+ def test_simple_case(self):
+ code = 'var = 1\n' \
+ 'def f():\n' \
+ ' b = var\n'
+ self.mod.write(code)
+ offset = self.mod.read().rindex('var')
+ self._introduce_parameter(offset, 'var')
+ expected = 'var = 1\n' \
+ 'def f(var=var):\n' \
+ ' b = var\n'
+ self.assertEquals(expected, self.mod.read())
+
+ def test_changing_function_body(self):
+ code = 'var = 1\n' \
+ 'def f():\n' \
+ ' b = var\n'
+ self.mod.write(code)
+ offset = self.mod.read().rindex('var')
+ self._introduce_parameter(offset, 'p1')
+ expected = 'var = 1\n' \
+ 'def f(p1=var):\n' \
+ ' b = p1\n'
+ self.assertEquals(expected, self.mod.read())
+
+ def test_unknown_variables(self):
+ self.mod.write('def f():\n b = var + c\n')
+ offset = self.mod.read().rindex('var')
+ with self.assertRaises(RefactoringError):
+ self._introduce_parameter(offset, 'p1')
+ self.assertEquals('def f(p1=var):\n b = p1 + c\n',
+ self.mod.read())
+
+ def test_failing_when_not_inside(self):
+ self.mod.write('var = 10\nb = var\n')
+ offset = self.mod.read().rindex('var')
+ with self.assertRaises(RefactoringError):
+ self._introduce_parameter(offset, 'p1')
+
+ def test_attribute_accesses(self):
+ code = 'class C(object):\n' \
+ ' a = 10\nc = C()\n' \
+ 'def f():\n' \
+ ' b = c.a\n'
+ self.mod.write(code)
+ offset = self.mod.read().rindex('a')
+ self._introduce_parameter(offset, 'p1')
+ expected = 'class C(object):\n' \
+ ' a = 10\n' \
+ 'c = C()\n' \
+ 'def f(p1=c.a):\n' \
+ ' b = p1\n'
+ self.assertEquals(expected, self.mod.read())
+
+ def test_introducing_parameters_for_methods(self):
+ code = 'var = 1\n' \
+ 'class C(object):\n' \
+ ' def f(self):\n' \
+ ' b = var\n'
+ self.mod.write(code)
+ offset = self.mod.read().rindex('var')
+ self._introduce_parameter(offset, 'p1')
+ expected = 'var = 1\n' \
+ 'class C(object):\n' \
+ ' def f(self, p1=var):\n' \
+ ' b = p1\n'
+ self.assertEquals(expected, self.mod.read())
+
+
+class _MockTaskObserver(object):
+
+ def __init__(self):
+ self.called = 0
+
+ def __call__(self):
+ self.called += 1
+
+
+class TaskHandleTest(unittest.TestCase):
+
+ def test_trivial_case(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ self.assertFalse(handle.is_stopped())
+
+ def test_stopping(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ handle.stop()
+ self.assertTrue(handle.is_stopped())
+
+ def test_job_sets(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset()
+ self.assertEquals([jobs], handle.get_jobsets())
+
+ def test_starting_and_finishing_jobs(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset(name='test job set', count=1)
+ jobs.started_job('job1')
+ jobs.finished_job()
+
+ def test_test_checking_status(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset()
+ handle.stop()
+ with self.assertRaises(InterruptedTaskError):
+ jobs.check_status()
+
+ def test_test_checking_status_when_starting(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset()
+ handle.stop()
+ with self.assertRaises(InterruptedTaskError):
+ jobs.started_job('job1')
+
+ def test_calling_the_observer_after_stopping(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ observer = _MockTaskObserver()
+ handle.add_observer(observer)
+ handle.stop()
+ self.assertEquals(1, observer.called)
+
+ def test_calling_the_observer_after_creating_job_sets(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ observer = _MockTaskObserver()
+ handle.add_observer(observer)
+ jobs = handle.create_jobset() # noqa
+ self.assertEquals(1, observer.called)
+
+ def test_calling_the_observer_when_starting_and_finishing_jobs(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ observer = _MockTaskObserver()
+ handle.add_observer(observer)
+ jobs = handle.create_jobset(name='test job set', count=1)
+ jobs.started_job('job1')
+ jobs.finished_job()
+ self.assertEquals(3, observer.called)
+
+ def test_job_set_get_percent_done(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset(name='test job set', count=2)
+ self.assertEquals(0, jobs.get_percent_done())
+ jobs.started_job('job1')
+ jobs.finished_job()
+ self.assertEquals(50, jobs.get_percent_done())
+ jobs.started_job('job2')
+ jobs.finished_job()
+ self.assertEquals(100, jobs.get_percent_done())
+
+ def test_getting_job_name(self):
+ handle = rope.base.taskhandle.TaskHandle()
+ jobs = handle.create_jobset(name='test job set', count=1)
+ self.assertEquals('test job set', jobs.get_name())
+ self.assertEquals(None, jobs.get_active_job_name())
+ jobs.started_job('job1')
+ self.assertEquals('job1', jobs.get_active_job_name())
+
+
+def suite():
+ result = unittest.TestSuite()
+ result.addTests(ropetest.refactor.renametest.suite())
+ result.addTests(unittest.makeSuite(
+ ropetest.refactor.extracttest.ExtractMethodTest))
+ result.addTests(unittest.makeSuite(IntroduceFactoryTest))
+ result.addTests(unittest.makeSuite(
+ ropetest.refactor.movetest.MoveRefactoringTest))
+ result.addTests(ropetest.refactor.inlinetest.suite())
+ result.addTests(unittest.makeSuite(
+ ropetest.refactor.patchedasttest.PatchedASTTest))
+ result.addTests(unittest.makeSuite(EncapsulateFieldTest))
+ result.addTests(unittest.makeSuite(LocalToFieldTest))
+ result.addTests(unittest.makeSuite(
+ change_signature_test.ChangeSignatureTest))
+ result.addTests(unittest.makeSuite(IntroduceParameterTest))
+ result.addTests(ropetest.refactor.importutilstest.suite())
+ result.addTests(similarfindertest.suite())
+ result.addTests(unittest.makeSuite(TaskHandleTest))
+ result.addTests(unittest.makeSuite(ropetest.refactor.
+ restructuretest.RestructureTest))
+ result.addTests(unittest.makeSuite(ropetest.refactor.
+ suitestest.SuiteTest))
+ result.addTests(unittest.makeSuite(ropetest.refactor.multiprojecttest.
+ MultiProjectRefactoringTest))
+ result.addTests(unittest.makeSuite(ropetest.refactor.usefunctiontest.
+ UseFunctionTest))
+ return result
+
+
+if __name__ == '__main__':
+ import sys
+ if len(sys.argv) > 1:
+ unittest.main()
+ else:
+ runner = unittest.TextTestRunner()
+ result = runner.run(suite())
+ sys.exit(not result.wasSuccessful())

Powered by Google App Engine
This is Rietveld 408576698