示例#1
0
 def test_resources_parameter(self):
     mod1 = testutils.create_module(self.project, "mod1")
     mod1.write("def a_func(param):\n    pass\n")
     self.mod.write(
         dedent("""\
             import mod1
             mod1.a_func(1)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, mod1, mod1.read().index("a_func") + 1
     )
     signature.get_changes(
         [change_signature.ArgumentRemover(0)], resources=[mod1]
     ).do()
     self.assertEqual(
         dedent("""\
             import mod1
             mod1.a_func(1)
         """),
         self.mod.read(),
     )
     self.assertEqual(
         dedent("""\
             def a_func():
                 pass
         """),
         mod1.read(),
     )
示例#2
0
 def test_changing_signature_for_constructors_when_using_super(self):
     self.mod.write(
         dedent("""\
             class A(object):
                 def __init__(self, p):
                     pass
             class B(A):
                 def __init__(self, p):
                     super(B, self).__init__(p)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("__init__") + 1
     )
     signature.get_changes([change_signature.ArgumentRemover(1)]).do()
     self.assertEqual(
         dedent("""\
             class A(object):
                 def __init__(self):
                     pass
             class B(A):
                 def __init__(self, p):
                     super(B, self).__init__()
         """),
         self.mod.read(),
     )
示例#3
0
 def __init__(self, *args, **kwds):
     super(InlineParameter, self).__init__(*args, **kwds)
     resource, offset = self._function_location()
     index = self.pyname.index
     self.changers = [change_signature.ArgumentDefaultInliner(index)]
     self.signature = change_signature.ChangeSignature(
         self.project, resource, offset)
示例#4
0
 def test_changing_signature_in_subclasses(self):
     self.mod.write(
         dedent("""\
             class A(object):
                 def a_method(self):
                     pass
             class B(A):
                 def a_method(self):
                     pass
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_method") + 1
     )
     signature.get_changes(
         [change_signature.ArgumentAdder(1, "p1")], in_hierarchy=True
     ).do()
     self.assertEqual(
         dedent("""\
             class A(object):
                 def a_method(self, p1):
                     pass
             class B(A):
                 def a_method(self, p1):
                     pass
         """),
         self.mod.read(),
     )
 def test_adding_arguments_for_normal_args_changing_definition(self):
     self.mod.write('def a_func():\n    pass\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentAdder(0, 'p1')]))
     self.assertEquals('def a_func(p1):\n    pass\n', self.mod.read())
示例#6
0
 def test_normalizing_functions_from_other_modules(self):
     mod1 = testutils.create_module(self.project, "mod1")
     mod1.write(
         dedent("""\
             def a_func(param):
                 pass
         """)
     )
     self.mod.write(
         dedent("""\
             import mod1
             mod1.a_func(param=1)
         """)
     )
     signature = change_signature.ChangeSignature(
         self.project, mod1, mod1.read().index("a_func") + 1
     )
     self.project.do(signature.get_changes([change_signature.ArgumentNormalizer()]))
     self.assertEqual(
         dedent("""\
             import mod1
             mod1.a_func(1)
         """),
         self.mod.read(),
     )
 def test_adding_duplicate_parameter_and_raising_exceptions(self):
     self.mod.write('def a_func(p1):\n    pass\n')
     with self.assertRaises(rope.base.exceptions.RefactoringError):
         signature = change_signature.ChangeSignature(
             self.project, self.mod, self.mod.read().index('a_func') + 1)
         self.project.do(signature.get_changes(
             [change_signature.ArgumentAdder(1, 'p1')]))
 def test_normalizing_parameters_for_unsorted_keyword(self):
     self.mod.write('def a_func(p1, p2):\n    pass\na_func(p2=2, p1=1)')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentNormalizer()]))
     self.assertEquals('def a_func(p1, p2):\n    pass\na_func(1, 2)',
                       self.mod.read())
 def test_changing_order_with_static_params(self):
     self.mod.write('def a_func(p1, p2=0, p3=0):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([0, 2, 1])]))
     self.assertEquals('def a_func(p1, p3=0, p2=0):\n    pass\n'
                       'a_func(1, p2=2)\n', self.mod.read())
示例#10
0
 def test_normalizing_parameters_for_trivial_case2(self):
     code = 'def a_func(param):\n    pass\na_func(2)'
     self.mod.write(code)
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentNormalizer()]))
     self.assertEquals(code, self.mod.read())
示例#11
0
 def test_reordering_multi_line_function_headers(self):
     self.mod.write('def a_func(p1,\n p2):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([1, 0])]))
     self.assertEquals('def a_func(p2, p1):\n    pass\na_func(2, 1)\n',
                       self.mod.read())
示例#12
0
 def test_change_order_for_two_parameter(self):
     self.mod.write('def a_func(p1, p2):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentReorderer([1, 0])]))
     self.assertEquals('def a_func(p2, p1):\n    pass\na_func(2, 1)\n',
                       self.mod.read())
示例#13
0
 def test_normalizing_parameters_for_args_parameter(self):
     self.mod.write('def a_func(*arg):\n    pass\na_func(1, 2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentNormalizer()]))
     self.assertEquals('def a_func(*arg):\n    pass\na_func(1, 2)\n',
                       self.mod.read())
示例#14
0
 def test_inlining_default_arguments2(self):
     self.mod.write('def a_func(p1=0):\n    pass\na_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentDefaultInliner(0)]))
     self.assertEquals('def a_func(p1=0):\n    pass\n'
                       'a_func(1)\n', self.mod.read())
示例#15
0
 def test_adding_arguments_for_normal_args_changing_calls(self):
     self.mod.write('def a_func():\n    pass\na_func()\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     adder = change_signature.ArgumentAdder(0, 'p1', 'None', '1')
     self.project.do(signature.get_changes([adder]))
     self.assertEquals('def a_func(p1=None):\n    pass\na_func(1)\n',
                       self.mod.read())
示例#16
0
 def test_adding_arguments_for_norm_args_chang_calls_with_no_value(self):
     self.mod.write('def a_func(p2=0):\n    pass\na_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     adder = change_signature.ArgumentAdder(0, 'p1', '0', None)
     self.project.do(signature.get_changes([adder]))
     self.assertEquals('def a_func(p1=0, p2=0):\n    pass\na_func(p2=1)\n',
                       self.mod.read())
示例#17
0
 def test_redordering_arguments_reported_by_mft(self):
     self.mod.write('def f(a, b, c):\n    pass\nf(1, 2, 3)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().rindex('f'))
     signature.get_changes(
         [change_signature.ArgumentReorderer([1, 2, 0])]).do()
     self.assertEquals('def f(b, c, a):\n    pass\nf(2, 3, 1)\n',
                       self.mod.read())
示例#18
0
 def test_removing_keyword_arg2(self):
     self.mod.write('def a_func(p1, *args, **kwds):\n    pass\na_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentRemover(2)]))
     self.assertEquals('def a_func(p1, *args):\n    pass\na_func(1)\n',
                       self.mod.read())
示例#19
0
 def test_removing_arguments_with_defaults(self):
     self.mod.write('def a_func(p1=1):\n    pass\na_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentRemover(0)]))
     self.assertEquals('def a_func():\n    pass\na_func()\n',
                       self.mod.read())
示例#20
0
 def xxx_test_removing_arguments_star_args3(self):
     self.mod.write('def a_func(p1, *args):\n    pass\n'
                    'a_func(*[1, 2, 3])\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentRemover(1)]))
     self.assertEquals('def a_func(p1):\n    pass\na_func(*[1, 2, 3])\n',
                       self.mod.read())
示例#21
0
 def test_normalizing_functions_from_other_modules(self):
     mod1 = testutils.create_module(self.project, 'mod1')
     mod1.write('def a_func(param):\n    pass\n')
     self.mod.write('import mod1\nmod1.a_func(param=1)\n')
     signature = change_signature.ChangeSignature(
         self.project, mod1, mod1.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentNormalizer()]))
     self.assertEquals('import mod1\nmod1.a_func(1)\n', self.mod.read())
示例#22
0
    def get_refactor(ctx):
        """ Function description.

        :return Rename:

        """
        _, offset = env.get_offset_params()
        return change_signature.ChangeSignature(ctx.project, ctx.resource,
                                                offset)
示例#23
0
 def test_preserving_args_and_keywords_order(self):
     self.mod.write('def a_func(*args, **kwds):\n    pass\n'
                    'a_func(3, 1, 2, a=1, c=3, b=2)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentNormalizer()]))
     self.assertEquals('def a_func(*args, **kwds):\n    pass\n'
                       'a_func(3, 1, 2, a=1, c=3, b=2)\n', self.mod.read())
示例#24
0
 def test_doing_multiple_changes(self):
     changers = []
     self.mod.write('def a_func(p1):\n    pass\na_func(1)\n')
     changers.append(change_signature.ArgumentRemover(0))
     changers.append(change_signature.ArgumentAdder(0, 'p2', None, None))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     signature.get_changes(changers).do()
     self.assertEquals('def a_func(p2):\n    pass\na_func()\n',
                       self.mod.read())
示例#25
0
 def test_resources_parameter(self):
     mod1 = testutils.create_module(self.project, 'mod1')
     mod1.write('def a_func(param):\n    pass\n')
     self.mod.write('import mod1\nmod1.a_func(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, mod1, mod1.read().index('a_func') + 1)
     signature.get_changes([change_signature.ArgumentRemover(0)],
                           resources=[mod1]).do()
     self.assertEquals('import mod1\nmod1.a_func(1)\n', self.mod.read())
     self.assertEquals('def a_func():\n    pass\n', mod1.read())
示例#26
0
 def test_normalizing_parameters_for_trivial_case2(self):
     code = dedent("""\
         def a_func(param):
             pass
         a_func(2)""")
     self.mod.write(code)
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index("a_func") + 1
     )
     self.project.do(signature.get_changes([change_signature.ArgumentNormalizer()]))
     self.assertEqual(code, self.mod.read())
示例#27
0
 def test_doing_multiple_changes2(self):
     changers = []
     self.mod.write('def a_func(p1, p2):\n    pass\na_func(p2=2)\n')
     changers.append(change_signature.ArgumentAdder(2, 'p3', None, '3'))
     changers.append(change_signature.ArgumentReorderer([1, 0, 2]))
     changers.append(change_signature.ArgumentRemover(1))
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     signature.get_changes(changers).do()
     self.assertEquals('def a_func(p2, p3):\n    pass\na_func(2, 3)\n',
                       self.mod.read())
示例#28
0
 def test_changing_signature_for_constructors2(self):
     self.mod.write(
         'class C(object):\n    def __init__(self, p):\n        pass\n'
         'c = C(1)\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('__init__') + 1)
     signature.get_changes([change_signature.ArgumentRemover(1)]).do()
     self.assertEquals(
         'class C(object):\n    def __init__(self):\n        pass\n'
         'c = C()\n',
         self.mod.read())
示例#29
0
 def test_differentiating_class_accesses_from_instance_accesses(self):
     self.mod.write(
         'class A(object):\n    def a_func(self, param):\n        pass\n'
         'a_var = A()\nA.a_func(a_var, param=1)')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_func') + 1)
     self.project.do(signature.get_changes(
         [change_signature.ArgumentRemover(1)]))
     self.assertEquals(
         'class A(object):\n    def a_func(self):\n        pass\n'
         'a_var = A()\nA.a_func(a_var)', self.mod.read())
示例#30
0
 def test_changing_signature_in_subclasses(self):
     self.mod.write(
         'class A(object):\n    def a_method(self):\n        pass\n'
         'class B(A):\n    def a_method(self):\n        pass\n')
     signature = change_signature.ChangeSignature(
         self.project, self.mod, self.mod.read().index('a_method') + 1)
     signature.get_changes([change_signature.ArgumentAdder(1, 'p1')],
                           in_hierarchy=True).do()
     self.assertEquals(
         'class A(object):\n    def a_method(self, p1):\n        pass\n'
         'class B(A):\n    def a_method(self, p1):\n        pass\n',
         self.mod.read())