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() |