1from clang.cindex import CursorKind 2from clang.cindex import Index 3from clang.cindex import SourceLocation 4from clang.cindex import SourceRange 5from clang.cindex import TokenKind 6from nose.tools import eq_ 7from nose.tools import ok_ 8 9from .util import get_tu 10 11def test_token_to_cursor(): 12 """Ensure we can obtain a Cursor from a Token instance.""" 13 tu = get_tu('int i = 5;') 14 r = tu.get_extent('t.c', (0, 9)) 15 tokens = list(tu.get_tokens(extent=r)) 16 17 assert len(tokens) == 5 18 assert tokens[1].spelling == 'i' 19 assert tokens[1].kind == TokenKind.IDENTIFIER 20 21 cursor = tokens[1].cursor 22 assert cursor.kind == CursorKind.VAR_DECL 23 assert tokens[1].cursor == tokens[2].cursor 24 25def test_token_location(): 26 """Ensure Token.location works.""" 27 28 tu = get_tu('int foo = 10;') 29 r = tu.get_extent('t.c', (0, 11)) 30 31 tokens = list(tu.get_tokens(extent=r)) 32 eq_(len(tokens), 4) 33 34 loc = tokens[1].location 35 ok_(isinstance(loc, SourceLocation)) 36 eq_(loc.line, 1) 37 eq_(loc.column, 5) 38 eq_(loc.offset, 4) 39 40def test_token_extent(): 41 """Ensure Token.extent works.""" 42 tu = get_tu('int foo = 10;') 43 r = tu.get_extent('t.c', (0, 11)) 44 45 tokens = list(tu.get_tokens(extent=r)) 46 eq_(len(tokens), 4) 47 48 extent = tokens[1].extent 49 ok_(isinstance(extent, SourceRange)) 50 51 eq_(extent.start.offset, 4) 52 eq_(extent.end.offset, 7) 53