from clang.cindex import *

def tu_from_source(source):
    index = Index.create()
    tu = index.parse('INPUT.c', unsaved_files = [('INPUT.c', source)])
    # FIXME: Remove the need for this.
    tu.index = index
    return tu

# FIXME: We need support for invalid translation units to test better.

def test_diagnostic_warning():
    tu = tu_from_source("""int f0() {}\n""")
    assert len(tu.diagnostics) == 1
    assert tu.diagnostics[0].severity == Diagnostic.Warning
    assert tu.diagnostics[0].location.line == 1
    assert tu.diagnostics[0].location.column == 11
    assert (tu.diagnostics[0].spelling ==
            'control reaches end of non-void function')

def test_diagnostic_note():
    # FIXME: We aren't getting notes here for some reason.
    index = Index.create()
    tu = tu_from_source("""#define A x\nvoid *A = 1;\n""")
    assert len(tu.diagnostics) == 1
    assert tu.diagnostics[0].severity == Diagnostic.Warning
    assert tu.diagnostics[0].location.line == 2
    assert tu.diagnostics[0].location.column == 7
    assert 'incompatible' in tu.diagnostics[0].spelling
#    assert tu.diagnostics[1].severity == Diagnostic.Note
#    assert tu.diagnostics[1].location.line == 1
#    assert tu.diagnostics[1].location.column == 11
#    assert tu.diagnostics[1].spelling == 'instantiated from'

def test_diagnostic_fixit():
    index = Index.create()
    tu = tu_from_source("""struct { int f0; } x = { f0 : 1 };""")
    assert len(tu.diagnostics) == 1
    assert tu.diagnostics[0].severity == Diagnostic.Warning
    assert tu.diagnostics[0].location.line == 1
    assert tu.diagnostics[0].location.column == 31
    assert tu.diagnostics[0].spelling.startswith('use of GNU old-style')
    assert len(tu.diagnostics[0].fixits) == 1
    assert tu.diagnostics[0].fixits[0].range.start.line == 1
    assert tu.diagnostics[0].fixits[0].range.start.column == 26
    assert tu.diagnostics[0].fixits[0].range.end.line == 1
    assert tu.diagnostics[0].fixits[0].range.end.column == 30
    assert tu.diagnostics[0].fixits[0].value == '.f0 = '
