1*e5dd7070Spatrickimport os 2*e5dd7070Spatrickfrom clang.cindex import Config 3*e5dd7070Spatrickif 'CLANG_LIBRARY_PATH' in os.environ: 4*e5dd7070Spatrick Config.set_library_path(os.environ['CLANG_LIBRARY_PATH']) 5*e5dd7070Spatrick 6*e5dd7070Spatrickfrom clang.cindex import LinkageKind 7*e5dd7070Spatrickfrom clang.cindex import Cursor 8*e5dd7070Spatrickfrom clang.cindex import TranslationUnit 9*e5dd7070Spatrick 10*e5dd7070Spatrickfrom .util import get_cursor 11*e5dd7070Spatrickfrom .util import get_tu 12*e5dd7070Spatrick 13*e5dd7070Spatrickimport unittest 14*e5dd7070Spatrick 15*e5dd7070Spatrick 16*e5dd7070Spatrickclass TestLinkage(unittest.TestCase): 17*e5dd7070Spatrick def test_linkage(self): 18*e5dd7070Spatrick """Ensure that linkage specifers are available on cursors""" 19*e5dd7070Spatrick 20*e5dd7070Spatrick tu = get_tu(""" 21*e5dd7070Spatrickvoid foo() { int no_linkage; } 22*e5dd7070Spatrickstatic int internal; 23*e5dd7070Spatricknamespace { struct unique_external_type {} } 24*e5dd7070Spatrickunique_external_type unique_external; 25*e5dd7070Spatrickextern int external; 26*e5dd7070Spatrick""", lang = 'cpp') 27*e5dd7070Spatrick 28*e5dd7070Spatrick no_linkage = get_cursor(tu.cursor, 'no_linkage') 29*e5dd7070Spatrick self.assertEqual(no_linkage.linkage, LinkageKind.NO_LINKAGE) 30*e5dd7070Spatrick 31*e5dd7070Spatrick internal = get_cursor(tu.cursor, 'internal') 32*e5dd7070Spatrick self.assertEqual(internal.linkage, LinkageKind.INTERNAL) 33*e5dd7070Spatrick 34*e5dd7070Spatrick unique_external = get_cursor(tu.cursor, 'unique_external') 35*e5dd7070Spatrick self.assertEqual(unique_external.linkage, LinkageKind.UNIQUE_EXTERNAL) 36*e5dd7070Spatrick 37*e5dd7070Spatrick external = get_cursor(tu.cursor, 'external') 38*e5dd7070Spatrick self.assertEqual(external.linkage, LinkageKind.EXTERNAL) 39