85 lines
2.6 KiB
Python
85 lines
2.6 KiB
Python
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])
|