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