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