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