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    mydir = TestBase.compute_mydir(__file__)
16
17    def build(self):
18        include = self.getBuildArtifact('include')
19        lldbutil.mkdir_p(include)
20        for f in ['Foo.h', 'Bar.h', 'module.modulemap']:
21            shutil.copyfile(self.getSourcePath(os.path.join('Inputs', f)),
22                            os.path.join(include, f))
23        super(CXXModulesImportTestCase, self).build()
24
25    @skipUnlessDarwin
26    @skipIf(macos_version=["<", "10.12"])
27    @skipIf(compiler="clang", compiler_version=['<', '14.0'])
28    def test_expr(self):
29        self.build()
30        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
31            self, 'break here', lldb.SBFileSpec('main.cpp'))
32
33        self.expect("expr -l Objective-C++ -- @import Bar")
34        self.expect("expr -- Bar()", substrs = ["success"])
35        self.expect("expr -l Objective-C++ -- @import THIS_MODULE_DOES_NOT_EXIST",
36                    error=True)
37
38    @skipUnlessDarwin
39    @skipIf(macos_version=["<", "10.12"])
40    @skipIf(compiler="clang", compiler_version=['<', '14.0'])
41    def test_expr_failing_import(self):
42        self.build()
43        shutil.rmtree(self.getBuildArtifact('include'))
44        target, process, thread, bkpt = lldbutil.run_to_source_breakpoint(
45            self, 'break here', lldb.SBFileSpec('main.cpp'))
46
47        self.expect("expr -l Objective-C++ -- @import Bar", error=True)
48