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