test_exception_specification_kind.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435
  1. import os
  2. from clang.cindex import Config
  3. if 'CLANG_LIBRARY_PATH' in os.environ:
  4. Config.set_library_path(os.environ['CLANG_LIBRARY_PATH'])
  5. import clang.cindex
  6. from clang.cindex import ExceptionSpecificationKind
  7. from .util import get_tu
  8. import unittest
  9. def find_function_declarations(node, declarations=[]):
  10. if node.kind == clang.cindex.CursorKind.FUNCTION_DECL:
  11. declarations.append((node.spelling, node.exception_specification_kind))
  12. for child in node.get_children():
  13. declarations = find_function_declarations(child, declarations)
  14. return declarations
  15. class TestExceptionSpecificationKind(unittest.TestCase):
  16. def test_exception_specification_kind(self):
  17. source = """int square1(int x);
  18. int square2(int x) noexcept;
  19. int square3(int x) noexcept(noexcept(x * x));"""
  20. tu = get_tu(source, lang='cpp', flags=['-std=c++14'])
  21. declarations = find_function_declarations(tu.cursor)
  22. expected = [
  23. ('square1', ExceptionSpecificationKind.NONE),
  24. ('square2', ExceptionSpecificationKind.BASIC_NOEXCEPT),
  25. ('square3', ExceptionSpecificationKind.COMPUTED_NOEXCEPT)
  26. ]
  27. self.assertListEqual(declarations, expected)