| import os |
| from clang.cindex import Config |
| if 'CLANG_LIBRARY_PATH' in os.environ: |
| Config.set_library_path(os.environ['CLANG_LIBRARY_PATH']) |
| |
| 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 .util import get_tu |
| |
| import unittest |
| |
| |
| class TestTokens(unittest.TestCase): |
| def test_token_to_cursor(self): |
| """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)) |
| |
| self.assertEqual(len(tokens), 4) |
| self.assertEqual(tokens[1].spelling, 'i') |
| self.assertEqual(tokens[1].kind, TokenKind.IDENTIFIER) |
| |
| cursor = tokens[1].cursor |
| self.assertEqual(cursor.kind, CursorKind.VAR_DECL) |
| self.assertEqual(tokens[1].cursor, tokens[2].cursor) |
| |
| def test_token_location(self): |
| """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)) |
| self.assertEqual(len(tokens), 4) |
| |
| loc = tokens[1].location |
| self.assertIsInstance(loc, SourceLocation) |
| self.assertEqual(loc.line, 1) |
| self.assertEqual(loc.column, 5) |
| self.assertEqual(loc.offset, 4) |
| |
| def test_token_extent(self): |
| """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)) |
| self.assertEqual(len(tokens), 4) |
| |
| extent = tokens[1].extent |
| self.assertIsInstance(extent, SourceRange) |
| |
| self.assertEqual(extent.start.offset, 4) |
| self.assertEqual(extent.end.offset, 7) |