blob: cdd97fc2df0dc165e84982c020a85aa1630ca2f2 [file] [log] [blame]
Michal Gornyc37d1612018-10-11 11:58:07 +00001import os
2from clang.cindex import Config
3if 'CLANG_LIBRARY_PATH' in os.environ:
4 Config.set_library_path(os.environ['CLANG_LIBRARY_PATH'])
5
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +00006from 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
Michal Gorny084e43b2017-11-10 16:44:12 +000013import unittest
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000014
Michal Gorny084e43b2017-11-10 16:44:12 +000015
16class TestLinkage(unittest.TestCase):
17 def test_linkage(self):
18 """Ensure that linkage specifers are available on cursors"""
19
20 tu = get_tu("""
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000021void foo() { int no_linkage; }
22static int internal;
Michal Gorny34954402017-11-11 20:01:41 +000023namespace { struct unique_external_type {} }
24unique_external_type unique_external;
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000025extern int external;
26""", lang = 'cpp')
27
Michal Gorny084e43b2017-11-10 16:44:12 +000028 no_linkage = get_cursor(tu.cursor, 'no_linkage')
29 self.assertEqual(no_linkage.linkage, LinkageKind.NO_LINKAGE)
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000030
Michal Gorny084e43b2017-11-10 16:44:12 +000031 internal = get_cursor(tu.cursor, 'internal')
32 self.assertEqual(internal.linkage, LinkageKind.INTERNAL)
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000033
Michal Gorny084e43b2017-11-10 16:44:12 +000034 unique_external = get_cursor(tu.cursor, 'unique_external')
35 self.assertEqual(unique_external.linkage, LinkageKind.UNIQUE_EXTERNAL)
Saleem Abdulrasool25eb54f2017-09-22 18:35:09 +000036
Michal Gorny084e43b2017-11-10 16:44:12 +000037 external = get_cursor(tu.cursor, 'external')
38 self.assertEqual(external.linkage, LinkageKind.EXTERNAL)