OLD | NEW |
(Empty) | |
| 1 try: |
| 2 import unittest2 as unittest |
| 3 except ImportError: |
| 4 import unittest |
| 5 |
| 6 from rope.base import exceptions |
| 7 from ropetest import testutils |
| 8 from rope.refactor.usefunction import UseFunction |
| 9 |
| 10 |
| 11 class UseFunctionTest(unittest.TestCase): |
| 12 |
| 13 def setUp(self): |
| 14 super(UseFunctionTest, self).setUp() |
| 15 self.project = testutils.sample_project() |
| 16 self.mod1 = testutils.create_module(self.project, 'mod1') |
| 17 self.mod2 = testutils.create_module(self.project, 'mod2') |
| 18 |
| 19 def tearDown(self): |
| 20 testutils.remove_project(self.project) |
| 21 super(UseFunctionTest, self).tearDown() |
| 22 |
| 23 def test_simple_case(self): |
| 24 code = 'def f():\n pass\n' |
| 25 self.mod1.write(code) |
| 26 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 27 self.project.do(user.get_changes()) |
| 28 self.assertEquals(code, self.mod1.read()) |
| 29 |
| 30 def test_simple_function(self): |
| 31 code = 'def f(p):\n print(p)\nprint(1)\n' |
| 32 self.mod1.write(code) |
| 33 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 34 self.project.do(user.get_changes()) |
| 35 self.assertEquals('def f(p):\n print(p)\nf(1)\n', |
| 36 self.mod1.read()) |
| 37 |
| 38 def test_simple_function2(self): |
| 39 code = 'def f(p):\n print(p + 1)\nprint(1 + 1)\n' |
| 40 self.mod1.write(code) |
| 41 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 42 self.project.do(user.get_changes()) |
| 43 self.assertEquals('def f(p):\n print(p + 1)\nf(1)\n', |
| 44 self.mod1.read()) |
| 45 |
| 46 def test_functions_with_multiple_statements(self): |
| 47 code = 'def f(p):\n r = p + 1\n print(r)\nr = 2 + 1\nprint(r)\n' |
| 48 self.mod1.write(code) |
| 49 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 50 self.project.do(user.get_changes()) |
| 51 self.assertEquals('def f(p):\n r = p + 1\n print(r)\nf(2)\n', |
| 52 self.mod1.read()) |
| 53 |
| 54 def test_returning(self): |
| 55 code = 'def f(p):\n return p + 1\nr = 2 + 1\nprint(r)\n' |
| 56 self.mod1.write(code) |
| 57 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 58 self.project.do(user.get_changes()) |
| 59 self.assertEquals( |
| 60 'def f(p):\n return p + 1\nr = f(2)\nprint(r)\n', |
| 61 self.mod1.read()) |
| 62 |
| 63 def test_returning_a_single_expression(self): |
| 64 code = 'def f(p):\n return p + 1\nprint(2 + 1)\n' |
| 65 self.mod1.write(code) |
| 66 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 67 self.project.do(user.get_changes()) |
| 68 self.assertEquals( |
| 69 'def f(p):\n return p + 1\nprint(f(2))\n', |
| 70 self.mod1.read()) |
| 71 |
| 72 def test_occurrences_in_other_modules(self): |
| 73 code = 'def f(p):\n return p + 1\n' |
| 74 self.mod1.write(code) |
| 75 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 76 self.mod2.write('print(2 + 1)\n') |
| 77 self.project.do(user.get_changes()) |
| 78 self.assertEquals('import mod1\nprint(mod1.f(2))\n', |
| 79 self.mod2.read()) |
| 80 |
| 81 def test_when_performing_on_non_functions(self): |
| 82 code = 'var = 1\n' |
| 83 self.mod1.write(code) |
| 84 with self.assertRaises(exceptions.RefactoringError): |
| 85 UseFunction(self.project, self.mod1, code.rindex('var')) |
| 86 |
| 87 def test_differing_in_the_inner_temp_names(self): |
| 88 code = 'def f(p):\n a = p + 1\n print(a)\nb = 2 + 1\nprint(b)\n' |
| 89 self.mod1.write(code) |
| 90 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 91 self.project.do(user.get_changes()) |
| 92 self.assertEquals('def f(p):\n a = p + 1\n print(a)\nf(2)\n', |
| 93 self.mod1.read()) |
| 94 |
| 95 # TODO: probably new options should be added to restructure |
| 96 def xxx_test_being_a_bit_more_intelligent_when_returning_assigneds(self): |
| 97 code = 'def f(p):\n a = p + 1\n return a\n'\ |
| 98 'var = 2 + 1\nprint(var)\n' |
| 99 self.mod1.write(code) |
| 100 user = UseFunction(self.project, self.mod1, code.rindex('f')) |
| 101 self.project.do(user.get_changes()) |
| 102 self.assertEquals('def f(p):\n a = p + 1\n return a\n' |
| 103 'var = f(p)\nprint(var)\n', self.mod1.read()) |
| 104 |
| 105 def test_exception_when_performing_a_function_with_yield(self): |
| 106 code = 'def func():\n yield 1\n' |
| 107 self.mod1.write(code) |
| 108 with self.assertRaises(exceptions.RefactoringError): |
| 109 UseFunction(self.project, self.mod1, code.index('func')) |
| 110 |
| 111 def test_exception_when_performing_a_function_two_returns(self): |
| 112 code = 'def func():\n return 1\n return 2\n' |
| 113 self.mod1.write(code) |
| 114 with self.assertRaises(exceptions.RefactoringError): |
| 115 UseFunction(self.project, self.mod1, code.index('func')) |
| 116 |
| 117 def test_exception_when_returns_is_not_the_last_statement(self): |
| 118 code = 'def func():\n return 2\n a = 1\n' |
| 119 self.mod1.write(code) |
| 120 with self.assertRaises(exceptions.RefactoringError): |
| 121 UseFunction(self.project, self.mod1, code.index('func')) |
| 122 |
| 123 |
| 124 if __name__ == '__main__': |
| 125 unittest.main() |
OLD | NEW |