def get_changes(self, refactor, input_string, in_hierarchy=False): """ Function description. :return Rope.changes: """ args = re.sub(r'[\s\(\)]+', '', input_string).split(',') olds = [arg[0] for arg in refactor.get_args()] changers = [] for arg in [a for a in olds if a not in args]: changers.append(change_signature.ArgumentRemover(olds.index(arg))) olds.remove(arg) order = [] for index, arg in enumerate(args): if arg not in olds: changers.append(change_signature.ArgumentAdder(index, arg)) olds.insert(index, arg) order.append(olds.index(arg)) changers.append( change_signature.ArgumentReorderer(order, autodef='None')) return refactor.get_changes(changers, in_hierarchy=in_hierarchy)
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_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())
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())
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())
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())
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())
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())
def test_adding_arguments_for_normal_args_changing_definition(self): self.mod.write( dedent("""\ def a_func(): pass """) ) 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.assertEqual( dedent("""\ def a_func(p1): pass """), self.mod.read(), )
def test_adding_arguments_for_norm_args_chang_calls_with_no_value(self): self.mod.write( dedent("""\ def a_func(p2=0): pass a_func(1) """) ) 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.assertEqual( dedent("""\ def a_func(p1=0, p2=0): pass a_func(p2=1) """), self.mod.read(), )
def test_adding_arguments_for_normal_args_changing_calls(self): self.mod.write( dedent("""\ def a_func(): pass a_func() """) ) 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.assertEqual( dedent("""\ def a_func(p1=None): pass a_func(1) """), self.mod.read(), )
def test_doing_multiple_changes(self): changers = [] self.mod.write( dedent("""\ def a_func(p1): pass a_func(1) """) ) 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.assertEqual( dedent("""\ def a_func(p2): pass a_func() """), self.mod.read(), )
def test_doing_multiple_changes2(self): changers = [] self.mod.write( dedent("""\ def a_func(p1, p2): pass a_func(p2=2) """) ) 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.assertEqual( dedent("""\ def a_func(p2, p3): pass a_func(2, 3) """), self.mod.read(), )