| from clang.cindex import * |
| import os |
| |
| kInputsDir = os.path.join(os.path.dirname(__file__), 'INPUTS') |
| |
| def test_spelling(): |
| path = os.path.join(kInputsDir, 'hello.cpp') |
| index = Index.create() |
| tu = index.parse(path) |
| assert tu.spelling == path |
| |
| def test_cursor(): |
| path = os.path.join(kInputsDir, 'hello.cpp') |
| index = Index.create() |
| tu = index.parse(path) |
| c = tu.cursor |
| assert isinstance(c, Cursor) |
| assert c.kind is CursorKind.TRANSLATION_UNIT |
| |
| def test_parse_arguments(): |
| path = os.path.join(kInputsDir, 'parse_arguments.c') |
| index = Index.create() |
| tu = index.parse(path, ['-DDECL_ONE=hello', '-DDECL_TWO=hi']) |
| spellings = [c.spelling for c in tu.cursor.get_children()] |
| assert spellings[-2] == 'hello' |
| assert spellings[-1] == 'hi' |
| |
| def test_reparse_arguments(): |
| path = os.path.join(kInputsDir, 'parse_arguments.c') |
| index = Index.create() |
| tu = index.parse(path, ['-DDECL_ONE=hello', '-DDECL_TWO=hi']) |
| tu.reparse() |
| spellings = [c.spelling for c in tu.cursor.get_children()] |
| assert spellings[-2] == 'hello' |
| assert spellings[-1] == 'hi' |
| |
| def test_unsaved_files(): |
| index = Index.create() |
| tu = index.parse('fake.c', ['-I./'], unsaved_files = [ |
| ('fake.c', """ |
| #include "fake.h" |
| int x; |
| int SOME_DEFINE; |
| """), |
| ('./fake.h', """ |
| #define SOME_DEFINE y |
| """) |
| ]) |
| spellings = [c.spelling for c in tu.cursor.get_children()] |
| assert spellings[-2] == 'x' |
| assert spellings[-1] == 'y' |
| |
| def test_unsaved_files_2(): |
| import StringIO |
| index = Index.create() |
| tu = index.parse('fake.c', unsaved_files = [ |
| ('fake.c', StringIO.StringIO('int x;'))]) |
| spellings = [c.spelling for c in tu.cursor.get_children()] |
| assert spellings[-1] == 'x' |
| |
| def normpaths_equal(path1, path2): |
| """ Compares two paths for equality after normalizing them with |
| os.path.normpath |
| """ |
| return os.path.normpath(path1) == os.path.normpath(path2) |
| |
| def test_includes(): |
| def eq(expected, actual): |
| if not actual.is_input_file: |
| return normpaths_equal(expected[0], actual.source.name) and \ |
| normpaths_equal(expected[1], actual.include.name) |
| else: |
| return normpaths_equal(expected[1], actual.include.name) |
| |
| src = os.path.join(kInputsDir, 'include.cpp') |
| h1 = os.path.join(kInputsDir, "header1.h") |
| h2 = os.path.join(kInputsDir, "header2.h") |
| h3 = os.path.join(kInputsDir, "header3.h") |
| inc = [(src, h1), (h1, h3), (src, h2), (h2, h3)] |
| |
| index = Index.create() |
| tu = index.parse(src) |
| for i in zip(inc, tu.get_includes()): |
| assert eq(i[0], i[1]) |