blob: dd6d3a3259edced77f89d1b30619a05534a86ad3 [file] [log] [blame]
Michal Gornyc37d1612018-10-11 11:58:07 +00001import os
2from clang.cindex import Config
3if 'CLANG_LIBRARY_PATH' in os.environ:
4 Config.set_library_path(os.environ['CLANG_LIBRARY_PATH'])
5
Gregory Szorc9a2cb422012-07-12 07:21:12 +00006from clang.cindex import CursorKind
7from clang.cindex import Index
8from clang.cindex import SourceLocation
9from clang.cindex import SourceRange
10from clang.cindex import TokenKind
Gregory Szorc9a2cb422012-07-12 07:21:12 +000011
12from .util import get_tu
13
Michal Gorny084e43b2017-11-10 16:44:12 +000014import unittest
Gregory Szorc9a2cb422012-07-12 07:21:12 +000015
Gregory Szorc9a2cb422012-07-12 07:21:12 +000016
Michal Gorny084e43b2017-11-10 16:44:12 +000017class TestTokens(unittest.TestCase):
18 def test_token_to_cursor(self):
19 """Ensure we can obtain a Cursor from a Token instance."""
20 tu = get_tu('int i = 5;')
21 r = tu.get_extent('t.c', (0, 9))
22 tokens = list(tu.get_tokens(extent=r))
Gregory Szorc9a2cb422012-07-12 07:21:12 +000023
Michal Gorny084e43b2017-11-10 16:44:12 +000024 self.assertEqual(len(tokens), 4)
25 self.assertEqual(tokens[1].spelling, 'i')
26 self.assertEqual(tokens[1].kind, TokenKind.IDENTIFIER)
Gregory Szorc9a2cb422012-07-12 07:21:12 +000027
Michal Gorny084e43b2017-11-10 16:44:12 +000028 cursor = tokens[1].cursor
29 self.assertEqual(cursor.kind, CursorKind.VAR_DECL)
30 self.assertEqual(tokens[1].cursor, tokens[2].cursor)
Gregory Szorc9a2cb422012-07-12 07:21:12 +000031
Michal Gorny084e43b2017-11-10 16:44:12 +000032 def test_token_location(self):
33 """Ensure Token.location works."""
Gregory Szorc9a2cb422012-07-12 07:21:12 +000034
Michal Gorny084e43b2017-11-10 16:44:12 +000035 tu = get_tu('int foo = 10;')
36 r = tu.get_extent('t.c', (0, 11))
Gregory Szorc9a2cb422012-07-12 07:21:12 +000037
Michal Gorny084e43b2017-11-10 16:44:12 +000038 tokens = list(tu.get_tokens(extent=r))
39 self.assertEqual(len(tokens), 4)
Gregory Szorc9a2cb422012-07-12 07:21:12 +000040
Michal Gorny084e43b2017-11-10 16:44:12 +000041 loc = tokens[1].location
42 self.assertIsInstance(loc, SourceLocation)
43 self.assertEqual(loc.line, 1)
44 self.assertEqual(loc.column, 5)
45 self.assertEqual(loc.offset, 4)
Gregory Szorc9a2cb422012-07-12 07:21:12 +000046
Michal Gorny084e43b2017-11-10 16:44:12 +000047 def test_token_extent(self):
48 """Ensure Token.extent works."""
49 tu = get_tu('int foo = 10;')
50 r = tu.get_extent('t.c', (0, 11))
Gregory Szorc9a2cb422012-07-12 07:21:12 +000051
Michal Gorny084e43b2017-11-10 16:44:12 +000052 tokens = list(tu.get_tokens(extent=r))
53 self.assertEqual(len(tokens), 4)
54
55 extent = tokens[1].extent
56 self.assertIsInstance(extent, SourceRange)
57
58 self.assertEqual(extent.start.offset, 4)
59 self.assertEqual(extent.end.offset, 7)