1"""Test that importing modules in C++ works as expected."""
2
3
4import unittest2
5import lldb
6import shutil
7
8from lldbsuite.test.decorators import *
9from lldbsuite.test.lldbtest import *
10from lldbsuite.test import lldbutil
11
12
13class CXXModulesImportTestCase(TestBase):
14
15    def build(self):
16        include = self.getBuildArtifact('include')
17        lldbutil.mkdir_p(include)
18        for f in ['Foo.h', 'Bar.h', 'module.modulemap']:
19            shutil.copyfile(self.getSourcePath(os.path.join('Inputs', f)),
20                            os.path.join(include, f))
21        super(CXXModulesImportTestCase, self).build()
22
23    @skipUnlessDarwin
24    @skipIf(macos_version=["<", "10.12"])
25    @skipIf(compiler="clang", compiler_version=['<', '14.0'])
26    def test_expr(self):
27        self.build()
28        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
29            self, 'break here', lldb.SBFileSpec('main.cpp'))
30
31        self.expect("expr -l Objective-C++ -- @import Bar")
32        self.expect("expr -- Bar()", substrs = ["success"])
33        self.expect("expr -l Objective-C++ -- @import THIS_MODULE_DOES_NOT_EXIST",
34                    error=True)
35
36    @skipUnlessDarwin
37    @skipIf(macos_version=["<", "10.12"])
38    @skipIf(compiler="clang", compiler_version=['<', '14.0'])
39    def test_expr_failing_import(self):
40        self.build()
41        shutil.rmtree(self.getBuildArtifact('include'))
42        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
43            self, 'break here', lldb.SBFileSpec('main.cpp'))
44
45        self.expect("expr -l Objective-C++ -- @import Bar", error=True)
46