1from clang.cindex import CursorKind 2 3import unittest 4 5 6class TestCursorKind(unittest.TestCase): 7 def test_name(self): 8 self.assertTrue(CursorKind.UNEXPOSED_DECL.name is 'UNEXPOSED_DECL') 9 10 def test_get_all_kinds(self): 11 kinds = CursorKind.get_all_kinds() 12 self.assertIn(CursorKind.UNEXPOSED_DECL, kinds) 13 self.assertIn(CursorKind.TRANSLATION_UNIT, kinds) 14 self.assertIn(CursorKind.VARIABLE_REF, kinds) 15 self.assertIn(CursorKind.LAMBDA_EXPR, kinds) 16 self.assertIn(CursorKind.OBJ_BOOL_LITERAL_EXPR, kinds) 17 self.assertIn(CursorKind.OBJ_SELF_EXPR, kinds) 18 self.assertIn(CursorKind.MS_ASM_STMT, kinds) 19 self.assertIn(CursorKind.MODULE_IMPORT_DECL, kinds) 20 self.assertIn(CursorKind.TYPE_ALIAS_TEMPLATE_DECL, kinds) 21 22 def test_kind_groups(self): 23 """Check that every kind classifies to exactly one group.""" 24 25 self.assertTrue(CursorKind.UNEXPOSED_DECL.is_declaration()) 26 self.assertTrue(CursorKind.TYPE_REF.is_reference()) 27 self.assertTrue(CursorKind.DECL_REF_EXPR.is_expression()) 28 self.assertTrue(CursorKind.UNEXPOSED_STMT.is_statement()) 29 self.assertTrue(CursorKind.INVALID_FILE.is_invalid()) 30 31 self.assertTrue(CursorKind.TRANSLATION_UNIT.is_translation_unit()) 32 self.assertFalse(CursorKind.TYPE_REF.is_translation_unit()) 33 34 self.assertTrue(CursorKind.PREPROCESSING_DIRECTIVE.is_preprocessing()) 35 self.assertFalse(CursorKind.TYPE_REF.is_preprocessing()) 36 37 self.assertTrue(CursorKind.UNEXPOSED_DECL.is_unexposed()) 38 self.assertFalse(CursorKind.TYPE_REF.is_unexposed()) 39 40 for k in CursorKind.get_all_kinds(): 41 group = [n for n in ('is_declaration', 'is_reference', 'is_expression', 42 'is_statement', 'is_invalid', 'is_attribute') 43 if getattr(k, n)()] 44 45 if k in ( CursorKind.TRANSLATION_UNIT, 46 CursorKind.MACRO_DEFINITION, 47 CursorKind.MACRO_INSTANTIATION, 48 CursorKind.INCLUSION_DIRECTIVE, 49 CursorKind.PREPROCESSING_DIRECTIVE, 50 CursorKind.OVERLOAD_CANDIDATE): 51 self.assertEqual(len(group), 0) 52 else: 53 self.assertEqual(len(group), 1) 54