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

Unified Diff: tools/telemetry/third_party/rope/ropetest/pyscopestest.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 side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/rope/ropetest/pyscopestest.py
diff --git a/tools/telemetry/third_party/rope/ropetest/pyscopestest.py b/tools/telemetry/third_party/rope/ropetest/pyscopestest.py
new file mode 100644
index 0000000000000000000000000000000000000000..00c5582cc84ac65e85e8c1e435fb7f6269bc4f98
--- /dev/null
+++ b/tools/telemetry/third_party/rope/ropetest/pyscopestest.py
@@ -0,0 +1,258 @@
+import unittest
+
+from rope.base import libutils
+from rope.base.pyobjects import get_base_type
+from ropetest import testutils
+
+
+class PyCoreScopesTest(unittest.TestCase):
+
+ def setUp(self):
+ super(PyCoreScopesTest, self).setUp()
+ self.project = testutils.sample_project()
+ self.pycore = self.project.pycore
+
+ def tearDown(self):
+ testutils.remove_project(self.project)
+ super(PyCoreScopesTest, self).tearDown()
+
+ def test_simple_scope(self):
+ scope = libutils.get_string_scope(
+ self.project, 'def sample_func():\n pass\n')
+ sample_func = scope['sample_func'].get_object()
+ self.assertEquals(get_base_type('Function'), sample_func.get_type())
+
+ def test_simple_function_scope(self):
+ scope = libutils.get_string_scope(
+ self.project, 'def sample_func():\n a = 10\n')
+ self.assertEquals(1, len(scope.get_scopes()))
+ sample_func_scope = scope.get_scopes()[0]
+ self.assertEquals(1, len(sample_func_scope.get_names()))
+ self.assertEquals(0, len(sample_func_scope.get_scopes()))
+
+ def test_classes_inside_function_scopes(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'def sample_func():\n'
+ ' class SampleClass(object):\n pass\n')
+ self.assertEquals(1, len(scope.get_scopes()))
+ sample_func_scope = scope.get_scopes()[0] # noqa
+ self.assertEquals(get_base_type('Type'),
+ scope.get_scopes()[0]['SampleClass'].
+ get_object().get_type())
+
+ def test_simple_class_scope(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class SampleClass(object):\n'
+ ' def f(self):\n var = 10\n')
+ self.assertEquals(1, len(scope.get_scopes()))
+ sample_class_scope = scope.get_scopes()[0]
+ self.assertTrue('f' in sample_class_scope)
+ self.assertEquals(1, len(sample_class_scope.get_scopes()))
+ f_in_class = sample_class_scope.get_scopes()[0]
+ self.assertTrue('var' in f_in_class)
+
+ def test_get_lineno(self):
+ scope = libutils.get_string_scope(
+ self.project, '\ndef sample_func():\n a = 10\n')
+ self.assertEquals(1, len(scope.get_scopes()))
+ sample_func_scope = scope.get_scopes()[0]
+ self.assertEquals(1, scope.get_start())
+ self.assertEquals(2, sample_func_scope.get_start())
+
+ def test_scope_kind(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class SampleClass(object):\n pass\n'
+ 'def sample_func():\n pass\n')
+ sample_class_scope = scope.get_scopes()[0]
+ sample_func_scope = scope.get_scopes()[1]
+ self.assertEquals('Module', scope.get_kind())
+ self.assertEquals('Class', sample_class_scope.get_kind())
+ self.assertEquals('Function', sample_func_scope.get_kind())
+
+ def test_function_parameters_in_scope_names(self):
+ scope = libutils.get_string_scope(
+ self.project, 'def sample_func(param):\n a = 10\n')
+ sample_func_scope = scope.get_scopes()[0]
+ self.assertTrue('param' in sample_func_scope)
+
+ def test_get_names_contains_only_names_defined_in_a_scope(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'var1 = 10\ndef sample_func(param):\n var2 = 20\n')
+ sample_func_scope = scope.get_scopes()[0]
+ self.assertTrue('var1' not in sample_func_scope)
+
+ def test_scope_lookup(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'var1 = 10\ndef sample_func(param):\n var2 = 20\n')
+ self.assertTrue(scope.lookup('var2') is None)
+ self.assertEquals(get_base_type('Function'),
+ scope.lookup('sample_func').get_object().get_type())
+ sample_func_scope = scope.get_scopes()[0]
+ self.assertTrue(sample_func_scope.lookup('var1') is not None)
+
+ def test_function_scopes(self):
+ scope = libutils.get_string_scope(
+ self.project, 'def func():\n var = 10\n')
+ func_scope = scope.get_scopes()[0]
+ self.assertTrue('var' in func_scope)
+
+ def test_function_scopes_classes(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'def func():\n class Sample(object):\n pass\n')
+ func_scope = scope.get_scopes()[0]
+ self.assertTrue('Sample' in func_scope)
+
+ def test_function_getting_scope(self):
+ mod = libutils.get_string_module(
+ self.project, 'def func(): var = 10\n')
+ func_scope = mod['func'].get_object().get_scope()
+ self.assertTrue('var' in func_scope)
+
+ def test_scopes_in_function_scopes(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'def func():\n def inner():\n var = 10\n')
+ func_scope = scope.get_scopes()[0]
+ inner_scope = func_scope.get_scopes()[0]
+ self.assertTrue('var' in inner_scope)
+
+ def test_for_variables_in_scopes(self):
+ scope = libutils.get_string_scope(
+ self.project, 'for a_var in range(10):\n pass\n')
+ self.assertTrue('a_var' in scope)
+
+ def test_assists_inside_fors(self):
+ scope = libutils.get_string_scope(
+ self.project, 'for i in range(10):\n a_var = i\n')
+ self.assertTrue('a_var' in scope)
+
+ def test_first_parameter_of_a_method(self):
+ code = 'class AClass(object):\n' \
+ ' def a_func(self, param):\n pass\n'
+ a_class = libutils.get_string_module(self.project, code)['AClass'].\
+ get_object()
+ function_scope = a_class['a_func'].get_object().get_scope()
+ self.assertEquals(a_class,
+ function_scope['self'].get_object().get_type())
+ self.assertNotEquals(a_class, function_scope['param'].
+ get_object().get_type())
+
+ def test_first_parameter_of_static_methods(self):
+ code = 'class AClass(object):\n' \
+ ' @staticmethod\n def a_func(param):\n pass\n'
+ a_class = libutils.get_string_module(self.project, code)['AClass'].\
+ get_object()
+ function_scope = a_class['a_func'].\
+ get_object().get_scope()
+ self.assertNotEquals(a_class,
+ function_scope['param'].get_object().get_type())
+
+ def test_first_parameter_of_class_methods(self):
+ code = 'class AClass(object):\n' \
+ ' @classmethod\n def a_func(cls):\n pass\n'
+ a_class = libutils.get_string_module(self.project, code)['AClass'].\
+ get_object()
+ function_scope = a_class['a_func'].get_object().get_scope()
+ self.assertEquals(a_class, function_scope['cls'].get_object())
+
+ def test_first_parameter_with_self_as_name_and_unknown_decorator(self):
+ code = 'def my_decorator(func):\n return func\n'\
+ 'class AClass(object):\n' \
+ ' @my_decorator\n def a_func(self):\n pass\n'
+ a_class = libutils.get_string_module(self.project, code)['AClass'].\
+ get_object()
+ function_scope = a_class['a_func'].get_object().get_scope()
+ self.assertEquals(a_class, function_scope['self'].
+ get_object().get_type())
+
+ def test_inside_class_scope_attribute_lookup(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class C(object):\n'
+ ' an_attr = 1\n'
+ ' def a_func(self):\n pass')
+ self.assertEquals(1, len(scope.get_scopes()))
+ c_scope = scope.get_scopes()[0]
+ self.assertTrue('an_attr'in c_scope.get_names())
+ self.assertTrue(c_scope.lookup('an_attr') is not None)
+ f_in_c = c_scope.get_scopes()[0]
+ self.assertTrue(f_in_c.lookup('an_attr') is None)
+
+ def test_inside_class_scope_attribute_lookup2(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class C(object):\n'
+ ' def __init__(self):\n self.an_attr = 1\n'
+ ' def a_func(self):\n pass')
+ self.assertEquals(1, len(scope.get_scopes()))
+ c_scope = scope.get_scopes()[0]
+ f_in_c = c_scope.get_scopes()[0]
+ self.assertTrue(f_in_c.lookup('an_attr') is None)
+
+ def test_get_inner_scope_for_staticmethods(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class C(object):\n'
+ ' @staticmethod\n'
+ ' def a_func(self):\n pass\n')
+ c_scope = scope.get_scopes()[0]
+ f_in_c = c_scope.get_scopes()[0]
+ self.assertEquals(f_in_c, scope.get_inner_scope_for_line(4))
+
+ def test_getting_overwritten_scopes(self):
+ scope = libutils.get_string_scope(
+ self.project, 'def f():\n pass\ndef f():\n pass\n')
+ self.assertEquals(2, len(scope.get_scopes()))
+ f1_scope = scope.get_scopes()[0]
+ f2_scope = scope.get_scopes()[1]
+ self.assertNotEquals(f1_scope, f2_scope)
+
+ def test_assigning_builtin_names(self):
+ mod = libutils.get_string_module(self.project, 'range = 1\n')
+ range = mod.get_scope().lookup('range')
+ self.assertEquals((mod, 1), range.get_definition_location())
+
+ def test_get_inner_scope_and_logical_lines(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class C(object):\n'
+ ' def f():\n s = """\n1\n2\n"""\n a = 1\n')
+ c_scope = scope.get_scopes()[0]
+ f_in_c = c_scope.get_scopes()[0]
+ self.assertEquals(f_in_c, scope.get_inner_scope_for_line(7))
+
+ def test_getting_defined_names_for_classes(self):
+ scope = libutils.get_string_scope(
+ self.project,
+ 'class A(object):\n def a(self):\n pass\n'
+ 'class B(A):\n def b(self):\n pass\n')
+ a_scope = scope['A'].get_object().get_scope() # noqa
+ b_scope = scope['B'].get_object().get_scope()
+ self.assertTrue('a' in b_scope.get_names())
+ self.assertTrue('b' in b_scope.get_names())
+ self.assertTrue('a' not in b_scope.get_defined_names())
+ self.assertTrue('b' in b_scope.get_defined_names())
+
+ def test_getting_defined_names_for_modules(self):
+ scope = libutils.get_string_scope(
+ self.project, 'class A(object):\n pass\n')
+ self.assertTrue('open' in scope.get_names())
+ self.assertTrue('A' in scope.get_names())
+ self.assertTrue('open' not in scope.get_defined_names())
+ self.assertTrue('A' in scope.get_defined_names())
+
+
+def suite():
+ result = unittest.TestSuite()
+ result.addTests(unittest.makeSuite(PyCoreScopesTest))
+ return result
+
+
+if __name__ == '__main__':
+ unittest.main()

Powered by Google App Engine
This is Rietveld 408576698