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