Home | History | Annotate | Download | only in cindex
      1 from clang.cindex import *
      2 from .util import get_tu
      3 
      4 # FIXME: We need support for invalid translation units to test better.
      5 
      6 def test_diagnostic_warning():
      7     tu = get_tu('int f0() {}\n')
      8     assert len(tu.diagnostics) == 1
      9     assert tu.diagnostics[0].severity == Diagnostic.Warning
     10     assert tu.diagnostics[0].location.line == 1
     11     assert tu.diagnostics[0].location.column == 11
     12     assert (tu.diagnostics[0].spelling ==
     13             'control reaches end of non-void function')
     14 
     15 def test_diagnostic_note():
     16     # FIXME: We aren't getting notes here for some reason.
     17     tu = get_tu('#define A x\nvoid *A = 1;\n')
     18     assert len(tu.diagnostics) == 1
     19     assert tu.diagnostics[0].severity == Diagnostic.Warning
     20     assert tu.diagnostics[0].location.line == 2
     21     assert tu.diagnostics[0].location.column == 7
     22     assert 'incompatible' in tu.diagnostics[0].spelling
     23 #    assert tu.diagnostics[1].severity == Diagnostic.Note
     24 #    assert tu.diagnostics[1].location.line == 1
     25 #    assert tu.diagnostics[1].location.column == 11
     26 #    assert tu.diagnostics[1].spelling == 'instantiated from'
     27 
     28 def test_diagnostic_fixit():
     29     tu = get_tu('struct { int f0; } x = { f0 : 1 };')
     30     assert len(tu.diagnostics) == 1
     31     assert tu.diagnostics[0].severity == Diagnostic.Warning
     32     assert tu.diagnostics[0].location.line == 1
     33     assert tu.diagnostics[0].location.column == 26
     34     assert tu.diagnostics[0].spelling.startswith('use of GNU old-style')
     35     assert len(tu.diagnostics[0].fixits) == 1
     36     assert tu.diagnostics[0].fixits[0].range.start.line == 1
     37     assert tu.diagnostics[0].fixits[0].range.start.column == 26
     38     assert tu.diagnostics[0].fixits[0].range.end.line == 1
     39     assert tu.diagnostics[0].fixits[0].range.end.column == 30
     40     assert tu.diagnostics[0].fixits[0].value == '.f0 = '
     41 
     42 def test_diagnostic_range():
     43     tu = get_tu('void f() { int i = "a" + 1; }')
     44     assert len(tu.diagnostics) == 1
     45     assert tu.diagnostics[0].severity == Diagnostic.Warning
     46     assert tu.diagnostics[0].location.line == 1
     47     assert tu.diagnostics[0].location.column == 16
     48     assert tu.diagnostics[0].spelling.startswith('incompatible pointer to')
     49     assert len(tu.diagnostics[0].fixits) == 0
     50     assert len(tu.diagnostics[0].ranges) == 1
     51     assert tu.diagnostics[0].ranges[0].start.line == 1
     52     assert tu.diagnostics[0].ranges[0].start.column == 20
     53     assert tu.diagnostics[0].ranges[0].end.line == 1
     54     assert tu.diagnostics[0].ranges[0].end.column == 27
     55     try:
     56       tu.diagnostics[0].ranges[1].start.line
     57     except IndexError:
     58       assert True
     59     else:
     60       assert False
     61 
     62 def test_diagnostic_category():
     63     """Ensure that category properties work."""
     64     tu = get_tu('int f(int i) { return 7; }', all_warnings=True)
     65     assert len(tu.diagnostics) == 1
     66     d = tu.diagnostics[0]
     67 
     68     assert d.severity == Diagnostic.Warning
     69     assert d.location.line == 1
     70     assert d.location.column == 11
     71 
     72     assert d.category_number == 2
     73     assert d.category_name == 'Semantic Issue'
     74 
     75 def test_diagnostic_option():
     76     """Ensure that category option properties work."""
     77     tu = get_tu('int f(int i) { return 7; }', all_warnings=True)
     78     assert len(tu.diagnostics) == 1
     79     d = tu.diagnostics[0]
     80 
     81     assert d.option == '-Wunused-parameter'
     82     assert d.disable_option == '-Wno-unused-parameter'
     83 
     84 def test_diagnostic_children():
     85     tu = get_tu('void f(int x) {} void g() { f(); }')
     86     assert len(tu.diagnostics) == 1
     87     d = tu.diagnostics[0]
     88 
     89     children = d.children
     90     assert len(children) == 1
     91     assert children[0].severity == Diagnostic.Note
     92     assert children[0].spelling.endswith('declared here')
     93     assert children[0].location.line == 1
     94     assert children[0].location.column == 1
     95