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 rope.contrib import generate |
| 8 from ropetest import testutils |
| 9 |
| 10 |
| 11 class GenerateTest(unittest.TestCase): |
| 12 |
| 13 def setUp(self): |
| 14 super(GenerateTest, self).setUp() |
| 15 self.project = testutils.sample_project() |
| 16 self.pycore = self.project.pycore |
| 17 self.mod = testutils.create_module(self.project, 'mod1') |
| 18 self.mod2 = testutils.create_module(self.project, 'mod2') |
| 19 self.pkg = testutils.create_package(self.project, 'pkg') |
| 20 |
| 21 def tearDown(self): |
| 22 testutils.remove_project(self.project) |
| 23 super(GenerateTest, self).tearDown() |
| 24 |
| 25 def _get_generate(self, offset): |
| 26 return generate.GenerateVariable(self.project, self.mod, offset) |
| 27 |
| 28 def _get_generate_class(self, offset): |
| 29 return generate.GenerateClass(self.project, self.mod, offset) |
| 30 |
| 31 def _get_generate_module(self, offset): |
| 32 return generate.GenerateModule(self.project, self.mod, offset) |
| 33 |
| 34 def _get_generate_package(self, offset): |
| 35 return generate.GeneratePackage(self.project, self.mod, offset) |
| 36 |
| 37 def _get_generate_function(self, offset): |
| 38 return generate.GenerateFunction(self.project, self.mod, offset) |
| 39 |
| 40 def test_getting_location(self): |
| 41 code = 'a_var = name\n' |
| 42 self.mod.write(code) |
| 43 generator = self._get_generate(code.index('name')) |
| 44 self.assertEquals((self.mod, 1), generator.get_location()) |
| 45 |
| 46 def test_generating_variable(self): |
| 47 code = 'a_var = name\n' |
| 48 self.mod.write(code) |
| 49 changes = self._get_generate(code.index('name')).get_changes() |
| 50 self.project.do(changes) |
| 51 self.assertEquals('name = None\n\n\na_var = name\n', self.mod.read()) |
| 52 |
| 53 def test_generating_variable_inserting_before_statement(self): |
| 54 code = 'c = 1\nc = b\n' |
| 55 self.mod.write(code) |
| 56 changes = self._get_generate(code.index('b')).get_changes() |
| 57 self.project.do(changes) |
| 58 self.assertEquals('c = 1\nb = None\n\n\nc = b\n', self.mod.read()) |
| 59 |
| 60 def test_generating_variable_in_local_scopes(self): |
| 61 code = 'def f():\n c = 1\n c = b\n' |
| 62 self.mod.write(code) |
| 63 changes = self._get_generate(code.index('b')).get_changes() |
| 64 self.project.do(changes) |
| 65 self.assertEquals('def f():\n c = 1\n b = None\n c = b\n', |
| 66 self.mod.read()) |
| 67 |
| 68 def test_generating_variable_in_other_modules(self): |
| 69 code = 'import mod2\nc = mod2.b\n' |
| 70 self.mod.write(code) |
| 71 generator = self._get_generate(code.index('b')) |
| 72 self.project.do(generator.get_changes()) |
| 73 self.assertEquals((self.mod2, 1), generator.get_location()) |
| 74 self.assertEquals('b = None\n', self.mod2.read()) |
| 75 |
| 76 def test_generating_variable_in_classes(self): |
| 77 code = 'class C(object):\n def f(self):\n pass\n' \ |
| 78 'c = C()\na_var = c.attr' |
| 79 self.mod.write(code) |
| 80 changes = self._get_generate(code.index('attr')).get_changes() |
| 81 self.project.do(changes) |
| 82 self.assertEquals( |
| 83 'class C(object):\n def f(self):\n ' |
| 84 'pass\n\n attr = None\n' |
| 85 'c = C()\na_var = c.attr', self.mod.read()) |
| 86 |
| 87 def test_generating_variable_in_classes_removing_pass(self): |
| 88 code = 'class C(object):\n pass\nc = C()\na_var = c.attr' |
| 89 self.mod.write(code) |
| 90 changes = self._get_generate(code.index('attr')).get_changes() |
| 91 self.project.do(changes) |
| 92 self.assertEquals('class C(object):\n\n attr = None\n' |
| 93 'c = C()\na_var = c.attr', self.mod.read()) |
| 94 |
| 95 def test_generating_variable_in_packages(self): |
| 96 code = 'import pkg\na = pkg.a\n' |
| 97 self.mod.write(code) |
| 98 generator = self._get_generate(code.rindex('a')) |
| 99 self.project.do(generator.get_changes()) |
| 100 init = self.pkg.get_child('__init__.py') |
| 101 self.assertEquals((init, 1), generator.get_location()) |
| 102 self.assertEquals('a = None\n', init.read()) |
| 103 |
| 104 def test_generating_classes(self): |
| 105 code = 'c = C()\n' |
| 106 self.mod.write(code) |
| 107 changes = self._get_generate_class(code.index('C')).get_changes() |
| 108 self.project.do(changes) |
| 109 self.assertEquals('class C(object):\n pass\n\n\nc = C()\n', |
| 110 self.mod.read()) |
| 111 |
| 112 def test_generating_modules(self): |
| 113 code = 'import pkg\npkg.mod\n' |
| 114 self.mod.write(code) |
| 115 generator = self._get_generate_module(code.rindex('mod')) |
| 116 self.project.do(generator.get_changes()) |
| 117 mod = self.pkg.get_child('mod.py') |
| 118 self.assertEquals((mod, 1), generator.get_location()) |
| 119 self.assertEquals('import pkg.mod\npkg.mod\n', self.mod.read()) |
| 120 |
| 121 def test_generating_packages(self): |
| 122 code = 'import pkg\npkg.pkg2\n' |
| 123 self.mod.write(code) |
| 124 generator = self._get_generate_package(code.rindex('pkg2')) |
| 125 self.project.do(generator.get_changes()) |
| 126 pkg2 = self.pkg.get_child('pkg2') |
| 127 init = pkg2.get_child('__init__.py') |
| 128 self.assertEquals((init, 1), generator.get_location()) |
| 129 self.assertEquals('import pkg.pkg2\npkg.pkg2\n', self.mod.read()) |
| 130 |
| 131 def test_generating_function(self): |
| 132 code = 'a_func()\n' |
| 133 self.mod.write(code) |
| 134 changes = self._get_generate_function( |
| 135 code.index('a_func')).get_changes() |
| 136 self.project.do(changes) |
| 137 self.assertEquals('def a_func():\n pass\n\n\na_func()\n', |
| 138 self.mod.read()) |
| 139 |
| 140 def test_generating_modules_with_empty_primary(self): |
| 141 code = 'mod\n' |
| 142 self.mod.write(code) |
| 143 generator = self._get_generate_module(code.rindex('mod')) |
| 144 self.project.do(generator.get_changes()) |
| 145 mod = self.project.root.get_child('mod.py') |
| 146 self.assertEquals((mod, 1), generator.get_location()) |
| 147 self.assertEquals('import mod\nmod\n', self.mod.read()) |
| 148 |
| 149 def test_generating_variable_already_exists(self): |
| 150 code = 'b = 1\nc = b\n' |
| 151 self.mod.write(code) |
| 152 with self.assertRaises(exceptions.RefactoringError): |
| 153 self._get_generate(code.index('b')).get_changes() |
| 154 |
| 155 def test_generating_variable_primary_cannot_be_determined(self): |
| 156 code = 'c = can_not_be_found.b\n' |
| 157 self.mod.write(code) |
| 158 with self.assertRaises(exceptions.RefactoringError): |
| 159 self._get_generate(code.rindex('b')).get_changes() |
| 160 |
| 161 def test_generating_modules_when_already_exists(self): |
| 162 code = 'mod2\n' |
| 163 self.mod.write(code) |
| 164 generator = self._get_generate_module(code.rindex('mod')) |
| 165 with self.assertRaises(exceptions.RefactoringError): |
| 166 self.project.do(generator.get_changes()) |
| 167 |
| 168 def test_generating_static_methods(self): |
| 169 code = 'class C(object):\n pass\nC.a_func()\n' |
| 170 self.mod.write(code) |
| 171 changes = self._get_generate_function( |
| 172 code.index('a_func')).get_changes() |
| 173 self.project.do(changes) |
| 174 self.assertEquals( |
| 175 'class C(object):\n\n @staticmethod' |
| 176 '\n def a_func():\n pass\nC.a_func()\n', |
| 177 self.mod.read()) |
| 178 |
| 179 def test_generating_methods(self): |
| 180 code = 'class C(object):\n pass\nc = C()\nc.a_func()\n' |
| 181 self.mod.write(code) |
| 182 changes = self._get_generate_function( |
| 183 code.index('a_func')).get_changes() |
| 184 self.project.do(changes) |
| 185 self.assertEquals( |
| 186 'class C(object):\n\n def a_func(self):\n pass\n' |
| 187 'c = C()\nc.a_func()\n', |
| 188 self.mod.read()) |
| 189 |
| 190 def test_generating_constructors(self): |
| 191 code = 'class C(object):\n pass\nc = C()\n' |
| 192 self.mod.write(code) |
| 193 changes = self._get_generate_function(code.rindex('C')).get_changes() |
| 194 self.project.do(changes) |
| 195 self.assertEquals( |
| 196 'class C(object):\n\n def __init__(self):\n pass\n' |
| 197 'c = C()\n', |
| 198 self.mod.read()) |
| 199 |
| 200 def test_generating_calls(self): |
| 201 code = 'class C(object):\n pass\nc = C()\nc()\n' |
| 202 self.mod.write(code) |
| 203 changes = self._get_generate_function(code.rindex('c')).get_changes() |
| 204 self.project.do(changes) |
| 205 self.assertEquals( |
| 206 'class C(object):\n\n def __call__(self):\n pass\n' |
| 207 'c = C()\nc()\n', |
| 208 self.mod.read()) |
| 209 |
| 210 def test_generating_calls_in_other_modules(self): |
| 211 self.mod2.write('class C(object):\n pass\n') |
| 212 code = 'import mod2\nc = mod2.C()\nc()\n' |
| 213 self.mod.write(code) |
| 214 changes = self._get_generate_function(code.rindex('c')).get_changes() |
| 215 self.project.do(changes) |
| 216 self.assertEquals( |
| 217 'class C(object):\n\n def __call__(self):\n pass\n', |
| 218 self.mod2.read()) |
| 219 |
| 220 def test_generating_function_handling_arguments(self): |
| 221 code = 'a_func(1)\n' |
| 222 self.mod.write(code) |
| 223 changes = self._get_generate_function( |
| 224 code.index('a_func')).get_changes() |
| 225 self.project.do(changes) |
| 226 self.assertEquals('def a_func(arg0):\n pass\n\n\na_func(1)\n', |
| 227 self.mod.read()) |
| 228 |
| 229 def test_generating_function_handling_keyword_xarguments(self): |
| 230 code = 'a_func(p=1)\n' |
| 231 self.mod.write(code) |
| 232 changes = self._get_generate_function( |
| 233 code.index('a_func')).get_changes() |
| 234 self.project.do(changes) |
| 235 self.assertEquals('def a_func(p):\n pass\n\n\na_func(p=1)\n', |
| 236 self.mod.read()) |
| 237 |
| 238 def test_generating_function_handling_arguments_better_naming(self): |
| 239 code = 'a_var = 1\na_func(a_var)\n' |
| 240 self.mod.write(code) |
| 241 changes = self._get_generate_function( |
| 242 code.index('a_func')).get_changes() |
| 243 self.project.do(changes) |
| 244 self.assertEquals('a_var = 1\ndef a_func(a_var):' |
| 245 '\n pass\n\n\na_func(a_var)\n', |
| 246 self.mod.read()) |
| 247 |
| 248 def test_generating_variable_in_other_modules2(self): |
| 249 self.mod2.write('\n\n\nprint(1)\n') |
| 250 code = 'import mod2\nc = mod2.b\n' |
| 251 self.mod.write(code) |
| 252 generator = self._get_generate(code.index('b')) |
| 253 self.project.do(generator.get_changes()) |
| 254 self.assertEquals((self.mod2, 5), generator.get_location()) |
| 255 self.assertEquals('\n\n\nprint(1)\n\n\nb = None\n', self.mod2.read()) |
| 256 |
| 257 def test_generating_function_in_a_suite(self): |
| 258 code = 'if True:\n a_func()\n' |
| 259 self.mod.write(code) |
| 260 changes = self._get_generate_function( |
| 261 code.index('a_func')).get_changes() |
| 262 self.project.do(changes) |
| 263 self.assertEquals('def a_func():\n pass' |
| 264 '\n\n\nif True:\n a_func()\n', |
| 265 self.mod.read()) |
| 266 |
| 267 def test_generating_function_in_a_suite_in_a_function(self): |
| 268 code = 'def f():\n a = 1\n if 1:\n g()\n' |
| 269 self.mod.write(code) |
| 270 changes = self._get_generate_function(code.index('g()')).get_changes() |
| 271 self.project.do(changes) |
| 272 self.assertEquals( |
| 273 'def f():\n a = 1\n def g():\n pass\n' |
| 274 ' if 1:\n g()\n', |
| 275 self.mod.read()) |
| 276 |
| 277 |
| 278 if __name__ == '__main__': |
| 279 unittest.main() |
OLD | NEW |