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

Side by Side Diff: tools/telemetry/third_party/rope/ropetest/pycoretest.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 import sys
2 try:
3 import unittest2 as unittest
4 except ImportError:
5 import unittest
6
7 from rope.base import exceptions
8 from rope.base import libutils
9 from rope.base.pycore import _TextChangeDetector
10 from rope.base.pyobjects import get_base_type, AbstractFunction
11 from ropetest import testutils
12
13
14 class PyCoreTest(unittest.TestCase):
15
16 def setUp(self):
17 super(PyCoreTest, self).setUp()
18 self.project = testutils.sample_project()
19 self.pycore = self.project.pycore
20
21 def tearDown(self):
22 testutils.remove_project(self.project)
23 super(PyCoreTest, self).tearDown()
24
25 def test_simple_module(self):
26 testutils.create_module(self.project, 'mod')
27 result = self.project.get_module('mod')
28 self.assertEquals(get_base_type('Module'), result.type)
29 self.assertEquals(0, len(result.get_attributes()))
30
31 def test_nested_modules(self):
32 pkg = testutils.create_package(self.project, 'pkg')
33 mod = testutils.create_module(self.project, 'mod', pkg) # noqa
34 package = self.project.get_module('pkg')
35 self.assertEquals(get_base_type('Module'), package.get_type())
36 self.assertEquals(1, len(package.get_attributes()))
37 module = package['mod'].get_object()
38 self.assertEquals(get_base_type('Module'), module.get_type())
39
40 def test_package(self):
41 pkg = testutils.create_package(self.project, 'pkg')
42 mod = testutils.create_module(self.project, 'mod', pkg) # noqa
43 result = self.project.get_module('pkg')
44 self.assertEquals(get_base_type('Module'), result.type)
45
46 def test_simple_class(self):
47 mod = testutils.create_module(self.project, 'mod')
48 mod.write('class SampleClass(object):\n pass\n')
49 mod_element = self.project.get_module('mod')
50 result = mod_element['SampleClass'].get_object()
51 self.assertEquals(get_base_type('Type'), result.get_type())
52
53 def test_simple_function(self):
54 mod = testutils.create_module(self.project, 'mod')
55 mod.write('def sample_function():\n pass\n')
56 mod_element = self.project.get_module('mod')
57 result = mod_element['sample_function'].get_object()
58 self.assertEquals(get_base_type('Function'), result.get_type())
59
60 def test_class_methods(self):
61 mod = testutils.create_module(self.project, 'mod')
62 code = 'class SampleClass(object):\n' \
63 ' def sample_method(self):\n' \
64 ' pass\n'
65 mod.write(code)
66 mod_element = self.project.get_module('mod')
67 sample_class = mod_element['SampleClass'].get_object()
68 self.assertTrue('sample_method' in sample_class)
69 method = sample_class['sample_method'].get_object()
70 self.assertEquals(get_base_type('Function'), method.get_type())
71
72 def test_global_variables(self):
73 mod = testutils.create_module(self.project, 'mod')
74 mod.write('var = 10')
75 mod_element = self.project.get_module('mod')
76 result = mod_element['var'] # noqa
77
78 def test_class_variables(self):
79 mod = testutils.create_module(self.project, 'mod')
80 mod.write('class SampleClass(object):\n var = 10\n')
81 mod_element = self.project.get_module('mod')
82 sample_class = mod_element['SampleClass'].get_object()
83 var = sample_class['var'] # noqa
84
85 def test_class_attributes_set_in_init(self):
86 mod = testutils.create_module(self.project, 'mod')
87 mod.write('class C(object):\n'
88 ' def __init__(self):\n self.var = 20\n')
89 mod_element = self.project.get_module('mod')
90 sample_class = mod_element['C'].get_object()
91 var = sample_class['var'] # noqa
92
93 def test_class_attributes_set_in_init_overwriting_a_defined(self):
94 mod = testutils.create_module(self.project, 'mod')
95 code = 'class C(object):\n' \
96 ' def __init__(self):\n' \
97 ' self.f = 20\n' \
98 ' def f():\n' \
99 ' pass\n'
100 mod.write(code)
101 mod_element = self.project.get_module('mod')
102 sample_class = mod_element['C'].get_object()
103 f = sample_class['f'].get_object()
104 self.assertTrue(isinstance(f, AbstractFunction))
105
106 def test_classes_inside_other_classes(self):
107 mod = testutils.create_module(self.project, 'mod')
108 code = 'class SampleClass(object):\n' \
109 ' class InnerClass(object):\n' \
110 ' pass\n\n'
111 mod.write(code)
112 mod_element = self.project.get_module('mod')
113 sample_class = mod_element['SampleClass'].get_object()
114 var = sample_class['InnerClass'].get_object()
115 self.assertEquals(get_base_type('Type'), var.get_type())
116
117 def test_non_existent_module(self):
118 with self.assertRaises(exceptions.ModuleNotFoundError):
119 self.project.get_module('doesnotexistmodule')
120
121 def test_imported_names(self):
122 testutils.create_module(self.project, 'mod1')
123 mod = testutils.create_module(self.project, 'mod2')
124 mod.write('import mod1\n')
125 module = self.project.get_module('mod2')
126 imported_sys = module['mod1'].get_object()
127 self.assertEquals(get_base_type('Module'), imported_sys.get_type())
128
129 def test_imported_as_names(self):
130 testutils.create_module(self.project, 'mod1')
131 mod = testutils.create_module(self.project, 'mod2')
132 mod.write('import mod1 as my_import\n')
133 module = self.project.get_module('mod2')
134 imported_mod = module['my_import'].get_object()
135 self.assertEquals(get_base_type('Module'), imported_mod.get_type())
136
137 def test_get_string_module(self):
138 mod = libutils.get_string_module(
139 self.project, 'class Sample(object):\n pass\n')
140 sample_class = mod['Sample'].get_object()
141 self.assertEquals(get_base_type('Type'), sample_class.get_type())
142
143 def test_get_string_module_with_extra_spaces(self):
144 mod = libutils.get_string_module(
145 self.project, 'a = 10\n ') # noqa
146
147 def test_parameter_info_for_functions(self):
148 code = 'def func(param1, param2=10, *param3, **param4):\n pass'
149 mod = libutils.get_string_module(self.project, code)
150 sample_function = mod['func']
151 self.assertEquals(['param1', 'param2', 'param3', 'param4'],
152 sample_function.get_object().get_param_names())
153
154 # FIXME: Not found modules
155 def xxx_test_not_found_module_is_module(self):
156 mod = libutils.get_string_module(
157 self.project, 'import doesnotexist\n')
158 self.assertEquals(get_base_type('Module'),
159 mod['doesnotexist'].
160 get_object().get_type())
161
162 def test_mixing_scopes_and_objects_hierarchy(self):
163 mod = libutils.get_string_module(self.project, 'var = 200\n')
164 scope = mod.get_scope()
165 self.assertTrue('var' in scope.get_names())
166
167 def test_inheriting_base_class_attributes(self):
168 code = 'class Base(object):\n' \
169 ' def method(self):\n' \
170 ' pass\n' \
171 'class Derived(Base):\n' \
172 ' pass\n'
173 mod = libutils.get_string_module(self.project, code)
174 derived = mod['Derived'].get_object()
175 self.assertTrue('method' in derived)
176 self.assertEquals(get_base_type('Function'),
177 derived['method'].get_object().get_type())
178
179 def test_inheriting_multiple_base_class_attributes(self):
180 code = 'class Base1(object):\n def method1(self):\n pass\n' \
181 'class Base2(object):\n def method2(self):\n pass\n' \
182 'class Derived(Base1, Base2):\n pass\n'
183 mod = libutils.get_string_module(self.project, code)
184 derived = mod['Derived'].get_object()
185 self.assertTrue('method1' in derived)
186 self.assertTrue('method2' in derived)
187
188 def test_inherit_multiple_base_class_attrs_with_the_same_name(self):
189 code = 'class Base1(object):\n def method(self):\n pass\n' \
190 'class Base2(object):\n def method(self):\n pass\n' \
191 'class Derived(Base1, Base2):\n pass\n'
192 mod = libutils.get_string_module(self.project, code)
193 base1 = mod['Base1'].get_object()
194 derived = mod['Derived'].get_object()
195 self.assertEquals(base1['method'].get_object(),
196 derived['method'].get_object())
197
198 def test_inheriting_unknown_base_class(self):
199 code = 'class Derived(NotFound):\n' \
200 ' def f(self):\n' \
201 ' pass\n'
202 mod = libutils.get_string_module(self.project, code)
203 derived = mod['Derived'].get_object()
204 self.assertTrue('f' in derived)
205
206 def test_module_creation(self):
207 new_module = testutils.create_module(self.project, 'module')
208 self.assertFalse(new_module.is_folder())
209 self.assertEquals(self.project.get_resource('module.py'), new_module)
210
211 def test_packaged_module_creation(self):
212 package = self.project.root.create_folder('package') # noqa
213 new_module = testutils.create_module(self.project, 'package.module')
214 self.assertEquals(self.project.get_resource('package/module.py'),
215 new_module)
216
217 def test_packaged_module_creation_with_nested_src(self):
218 src = self.project.root.create_folder('src')
219 src.create_folder('pkg')
220 new_module = testutils.create_module(self.project, 'pkg.mod', src)
221 self.assertEquals(self.project.get_resource('src/pkg/mod.py'),
222 new_module)
223
224 def test_package_creation(self):
225 new_package = testutils.create_package(self.project, 'pkg')
226 self.assertTrue(new_package.is_folder())
227 self.assertEquals(self.project.get_resource('pkg'), new_package)
228 self.assertEquals(self.project.get_resource('pkg/__init__.py'),
229 new_package.get_child('__init__.py'))
230
231 def test_nested_package_creation(self):
232 testutils.create_package(self.project, 'pkg1')
233 nested_package = testutils.create_package(self.project, 'pkg1.pkg2')
234 self.assertEquals(self.project.get_resource('pkg1/pkg2'),
235 nested_package)
236
237 def test_packaged_package_creation_with_nested_src(self):
238 src = self.project.root.create_folder('src')
239 testutils.create_package(self.project, 'pkg1', src)
240 nested_package = testutils.create_package(self.project, 'pkg1.pkg2',
241 src)
242 self.assertEquals(self.project.get_resource('src/pkg1/pkg2'),
243 nested_package)
244
245 def test_find_module(self):
246 src = self.project.root.create_folder('src')
247 samplemod = testutils.create_module(self.project, 'samplemod', src)
248 found_module = self.project.find_module('samplemod')
249 self.assertEquals(samplemod, found_module)
250
251 def test_find_nested_module(self):
252 src = self.project.root.create_folder('src')
253 samplepkg = testutils.create_package(self.project, 'samplepkg', src)
254 samplemod = testutils.create_module(self.project, 'samplemod',
255 samplepkg)
256 found_module = self.project.find_module('samplepkg.samplemod')
257 self.assertEquals(samplemod, found_module)
258
259 def test_find_multiple_module(self):
260 src = self.project.root.create_folder('src')
261 samplemod1 = testutils.create_module(self.project, 'samplemod', src)
262 samplemod2 = testutils.create_module(self.project, 'samplemod')
263 test = self.project.root.create_folder('test')
264 samplemod3 = testutils.create_module(self.project, 'samplemod', test)
265 found_module = self.project.find_module('samplemod')
266 self.assertTrue(samplemod1 == found_module or
267 samplemod2 == found_module or
268 samplemod3 == found_module)
269
270 def test_find_module_packages(self):
271 src = self.project.root
272 samplepkg = testutils.create_package(self.project, 'samplepkg', src)
273 found_module = self.project.find_module('samplepkg')
274 self.assertEquals(samplepkg, found_module)
275
276 def test_find_module_when_module_and_package_with_the_same_name(self):
277 src = self.project.root
278 testutils.create_module(self.project, 'sample', src)
279 samplepkg = testutils.create_package(self.project, 'sample', src)
280 found_module = self.project.find_module('sample')
281 self.assertEquals(samplepkg, found_module)
282
283 def test_source_folders_preference(self):
284 testutils.create_package(self.project, 'pkg1')
285 testutils.create_package(self.project, 'pkg1.src2')
286 lost = testutils.create_module(self.project, 'pkg1.src2.lost')
287 self.assertEqual(self.project.find_module('lost'), None)
288 self.project.close()
289 from rope.base.project import Project
290 self.project = Project(self.project.address,
291 source_folders=['pkg1/src2'])
292 self.assertEqual(self.project.find_module('lost'), lost)
293
294 def test_get_pyname_definition_location(self):
295 mod = libutils.get_string_module(self.project, 'a_var = 20\n')
296 a_var = mod['a_var']
297 self.assertEquals((mod, 1), a_var.get_definition_location())
298
299 def test_get_pyname_definition_location_functions(self):
300 mod = libutils.get_string_module(
301 self.project, 'def a_func():\n pass\n')
302 a_func = mod['a_func']
303 self.assertEquals((mod, 1), a_func.get_definition_location())
304
305 def test_get_pyname_definition_location_class(self):
306 code = 'class AClass(object):\n pass\n\n'
307 mod = libutils.get_string_module(self.project, code)
308 a_class = mod['AClass']
309 self.assertEquals((mod, 1), a_class.get_definition_location())
310
311 def test_get_pyname_definition_location_local_variables(self):
312 mod = libutils.get_string_module(
313 self.project, 'def a_func():\n a_var = 10\n')
314 a_func_scope = mod.get_scope().get_scopes()[0]
315 a_var = a_func_scope['a_var']
316 self.assertEquals((mod, 2), a_var.get_definition_location())
317
318 def test_get_pyname_definition_location_reassigning(self):
319 mod = libutils.get_string_module(
320 self.project, 'a_var = 20\na_var=30\n')
321 a_var = mod['a_var']
322 self.assertEquals((mod, 1), a_var.get_definition_location())
323
324 def test_get_pyname_definition_location_importes(self):
325 testutils.create_module(self.project, 'mod')
326 mod = libutils.get_string_module(self.project, 'import mod\n')
327 imported_module = self.project.get_module('mod')
328 module_pyname = mod['mod']
329 self.assertEquals((imported_module, 1),
330 module_pyname.get_definition_location())
331
332 def test_get_pyname_definition_location_imports(self):
333 module_resource = testutils.create_module(self.project, 'mod')
334 module_resource.write('\ndef a_func():\n pass\n')
335 imported_module = self.project.get_module('mod')
336 mod = libutils.get_string_module(
337 self.project, 'from mod import a_func\n')
338 a_func = mod['a_func']
339 self.assertEquals((imported_module, 2),
340 a_func.get_definition_location())
341
342 def test_get_pyname_definition_location_parameters(self):
343 code = 'def a_func(param1, param2):\n a_var = param\n'
344 mod = libutils.get_string_module(self.project, code)
345 a_func_scope = mod.get_scope().get_scopes()[0]
346 param1 = a_func_scope['param1']
347 self.assertEquals((mod, 1), param1.get_definition_location())
348 param2 = a_func_scope['param2']
349 self.assertEquals((mod, 1), param2.get_definition_location())
350
351 def test_module_get_resource(self):
352 module_resource = testutils.create_module(self.project, 'mod')
353 module = self.project.get_module('mod')
354 self.assertEquals(module_resource, module.get_resource())
355 string_module = libutils.get_string_module(
356 self.project, 'from mod import a_func\n')
357 self.assertEquals(None, string_module.get_resource())
358
359 def test_get_pyname_definition_location_class2(self):
360 code = 'class AClass(object):\n' \
361 ' def __init__(self):\n' \
362 ' self.an_attr = 10\n'
363 mod = libutils.get_string_module(self.project, code)
364 a_class = mod['AClass'].get_object()
365 an_attr = a_class['an_attr']
366 self.assertEquals((mod, 3), an_attr.get_definition_location())
367
368 def test_import_not_found_module_get_definition_location(self):
369 mod = libutils.get_string_module(
370 self.project, 'import doesnotexist\n')
371 does_not_exist = mod['doesnotexist']
372 self.assertEquals((None, None),
373 does_not_exist.get_definition_location())
374
375 def test_from_not_found_module_get_definition_location(self):
376 mod = libutils.get_string_module(
377 self.project, 'from doesnotexist import Sample\n')
378 sample = mod['Sample']
379 self.assertEquals((None, None), sample.get_definition_location())
380
381 def test_from_package_import_module_get_definition_location(self):
382 pkg = testutils.create_package(self.project, 'pkg')
383 testutils.create_module(self.project, 'mod', pkg)
384 pkg_mod = self.project.get_module('pkg.mod')
385 mod = libutils.get_string_module(
386 self.project, 'from pkg import mod\n')
387 imported_mod = mod['mod']
388 self.assertEquals((pkg_mod, 1),
389 imported_mod.get_definition_location())
390
391 def test_get_module_for_defined_pyobjects(self):
392 mod = libutils.get_string_module(
393 self.project, 'class AClass(object):\n pass\n')
394 a_class = mod['AClass'].get_object()
395 self.assertEquals(mod, a_class.get_module())
396
397 def test_get_definition_location_for_packages(self):
398 testutils.create_package(self.project, 'pkg')
399 init_module = self.project.get_module('pkg.__init__')
400 mod = libutils.get_string_module(self.project, 'import pkg\n')
401 pkg_pyname = mod['pkg']
402 self.assertEquals((init_module, 1),
403 pkg_pyname.get_definition_location())
404
405 def test_get_definition_location_for_filtered_packages(self):
406 pkg = testutils.create_package(self.project, 'pkg')
407 testutils.create_module(self.project, 'mod', pkg)
408 init_module = self.project.get_module('pkg.__init__')
409 mod = libutils.get_string_module(self.project, 'import pkg.mod')
410 pkg_pyname = mod['pkg']
411 self.assertEquals((init_module, 1),
412 pkg_pyname.get_definition_location())
413
414 def test_out_of_project_modules(self):
415 scope = libutils.get_string_scope(
416 self.project, 'import rope.base.project as project\n')
417 imported_module = scope['project'].get_object()
418 self.assertTrue('Project' in imported_module)
419
420 def test_file_encoding_reading(self):
421 contents = u'# -*- coding: utf-8 -*-\n' + \
422 u'#\N{LATIN SMALL LETTER I WITH DIAERESIS}\n'
423 mod = testutils.create_module(self.project, 'mod')
424 mod.write(contents)
425 self.project.get_module('mod')
426
427 def test_global_keyword(self):
428 contents = 'a_var = 1\ndef a_func():\n global a_var\n'
429 mod = libutils.get_string_module(self.project, contents)
430 global_var = mod['a_var']
431 func_scope = mod['a_func'].get_object().get_scope()
432 local_var = func_scope['a_var']
433 self.assertEquals(global_var, local_var)
434
435 def test_not_leaking_for_vars_inside_parent_scope(self):
436 mod = testutils.create_module(self.project, 'mod')
437 code = 'class C(object):\n' \
438 ' def f(self):\n' \
439 ' for my_var1, my_var2 in []:\n' \
440 ' pass\n'
441 mod.write(code)
442 pymod = self.pycore.resource_to_pyobject(mod)
443 c_class = pymod['C'].get_object()
444 self.assertFalse('my_var1' in c_class)
445 self.assertFalse('my_var2' in c_class)
446
447 def test_not_leaking_for_vars_inside_parent_scope2(self):
448 mod = testutils.create_module(self.project, 'mod')
449 code = 'class C(object):\n' \
450 ' def f(self):\n' \
451 ' for my_var in []:\n' \
452 ' pass\n'
453 mod.write(code)
454 pymod = self.pycore.resource_to_pyobject(mod)
455 c_class = pymod['C'].get_object()
456 self.assertFalse('my_var' in c_class)
457
458 def test_variables_defined_in_excepts(self):
459 mod = testutils.create_module(self.project, 'mod')
460 code = 'try:\n' \
461 ' myvar1 = 1\n' \
462 'except:\n' \
463 ' myvar2 = 1\n' \
464 'finally:\n' \
465 ' myvar3 = 1\n'
466 mod.write(code)
467 pymod = self.pycore.resource_to_pyobject(mod)
468 self.assertTrue('myvar1' in pymod)
469 self.assertTrue('myvar2' in pymod)
470 self.assertTrue('myvar3' in pymod)
471
472 def test_not_leaking_tuple_assigned_names_inside_parent_scope(self):
473 mod = testutils.create_module(self.project, 'mod')
474 code = 'class C(object):\n' \
475 ' def f(self):\n' \
476 ' var1, var2 = range(2)\n'
477 mod.write(code)
478 pymod = self.pycore.resource_to_pyobject(mod)
479 c_class = pymod['C'].get_object()
480 self.assertFalse('var1' in c_class)
481
482 @testutils.run_only_for_25
483 def test_with_statement_variables(self):
484 code = 'import threading\nwith threading.lock() as var: pass\n'
485 if sys.version_info < (2, 6, 0):
486 code = 'from __future__ import with_statement\n' + code
487 pymod = libutils.get_string_module(self.project, code)
488 self.assertTrue('var' in pymod)
489
490 @testutils.run_only_for_25
491 def test_with_statement_variables_and_tuple_assignment(self):
492 code = 'class A(object):\n' \
493 ' def __enter__(self):' \
494 ' return (1, 2)\n' \
495 ' def __exit__(self, type, value, tb):\n' \
496 ' pass\n'\
497 'with A() as (a, b):\n' \
498 ' pass\n'
499 if sys.version_info < (2, 6, 0):
500 code = 'from __future__ import with_statement\n' + code
501 pymod = libutils.get_string_module(self.project, code)
502 self.assertTrue('a' in pymod)
503 self.assertTrue('b' in pymod)
504
505 @testutils.run_only_for_25
506 def test_with_statement_variable_type(self):
507 code = 'class A(object):\n' \
508 ' def __enter__(self):\n' \
509 ' return self\n'\
510 ' def __exit__(self, type, value, tb):\n' \
511 ' pass\n' \
512 'with A() as var:\n' \
513 ' pass\n'
514 if sys.version_info < (2, 6, 0):
515 code = 'from __future__ import with_statement\n' + code
516 pymod = libutils.get_string_module(self.project, code)
517 a_class = pymod['A'].get_object()
518 var = pymod['var'].get_object()
519 self.assertEquals(a_class, var.get_type())
520
521 @testutils.run_only_for_25
522 def test_with_statement_with_no_vars(self):
523 code = 'with open("file"): pass\n'
524 if sys.version_info < (2, 6, 0):
525 code = 'from __future__ import with_statement\n' + code
526 pymod = libutils.get_string_module(self.project, code)
527 pymod.get_attributes()
528
529 def test_check_for_else_block(self):
530 code = 'for i in range(10):\n' \
531 ' pass\n' \
532 'else:\n' \
533 ' myvar = 1\n'
534 mod = libutils.get_string_module(self.project, code)
535 a_var = mod['myvar']
536 self.assertEquals((mod, 4), a_var.get_definition_location())
537
538 def test_check_names_defined_in_whiles(self):
539 mod = libutils.get_string_module(
540 self.project, 'while False:\n myvar = 1\n')
541 a_var = mod['myvar']
542 self.assertEquals((mod, 2), a_var.get_definition_location())
543
544 def test_get_definition_location_in_tuple_assnames(self):
545 mod = libutils.get_string_module(
546 self.project, 'def f(x):\n x.z, a = range(2)\n')
547 x = mod['f'].get_object().get_scope()['x']
548 a = mod['f'].get_object().get_scope()['a']
549 self.assertEquals((mod, 1), x.get_definition_location())
550 self.assertEquals((mod, 2), a.get_definition_location())
551
552 def test_syntax_errors_in_code(self):
553 with self.assertRaises(exceptions.ModuleSyntaxError):
554 libutils.get_string_module(self.project, 'xyx print\n')
555
556 def test_holding_error_location_information(self):
557 try:
558 libutils.get_string_module(self.project, 'xyx print\n')
559 except exceptions.ModuleSyntaxError as e:
560 self.assertEquals(1, e.lineno)
561
562 def test_no_exceptions_on_module_encoding_problems(self):
563 mod = testutils.create_module(self.project, 'mod')
564 contents = '\nsdsdsd\n\xa9\n'
565 file = open(mod.real_path, 'wb')
566 file.write(contents)
567 file.close()
568 mod.read()
569
570 def test_syntax_errors_when_cannot_decode_file2(self):
571 mod = testutils.create_module(self.project, 'mod')
572 contents = '\n\xa9\n'
573 file = open(mod.real_path, 'wb')
574 file.write(contents)
575 file.close()
576 with self.assertRaises(exceptions.ModuleSyntaxError):
577 self.pycore.resource_to_pyobject(mod)
578
579 def test_syntax_errors_when_null_bytes(self):
580 mod = testutils.create_module(self.project, 'mod')
581 contents = '\n\x00\n'
582 file = open(mod.real_path, 'wb')
583 file.write(contents)
584 file.close()
585 with self.assertRaises(exceptions.ModuleSyntaxError):
586 self.pycore.resource_to_pyobject(mod)
587
588 def test_syntax_errors_when_bad_strs(self):
589 mod = testutils.create_module(self.project, 'mod')
590 contents = '\n"\\x0"\n'
591 file = open(mod.real_path, 'wb')
592 file.write(contents)
593 file.close()
594 with self.assertRaises(exceptions.ModuleSyntaxError):
595 self.pycore.resource_to_pyobject(mod)
596
597 def test_not_reaching_maximum_recursions_with_from_star_imports(self):
598 mod1 = testutils.create_module(self.project, 'mod1')
599 mod2 = testutils.create_module(self.project, 'mod2')
600 mod1.write('from mod2 import *\n')
601 mod2.write('from mod1 import *\n')
602 pymod1 = self.pycore.resource_to_pyobject(mod1)
603 pymod1.get_attributes()
604
605 def test_not_reaching_maximum_recursions_when_importing_variables(self):
606 mod1 = testutils.create_module(self.project, 'mod1')
607 mod2 = testutils.create_module(self.project, 'mod2')
608 mod1.write('from mod2 import myvar\n')
609 mod2.write('from mod1 import myvar\n')
610 pymod1 = self.pycore.resource_to_pyobject(mod1)
611 pymod1['myvar'].get_object()
612
613 def test_not_reaching_maximum_recursions_when_importing_variables2(self):
614 mod1 = testutils.create_module(self.project, 'mod1')
615 mod1.write('from mod1 import myvar\n')
616 pymod1 = self.pycore.resource_to_pyobject(mod1)
617 pymod1['myvar'].get_object()
618
619 def test_pyobject_equality_should_compare_types(self):
620 mod1 = testutils.create_module(self.project, 'mod1')
621 mod1.write('var1 = ""\nvar2 = ""\n')
622 pymod1 = self.pycore.resource_to_pyobject(mod1)
623 self.assertEquals(pymod1['var1'].get_object(),
624 pymod1['var2'].get_object())
625
626
627 class PyCoreInProjectsTest(unittest.TestCase):
628
629 def setUp(self):
630 super(self.__class__, self).setUp()
631 self.project = testutils.sample_project()
632 self.pycore = self.project.pycore
633 samplemod = testutils.create_module(self.project, 'samplemod')
634 code = 'class SampleClass(object):\n' \
635 ' def sample_method():\n' \
636 ' pass\n\n' \
637 'def sample_func():\n' \
638 ' pass\n' \
639 'sample_var = 10\n\n' \
640 'def _underlined_func():\n' \
641 ' pass\n\n'
642 samplemod.write(code)
643 package = testutils.create_package(self.project, 'package')
644 testutils.create_module(self.project, 'nestedmod', package)
645
646 def tearDown(self):
647 testutils.remove_project(self.project)
648 super(self.__class__, self).tearDown()
649
650 def test_simple_import(self):
651 mod = libutils.get_string_module(
652 self.project, 'import samplemod\n')
653 samplemod = mod['samplemod'].get_object()
654 self.assertEquals(get_base_type('Module'), samplemod.get_type())
655
656 def test_from_import_class(self):
657 mod = libutils.get_string_module(
658 self.project, 'from samplemod import SampleClass\n')
659 result = mod['SampleClass'].get_object()
660 self.assertEquals(get_base_type('Type'), result.get_type())
661 self.assertTrue('sample_func' not in mod.get_attributes())
662
663 def test_from_import_star(self):
664 mod = libutils.get_string_module(
665 self.project, 'from samplemod import *\n')
666 self.assertEquals(get_base_type('Type'),
667 mod['SampleClass'].get_object().get_type())
668 self.assertEquals(get_base_type('Function'),
669 mod['sample_func'].get_object().get_type())
670 self.assertTrue(mod['sample_var'] is not None)
671
672 def test_from_import_star_overwriting(self):
673 code = 'from samplemod import *\n' \
674 'class SampleClass(object):\n pass\n'
675 mod = libutils.get_string_module(self.project, code)
676 samplemod = self.project.get_module('samplemod')
677 sample_class = samplemod['SampleClass'].get_object()
678 self.assertNotEquals(sample_class,
679 mod.get_attributes()['SampleClass'].get_object())
680
681 def test_from_import_star_not_imporing_underlined(self):
682 mod = libutils.get_string_module(
683 self.project, 'from samplemod import *')
684 self.assertTrue('_underlined_func' not in mod.get_attributes())
685
686 def test_from_import_star_imports_in_functions(self):
687 mod = libutils.get_string_module(
688 self.project, 'def f():\n from os import *\n')
689 mod['f'].get_object().get_scope().get_names()
690
691 def test_from_package_import_mod(self):
692 mod = libutils.get_string_module(
693 self.project, 'from package import nestedmod\n')
694 self.assertEquals(get_base_type('Module'),
695 mod['nestedmod'].get_object().get_type())
696
697 # XXX: Deciding to import everything on import start from packages
698 def xxx_test_from_package_import_star(self):
699 mod = libutils.get_string_module(
700 self.project, 'from package import *\n')
701 self.assertTrue('nestedmod' not in mod.get_attributes())
702
703 def test_unknown_when_module_cannot_be_found(self):
704 mod = libutils.get_string_module(
705 self.project, 'from doesnotexist import nestedmod\n')
706 self.assertTrue('nestedmod' in mod)
707
708 def test_from_import_function(self):
709 code = 'def f():\n from samplemod import SampleClass\n'
710 scope = libutils.get_string_scope(self.project, code)
711 self.assertEquals(get_base_type('Type'),
712 scope.get_scopes()[0]['SampleClass'].
713 get_object().get_type())
714
715 def test_circular_imports(self):
716 mod1 = testutils.create_module(self.project, 'mod1')
717 mod2 = testutils.create_module(self.project, 'mod2')
718 mod1.write('import mod2\n')
719 mod2.write('import mod1\n')
720 self.project.get_module('mod1')
721
722 def test_circular_imports2(self):
723 mod1 = testutils.create_module(self.project, 'mod1')
724 mod2 = testutils.create_module(self.project, 'mod2')
725 mod1.write(
726 'from mod2 import Sample2\nclass Sample1(object):\n pass\n')
727 mod2.write(
728 'from mod1 import Sample1\nclass Sample2(object):\n pass\n')
729 self.project.get_module('mod1').get_attributes()
730
731 def test_multi_dot_imports(self):
732 pkg = testutils.create_package(self.project, 'pkg')
733 pkg_mod = testutils.create_module(self.project, 'mod', pkg)
734 pkg_mod.write('def sample_func():\n pass\n')
735 mod = libutils.get_string_module(self.project, 'import pkg.mod\n')
736 self.assertTrue('pkg' in mod)
737 self.assertTrue('sample_func' in mod['pkg'].get_object()['mod'].
738 get_object())
739
740 def test_multi_dot_imports2(self):
741 pkg = testutils.create_package(self.project, 'pkg')
742 testutils.create_module(self.project, 'mod1', pkg)
743 testutils.create_module(self.project, 'mod2', pkg)
744 mod = libutils.get_string_module(
745 self.project, 'import pkg.mod1\nimport pkg.mod2\n')
746 package = mod['pkg'].get_object()
747 self.assertEquals(2, len(package.get_attributes()))
748 self.assertTrue('mod1' in package and
749 'mod2' in package)
750
751 def test_multi_dot_imports3(self):
752 pkg1 = testutils.create_package(self.project, 'pkg1')
753 pkg2 = testutils.create_package(self.project, 'pkg2', pkg1)
754 testutils.create_module(self.project, 'mod1', pkg2)
755 testutils.create_module(self.project, 'mod2', pkg2)
756 code = 'import pkg1.pkg2.mod1\nimport pkg1.pkg2.mod2\n'
757 mod = libutils.get_string_module(self.project, code)
758 package1 = mod['pkg1'].get_object()
759 package2 = package1['pkg2'].get_object()
760 self.assertEquals(2, len(package2.get_attributes()))
761 self.assertTrue('mod1' in package2 and 'mod2' in package2)
762
763 def test_multi_dot_imports_as(self):
764 pkg = testutils.create_package(self.project, 'pkg')
765 mod1 = testutils.create_module(self.project, 'mod1', pkg)
766 mod1.write('def f():\n pass\n')
767 mod = libutils.get_string_module(
768 self.project, 'import pkg.mod1 as mod1\n')
769 module = mod['mod1'].get_object()
770 self.assertTrue('f' in module)
771
772 # TODO: not showing unimported names as attributes of packages
773 def xxx_test_from_package_import_package(self):
774 pkg1 = testutils.create_package(self.project, 'pkg1')
775 pkg2 = testutils.create_package(self.project, 'pkg2', pkg1)
776 testutils.create_module(self.project, 'mod', pkg2)
777 mod = libutils.get_string_module(
778 self.project, 'from pkg1 import pkg2\n')
779 package = mod['pkg2']
780 self.assertEquals(0, len(package.get_attributes()))
781
782 def test_invalidating_cache_after_resource_change(self):
783 module = testutils.create_module(self.project, 'mod')
784 module.write('import sys\n')
785 mod1 = self.project.get_module('mod')
786 self.assertTrue('var' not in mod1.get_attributes())
787 module.write('var = 10\n')
788 mod2 = self.project.get_module('mod')
789 self.assertTrue('var' in mod2)
790
791 def test_invalidating_cache_after_resource_change_for_init_dot_pys(self):
792 pkg = testutils.create_package(self.project, 'pkg')
793 mod = testutils.create_module(self.project, 'mod')
794 init_dot_py = pkg.get_child('__init__.py')
795 init_dot_py.write('a_var = 10\n')
796 mod.write('import pkg\n')
797 pymod = self.project.get_module('mod')
798 self.assertTrue('a_var' in pymod['pkg'].get_object())
799 init_dot_py.write('new_var = 10\n')
800 self.assertTrue('a_var' not in
801 pymod['pkg'].get_object().get_attributes())
802
803 def test_invalidating_cache_after_rsrc_chng_for_nested_init_dot_pys(self):
804 pkg1 = testutils.create_package(self.project, 'pkg1')
805 pkg2 = testutils.create_package(self.project, 'pkg2', pkg1)
806 mod = testutils.create_module(self.project, 'mod')
807 init_dot_py = pkg2.get_child('__init__.py')
808 init_dot_py.write('a_var = 10\n')
809 mod.write('import pkg1\n')
810 pymod = self.project.get_module('mod')
811 self.assertTrue('a_var' in
812 pymod['pkg1'].get_object()['pkg2'].get_object())
813 init_dot_py.write('new_var = 10\n')
814 self.assertTrue('a_var' not in
815 pymod['pkg1'].get_object()['pkg2'].get_object())
816
817 def test_from_import_nonexistent_module(self):
818 code = 'from doesnotexistmod import DoesNotExistClass\n'
819 mod = libutils.get_string_module(self.project, code)
820 self.assertTrue('DoesNotExistClass' in mod)
821 self.assertEquals(get_base_type('Unknown'),
822 mod['DoesNotExistClass'].
823 get_object().get_type())
824
825 def test_from_import_nonexistent_name(self):
826 code = 'from samplemod import DoesNotExistClass\n'
827 mod = libutils.get_string_module(self.project, code)
828 self.assertTrue('DoesNotExistClass' in mod)
829 self.assertEquals(get_base_type('Unknown'),
830 mod['DoesNotExistClass'].
831 get_object().get_type())
832
833 def test_not_considering_imported_names_as_sub_scopes(self):
834 code = 'from samplemod import SampleClass\n'
835 scope = libutils.get_string_scope(self.project, code)
836 self.assertEquals(0, len(scope.get_scopes()))
837
838 def test_not_considering_imported_modules_as_sub_scopes(self):
839 scope = libutils.get_string_scope(
840 self.project, 'import samplemod\n')
841 self.assertEquals(0, len(scope.get_scopes()))
842
843 def test_inheriting_dotted_base_class(self):
844 code = 'import samplemod\n' \
845 'class Derived(samplemod.SampleClass):\n' \
846 ' pass\n'
847 mod = libutils.get_string_module(self.project, code)
848 derived = mod['Derived'].get_object()
849 self.assertTrue('sample_method' in derived)
850
851 def test_self_in_methods(self):
852 code = 'class Sample(object):\n' \
853 ' def func(self):\n' \
854 ' pass\n'
855 scope = libutils.get_string_scope(self.project, code)
856 sample_class = scope['Sample'].get_object()
857 func_scope = scope.get_scopes()[0].get_scopes()[0]
858 self.assertEquals(sample_class,
859 func_scope['self'].get_object().get_type())
860 self.assertTrue('func' in func_scope['self'].get_object())
861
862 def test_none_assignments_in_classes(self):
863 code = 'class C(object):\n' \
864 ' var = ""\n' \
865 ' def f(self):\n' \
866 ' self.var += "".join([])\n'
867 scope = libutils.get_string_scope(self.project, code)
868 c_class = scope['C'].get_object()
869 self.assertTrue('var' in c_class)
870
871 def test_self_in_methods_with_decorators(self):
872 code = 'class Sample(object):\n' \
873 ' @staticmethod\n' \
874 ' def func(self):\n' \
875 ' pass\n'
876 scope = libutils.get_string_scope(self.project, code)
877 sample_class = scope['Sample'].get_object()
878 func_scope = scope.get_scopes()[0].get_scopes()[0]
879 self.assertNotEquals(sample_class,
880 func_scope['self'].get_object().get_type())
881
882 def test_location_of_imports_when_importing(self):
883 mod = testutils.create_module(self.project, 'mod')
884 mod.write('from samplemod import SampleClass\n')
885 scope = libutils.get_string_scope(
886 self.project, 'from mod import SampleClass\n')
887 sample_class = scope['SampleClass']
888 samplemod = self.project.get_module('samplemod')
889 self.assertEquals((samplemod, 1),
890 sample_class.get_definition_location())
891
892 def test_nested_modules(self):
893 pkg = testutils.create_package(self.project, 'pkg')
894 testutils.create_module(self.project, 'mod', pkg)
895 imported_module = self.project.get_module('pkg.mod')
896 scope = libutils.get_string_scope(self.project, 'import pkg.mod\n')
897 mod_pyobject = scope['pkg'].get_object()['mod']
898 self.assertEquals((imported_module, 1),
899 mod_pyobject.get_definition_location())
900
901 def test_reading_init_dot_py(self):
902 pkg = testutils.create_package(self.project, 'pkg')
903 init_dot_py = pkg.get_child('__init__.py')
904 init_dot_py.write('a_var = 1\n')
905 pkg_object = self.project.get_module('pkg')
906 self.assertTrue('a_var' in pkg_object)
907
908 def test_relative_imports(self):
909 pkg = testutils.create_package(self.project, 'pkg')
910 mod1 = testutils.create_module(self.project, 'mod1', pkg)
911 mod2 = testutils.create_module(self.project, 'mod2', pkg)
912 mod2.write('import mod1\n')
913 mod1_object = self.pycore.resource_to_pyobject(mod1)
914 mod2_object = self.pycore.resource_to_pyobject(mod2)
915 self.assertEquals(mod1_object,
916 mod2_object.get_attributes()['mod1'].get_object())
917
918 def test_relative_froms(self):
919 pkg = testutils.create_package(self.project, 'pkg')
920 mod1 = testutils.create_module(self.project, 'mod1', pkg)
921 mod2 = testutils.create_module(self.project, 'mod2', pkg)
922 mod1.write('def a_func():\n pass\n')
923 mod2.write('from mod1 import a_func\n')
924 mod1_object = self.pycore.resource_to_pyobject(mod1)
925 mod2_object = self.pycore.resource_to_pyobject(mod2)
926 self.assertEquals(mod1_object['a_func'].get_object(),
927 mod2_object['a_func'].get_object())
928
929 def test_relative_imports_for_string_modules(self):
930 pkg = testutils.create_package(self.project, 'pkg')
931 mod1 = testutils.create_module(self.project, 'mod1', pkg)
932 mod2 = testutils.create_module(self.project, 'mod2', pkg)
933 mod2.write('import mod1\n')
934 mod1_object = self.pycore.resource_to_pyobject(mod1)
935 mod2_object = libutils.get_string_module(
936 self.project, mod2.read(), mod2)
937 self.assertEquals(mod1_object, mod2_object['mod1'].get_object())
938
939 def test_relative_imports_for_string_scopes(self):
940 pkg = testutils.create_package(self.project, 'pkg')
941 mod1 = testutils.create_module(self.project, 'mod1', pkg)
942 mod2 = testutils.create_module(self.project, 'mod2', pkg)
943 mod2.write('import mod1\n')
944 mod1_object = self.pycore.resource_to_pyobject(mod1)
945 mod2_scope = libutils.get_string_scope(self.project, mod2.read(),
946 mod2)
947 self.assertEquals(mod1_object, mod2_scope['mod1'].get_object())
948
949 @testutils.run_only_for_25
950 def test_new_style_relative_imports(self):
951 pkg = testutils.create_package(self.project, 'pkg')
952 mod1 = testutils.create_module(self.project, 'mod1', pkg)
953 mod2 = testutils.create_module(self.project, 'mod2', pkg)
954 mod2.write('from . import mod1\n')
955 mod1_object = self.pycore.resource_to_pyobject(mod1)
956 mod2_object = self.pycore.resource_to_pyobject(mod2)
957 self.assertEquals(mod1_object, mod2_object['mod1'].get_object())
958
959 @testutils.run_only_for_25
960 def test_new_style_relative_imports2(self):
961 pkg = testutils.create_package(self.project, 'pkg')
962 mod1 = testutils.create_module(self.project, 'mod1')
963 mod2 = testutils.create_module(self.project, 'mod2', pkg)
964 mod1.write('def a_func():\n pass\n')
965 mod2.write('from ..mod1 import a_func\n')
966 mod1_object = self.pycore.resource_to_pyobject(mod1)
967 mod2_object = self.pycore.resource_to_pyobject(mod2)
968 self.assertEquals(mod1_object['a_func'].get_object(),
969 mod2_object['a_func'].get_object())
970
971 def test_invalidating_cache_for_from_imports_after_resource_change(self):
972 mod1 = testutils.create_module(self.project, 'mod1')
973 mod2 = testutils.create_module(self.project, 'mod2')
974 mod2.write('def a_func():\n print(1)\n')
975 mod1.write('from mod2 import a_func\na_func()\n')
976
977 pymod1 = self.project.get_module('mod1')
978 pymod2 = self.project.get_module('mod2')
979 self.assertEquals(pymod1['a_func'].get_object(),
980 pymod2['a_func'].get_object())
981 mod2.write(mod2.read() + '\n')
982 pymod2 = self.project.get_module('mod2')
983 self.assertEquals(pymod1['a_func'].get_object(),
984 pymod2['a_func'].get_object())
985
986 def test_invalidating_superclasses_after_change(self):
987 mod1 = testutils.create_module(self.project, 'mod1')
988 mod2 = testutils.create_module(self.project, 'mod2')
989 mod1.write('class A(object):\n def func1(self):\n pass\n')
990 mod2.write('import mod1\nclass B(mod1.A):\n pass\n')
991
992 b_class = self.project.get_module('mod2')['B'].get_object()
993 self.assertTrue('func1' in b_class)
994
995 mod1.write('class A(object):\n def func2(self):\n pass\n')
996 self.assertTrue('func2' in b_class)
997
998 def test_caching_pymodule_with_syntax_errors(self):
999 self.project.prefs['ignore_syntax_errors'] = True
1000 self.project.prefs['automatic_soa'] = True
1001 self.project.pycore._init_automatic_soa()
1002 source = 'import sys\nab cd'
1003 mod = testutils.create_module(self.project, 'mod')
1004 mod.write(source)
1005 from rope.contrib import fixsyntax
1006 fixer = fixsyntax.FixSyntax(self.project, source, mod, 10)
1007 pymodule = fixer.get_pymodule()
1008 self.assertTrue(pymodule.source_code.startswith('import sys\npass\n'))
1009
1010
1011 class TextChangeDetectorTest(unittest.TestCase):
1012
1013 def test_trivial_case(self):
1014 detector = _TextChangeDetector('\n', '\n')
1015 self.assertFalse(detector.is_changed(1, 1))
1016
1017 def test_one_line_change(self):
1018 detector = _TextChangeDetector('1\n2\n', '1\n3\n')
1019 self.assertFalse(detector.is_changed(1, 1))
1020 self.assertTrue(detector.is_changed(2, 2))
1021
1022 def test_line_expansion(self):
1023 detector = _TextChangeDetector('1\n2\n', '1\n3\n4\n2\n')
1024 self.assertFalse(detector.is_changed(1, 1))
1025 self.assertFalse(detector.is_changed(2, 2))
1026
1027 def test_line_removals(self):
1028 detector = _TextChangeDetector('1\n3\n4\n2\n', '1\n2\n')
1029 self.assertFalse(detector.is_changed(1, 1))
1030 self.assertTrue(detector.is_changed(2, 3))
1031 self.assertFalse(detector.is_changed(4, 4))
1032
1033 def test_multi_line_checks(self):
1034 detector = _TextChangeDetector('1\n2\n', '1\n3\n')
1035 self.assertTrue(detector.is_changed(1, 2))
1036
1037 def test_consume_change(self):
1038 detector = _TextChangeDetector('1\n2\n', '1\n3\n')
1039 self.assertTrue(detector.is_changed(1, 2))
1040 self.assertTrue(detector.consume_changes(1, 2))
1041 self.assertFalse(detector.is_changed(1, 2))
1042
1043
1044 class PyCoreProjectConfigsTest(unittest.TestCase):
1045
1046 def setUp(self):
1047 super(PyCoreProjectConfigsTest, self).setUp()
1048 self.project = None
1049
1050 def tearDown(self):
1051 if self.project:
1052 testutils.remove_project(self.project)
1053 super(PyCoreProjectConfigsTest, self).tearDown()
1054
1055 def test_python_files_config(self):
1056 self.project = testutils.sample_project(python_files=['myscript'])
1057 myscript = self.project.root.create_file('myscript')
1058 self.assertTrue(self.project.pycore.is_python_file(myscript))
1059
1060 def test_ignore_bad_imports(self):
1061 self.project = testutils.sample_project(ignore_bad_imports=True)
1062 pymod = libutils.get_string_module(
1063 self.project, 'import some_nonexistent_module\n')
1064 self.assertFalse('some_nonexistent_module' in pymod)
1065
1066 def test_ignore_bad_imports_for_froms(self):
1067 self.project = testutils.sample_project(ignore_bad_imports=True)
1068 pymod = libutils.get_string_module(
1069 self.project, 'from some_nonexistent_module import var\n')
1070 self.assertFalse('var' in pymod)
1071
1072 def test_reporting_syntax_errors_with_force_errors(self):
1073 self.project = testutils.sample_project(ignore_syntax_errors=True)
1074 mod = testutils.create_module(self.project, 'mod')
1075 mod.write('syntax error ...\n')
1076 with self.assertRaises(exceptions.ModuleSyntaxError):
1077 self.project.pycore.resource_to_pyobject(mod, force_errors=True)
1078
1079 def test_reporting_syntax_errors_in_strings_with_force_errors(self):
1080 self.project = testutils.sample_project(ignore_syntax_errors=True)
1081 with self.assertRaises(exceptions.ModuleSyntaxError):
1082 libutils.get_string_module(
1083 self.project, 'syntax error ...', force_errors=True)
1084
1085 def test_not_raising_errors_for_strings_with_ignore_errors(self):
1086 self.project = testutils.sample_project(ignore_syntax_errors=True)
1087 libutils.get_string_module(self.project, 'syntax error ...')
1088
1089 def test_reporting_syntax_errors_with_force_errors_for_packages(self):
1090 self.project = testutils.sample_project(ignore_syntax_errors=True)
1091 pkg = testutils.create_package(self.project, 'pkg')
1092 pkg.get_child('__init__.py').write('syntax error ...\n')
1093 with self.assertRaises(exceptions.ModuleSyntaxError):
1094 self.project.pycore.resource_to_pyobject(pkg, force_errors=True)
1095
1096
1097 def suite():
1098 result = unittest.TestSuite()
1099 result.addTests(unittest.makeSuite(PyCoreTest))
1100 result.addTests(unittest.makeSuite(PyCoreInProjectsTest))
1101 result.addTests(unittest.makeSuite(TextChangeDetectorTest))
1102 result.addTests(unittest.makeSuite(PyCoreProjectConfigsTest))
1103 return result
1104
1105
1106 if __name__ == '__main__':
1107 unittest.main()
OLDNEW
« no previous file with comments | « tools/telemetry/third_party/rope/ropetest/projecttest.py ('k') | tools/telemetry/third_party/rope/ropetest/pyscopestest.py » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698