Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/contrib/generatetest.py

Issue 1132103009: Example of refactoring using rope library. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(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()
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698