You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
from clang.cindex import CursorKind
|
|
from clang.cindex import Index
|
|
from clang.cindex import SourceLocation
|
|
from clang.cindex import SourceRange
|
|
from clang.cindex import TokenKind
|
|
from nose.tools import eq_
|
|
from nose.tools import ok_
|
|
|
|
from .util import get_tu
|
|
|
|
def test_token_to_cursor():
|
|
"""Ensure we can obtain a Cursor from a Token instance."""
|
|
tu = get_tu('int i = 5;')
|
|
r = tu.get_extent('t.c', (0, 9))
|
|
tokens = list(tu.get_tokens(extent=r))
|
|
|
|
assert len(tokens) == 5
|
|
assert tokens[1].spelling == 'i'
|
|
assert tokens[1].kind == TokenKind.IDENTIFIER
|
|
|
|
cursor = tokens[1].cursor
|
|
assert cursor.kind == CursorKind.VAR_DECL
|
|
assert tokens[1].cursor == tokens[2].cursor
|
|
|
|
def test_token_location():
|
|
"""Ensure Token.location works."""
|
|
|
|
tu = get_tu('int foo = 10;')
|
|
r = tu.get_extent('t.c', (0, 11))
|
|
|
|
tokens = list(tu.get_tokens(extent=r))
|
|
eq_(len(tokens), 4)
|
|
|
|
loc = tokens[1].location
|
|
ok_(isinstance(loc, SourceLocation))
|
|
eq_(loc.line, 1)
|
|
eq_(loc.column, 5)
|
|
eq_(loc.offset, 4)
|
|
|
|
def test_token_extent():
|
|
"""Ensure Token.extent works."""
|
|
tu = get_tu('int foo = 10;')
|
|
r = tu.get_extent('t.c', (0, 11))
|
|
|
|
tokens = list(tu.get_tokens(extent=r))
|
|
eq_(len(tokens), 4)
|
|
|
|
extent = tokens[1].extent
|
|
ok_(isinstance(extent, SourceRange))
|
|
|
|
eq_(extent.start.offset, 4)
|
|
eq_(extent.end.offset, 7)
|