1532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbarfrom clang.cindex import * 21f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorcfrom .util import get_tu 3532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar 4532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar# FIXME: We need support for invalid translation units to test better. 5532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar 6532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbardef test_diagnostic_warning(): 71f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('int f0() {}\n') 8532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert len(tu.diagnostics) == 1 9532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].severity == Diagnostic.Warning 10532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].location.line == 1 11532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].location.column == 11 12532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert (tu.diagnostics[0].spelling == 13532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar 'control reaches end of non-void function') 14532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar 15532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbardef test_diagnostic_note(): 16532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar # FIXME: We aren't getting notes here for some reason. 171f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('#define A x\nvoid *A = 1;\n') 18532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert len(tu.diagnostics) == 1 19532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].severity == Diagnostic.Warning 20532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].location.line == 2 21532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].location.column == 7 22532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert 'incompatible' in tu.diagnostics[0].spelling 23532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar# assert tu.diagnostics[1].severity == Diagnostic.Note 24532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar# assert tu.diagnostics[1].location.line == 1 25532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar# assert tu.diagnostics[1].location.column == 11 26532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar# assert tu.diagnostics[1].spelling == 'instantiated from' 27532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar 28532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbardef test_diagnostic_fixit(): 291f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('struct { int f0; } x = { f0 : 1 };') 30532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert len(tu.diagnostics) == 1 31532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].severity == Diagnostic.Warning 32532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].location.line == 1 33888982e42ba1b3098abbc1fd5e605d35ba51b34bDouglas Gregor assert tu.diagnostics[0].location.column == 26 34532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].spelling.startswith('use of GNU old-style') 35532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert len(tu.diagnostics[0].fixits) == 1 36532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].fixits[0].range.start.line == 1 37532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].fixits[0].range.start.column == 26 38532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].fixits[0].range.end.line == 1 39d52864bd33c66aacc84133460d8c9c0dfcdd5c18Daniel Dunbar assert tu.diagnostics[0].fixits[0].range.end.column == 30 40532fc63b51cd0eb795df36d3fe306645b8b980e4Daniel Dunbar assert tu.diagnostics[0].fixits[0].value == '.f0 = ' 41f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser 42f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosserdef test_diagnostic_range(): 431f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('void f() { int i = "a" + 1; }') 44f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert len(tu.diagnostics) == 1 45f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].severity == Diagnostic.Warning 46f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].location.line == 1 47f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].location.column == 16 48f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].spelling.startswith('incompatible pointer to') 49f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert len(tu.diagnostics[0].fixits) == 0 50f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert len(tu.diagnostics[0].ranges) == 1 51f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].ranges[0].start.line == 1 52f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].ranges[0].start.column == 20 53f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].ranges[0].end.line == 1 54f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert tu.diagnostics[0].ranges[0].end.column == 27 55f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser try: 56f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser tu.diagnostics[0].ranges[1].start.line 57f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser except IndexError: 58f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert True 59f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser else: 60f498e00a30ca7fdaf4f49e778862f4cf84ffab2aTobias Grosser assert False 61ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser 62ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosserdef test_diagnostic_category(): 631f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """Ensure that category properties work.""" 641f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('int f(int i) { return 7; }', all_warnings=True) 65ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert len(tu.diagnostics) == 1 66ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser d = tu.diagnostics[0] 67ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser 68ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.severity == Diagnostic.Warning 69ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.location.line == 1 70ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.location.column == 11 71ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser 72ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.category_number == 2 73ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.category_name == 'Semantic Issue' 74ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser 75ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosserdef test_diagnostic_option(): 761f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc """Ensure that category option properties work.""" 771f1988fe75f27548459cabee2ea6162cbfd9add2Gregory Szorc tu = get_tu('int f(int i) { return 7; }', all_warnings=True) 78ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert len(tu.diagnostics) == 1 79ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser d = tu.diagnostics[0] 80ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser 81ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.option == '-Wunused-parameter' 82ea403825faa5b8780a9b44277e6a2c68d7849146Tobias Grosser assert d.disable_option == '-Wno-unused-parameter' 83