diff options
| author | Zancanaro; Carlo <czan8762@plang3.cs.usyd.edu.au> | 2012-09-24 09:58:17 +1000 | 
|---|---|---|
| committer | Zancanaro; Carlo <czan8762@plang3.cs.usyd.edu.au> | 2012-09-24 09:58:17 +1000 | 
| commit | 222e2a7620e6520ffaf4fc4e69d79c18da31542e (patch) | |
| tree | 7bfbc05bfa3b41c8f9d2e56d53a0bc3e310df239 /clang/bindings/python/tests/cindex/test_location.py | |
| parent | 3d206f03985b50beacae843d880bccdc91a9f424 (diff) | |
Add the clang library to the repo (with some of my changes, too).
Diffstat (limited to 'clang/bindings/python/tests/cindex/test_location.py')
| -rw-r--r-- | clang/bindings/python/tests/cindex/test_location.py | 86 | 
1 files changed, 86 insertions, 0 deletions
diff --git a/clang/bindings/python/tests/cindex/test_location.py b/clang/bindings/python/tests/cindex/test_location.py new file mode 100644 index 0000000..528676e --- /dev/null +++ b/clang/bindings/python/tests/cindex/test_location.py @@ -0,0 +1,86 @@ +from clang.cindex import Cursor +from clang.cindex import File +from clang.cindex import SourceLocation +from clang.cindex import SourceRange +from .util import get_cursor +from .util import get_tu + +baseInput="int one;\nint two;\n" + +def assert_location(loc, line, column, offset): +    assert loc.line == line +    assert loc.column == column +    assert loc.offset == offset + +def test_location(): +    tu = get_tu(baseInput) +    one = get_cursor(tu, 'one') +    two = get_cursor(tu, 'two') + +    assert one is not None +    assert two is not None + +    assert_location(one.location,line=1,column=5,offset=4) +    assert_location(two.location,line=2,column=5,offset=13) + +    # adding a linebreak at top should keep columns same +    tu = get_tu('\n' + baseInput) +    one = get_cursor(tu, 'one') +    two = get_cursor(tu, 'two') + +    assert one is not None +    assert two is not None + +    assert_location(one.location,line=2,column=5,offset=5) +    assert_location(two.location,line=3,column=5,offset=14) + +    # adding a space should affect column on first line only +    tu = get_tu(' ' + baseInput) +    one = get_cursor(tu, 'one') +    two = get_cursor(tu, 'two') + +    assert_location(one.location,line=1,column=6,offset=5) +    assert_location(two.location,line=2,column=5,offset=14) + +    # define the expected location ourselves and see if it matches +    # the returned location +    tu = get_tu(baseInput) + +    file = File.from_name(tu, 't.c') +    location = SourceLocation.from_position(tu, file, 1, 5) +    cursor = Cursor.from_location(tu, location) + +    one = get_cursor(tu, 'one') +    assert one is not None +    assert one == cursor + +    # Ensure locations referring to the same entity are equivalent. +    location2 = SourceLocation.from_position(tu, file, 1, 5) +    assert location == location2 +    location3 = SourceLocation.from_position(tu, file, 1, 4) +    assert location2 != location3 + +def test_extent(): +    tu = get_tu(baseInput) +    one = get_cursor(tu, 'one') +    two = get_cursor(tu, 'two') + +    assert_location(one.extent.start,line=1,column=1,offset=0) +    assert_location(one.extent.end,line=1,column=8,offset=7) +    assert baseInput[one.extent.start.offset:one.extent.end.offset] == "int one" + +    assert_location(two.extent.start,line=2,column=1,offset=9) +    assert_location(two.extent.end,line=2,column=8,offset=16) +    assert baseInput[two.extent.start.offset:two.extent.end.offset] == "int two" + +    file = File.from_name(tu, 't.c') +    location1 = SourceLocation.from_position(tu, file, 1, 1) +    location2 = SourceLocation.from_position(tu, file, 1, 8) + +    range1 = SourceRange.from_locations(location1, location2) +    range2 = SourceRange.from_locations(location1, location2) +    assert range1 == range2 + +    location3 = SourceLocation.from_position(tu, file, 1, 6) +    range3 = SourceRange.from_locations(location1, location3) +    assert range1 != range3  | 
