xref: /openbsd-src/gnu/llvm/clang/bindings/python/tests/cindex/test_linkage.py (revision e5dd70708596ae51455a0ffa086a00c5b29f8583)
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