36 lines
1.2 KiB
Python
36 lines
1.2 KiB
Python
import os
|
|
from clang.cindex import Config
|
|
if 'CLANG_LIBRARY_PATH' in os.environ:
|
|
Config.set_library_path(os.environ['CLANG_LIBRARY_PATH'])
|
|
|
|
import clang.cindex
|
|
from clang.cindex import ExceptionSpecificationKind
|
|
from .util import get_tu
|
|
|
|
import unittest
|
|
|
|
|
|
def find_function_declarations(node, declarations=[]):
|
|
if node.kind == clang.cindex.CursorKind.FUNCTION_DECL:
|
|
declarations.append((node.spelling, node.exception_specification_kind))
|
|
for child in node.get_children():
|
|
declarations = find_function_declarations(child, declarations)
|
|
return declarations
|
|
|
|
|
|
class TestExceptionSpecificationKind(unittest.TestCase):
|
|
def test_exception_specification_kind(self):
|
|
source = """int square1(int x);
|
|
int square2(int x) noexcept;
|
|
int square3(int x) noexcept(noexcept(x * x));"""
|
|
|
|
tu = get_tu(source, lang='cpp', flags=['-std=c++14'])
|
|
|
|
declarations = find_function_declarations(tu.cursor)
|
|
expected = [
|
|
('square1', ExceptionSpecificationKind.NONE),
|
|
('square2', ExceptionSpecificationKind.BASIC_NOEXCEPT),
|
|
('square3', ExceptionSpecificationKind.COMPUTED_NOEXCEPT)
|
|
]
|
|
self.assertListEqual(declarations, expected)
|