1d7933e6f29b4c93df8263df21ff5e2e1dd0cecb8Argyrios Kyrtzidisfrom clang.cindex import Index, CursorKind, TypeKind 290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 390859ae3b6acbdc48113cddb95984e3472a51772Daniel DunbarkInput = """\ 490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar// FIXME: Find nicer way to drop builtins and other cruft. 590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbarint start_decl; 690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 790859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbarstruct s0 { 890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar int a; 990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar int b; 1090859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar}; 1190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 1290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbarstruct s1; 1390859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 1490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbarvoid f0(int a0, int a1) { 1590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar int l0, l1; 1690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 1790859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar if (a0) 1890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar return; 1990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 2090859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar for (;;) { 2190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar break; 2290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar } 2390859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar} 2490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar""" 2590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 2690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbardef test_get_children(): 272791dfc0fcbff64dbdaccde433b75c7226528b8dDaniel Dunbar index = Index.create() 2890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar tu = index.parse('t.c', unsaved_files = [('t.c',kInput)]) 2990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 3090859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar # Skip until past start_decl. 3190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar it = tu.cursor.get_children() 3290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar while it.next().spelling != 'start_decl': 3390859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar pass 3490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 3590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar tu_nodes = list(it) 3690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 3790859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert len(tu_nodes) == 3 3890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 3990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].kind == CursorKind.STRUCT_DECL 4090859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].spelling == 's0' 4190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].is_definition() == True 4290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].location.file.name == 't.c' 4390859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].location.line == 4 4490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[0].location.column == 8 4590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 4690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar s0_nodes = list(tu_nodes[0].get_children()) 4790859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert len(s0_nodes) == 2 4890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert s0_nodes[0].kind == CursorKind.FIELD_DECL 4990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert s0_nodes[0].spelling == 'a' 50d7933e6f29b4c93df8263df21ff5e2e1dd0cecb8Argyrios Kyrtzidis assert s0_nodes[0].type.kind == TypeKind.INT 5190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert s0_nodes[1].kind == CursorKind.FIELD_DECL 5290859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert s0_nodes[1].spelling == 'b' 53d7933e6f29b4c93df8263df21ff5e2e1dd0cecb8Argyrios Kyrtzidis assert s0_nodes[1].type.kind == TypeKind.INT 5490859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 5590859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[1].kind == CursorKind.STRUCT_DECL 5690859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[1].spelling == 's1' 57b60a2bebb5f3048f6c53d4f3997ebd84493a2d98Douglas Gregor assert tu_nodes[1].displayname == 's1' 5890859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[1].is_definition() == False 5990859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar 6090859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[2].kind == CursorKind.FUNCTION_DECL 6190859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[2].spelling == 'f0' 62b60a2bebb5f3048f6c53d4f3997ebd84493a2d98Douglas Gregor assert tu_nodes[2].displayname == 'f0(int, int)' 6390859ae3b6acbdc48113cddb95984e3472a51772Daniel Dunbar assert tu_nodes[2].is_definition() == True 64