73 lines · python
1"""2Check that missing module source files are correctly handled by LLDB.3"""4 5from lldbsuite.test.decorators import *6from lldbsuite.test.lldbtest import *7from lldbsuite.test import lldbutil8import os9import shutil10 11 12class TestCase(TestBase):13 # We only emulate a fake libc++ in this test and don't use the real libc++,14 # but we still add the libc++ category so that this test is only run in15 # test configurations where libc++ is actually supposed to be tested.16 @add_test_categories(["libc++"])17 @skipIf(compiler=no_match("clang"))18 @skipIfRemote19 def test(self):20 # The path to our temporary target root that contains the temporary21 # module sources.22 target_sysroot = self.getBuildArtifact("root")23 24 # Copy the sources to the root.25 shutil.copytree(self.getSourcePath("root"), target_sysroot)26 # Build the binary with the copied sources.27 self.build()28 # Delete the copied sources so that they are now unavailable.29 shutil.rmtree(target_sysroot)30 31 # Set the sysroot where our dummy libc++ used to exist. Just to make32 # sure we don't find some existing headers on the system that could33 # XPASS this test.34 self.runCmd("platform select --sysroot '" + target_sysroot + "' host")35 36 lldbutil.run_to_source_breakpoint(37 self, "// Set break point at this line.", lldb.SBFileSpec("main.cpp")38 )39 40 # Import the std C++ module and run an expression.41 # As we deleted the sources, LLDB should refuse the load the module42 # and just print the normal error we get from the expression.43 self.runCmd("settings set target.import-std-module true")44 self.expect(45 "expr v.unknown_identifier",46 error=True,47 substrs=["no member named 'unknown_identifier'"],48 )49 # Check that there is no confusing error about failing to build the50 # module.51 self.expect(52 "expr v.unknown_identifier",53 error=True,54 matching=False,55 substrs=["could not build module 'std'"],56 )57 58 # Test the fallback mode. It should also just print the normal59 # error but not mention a failed module build.60 self.runCmd("settings set target.import-std-module fallback")61 62 self.expect(63 "expr v.unknown_identifier",64 error=True,65 substrs=["no member named 'unknown_identifier'"],66 )67 self.expect(68 "expr v.unknown_identifier",69 error=True,70 matching=False,71 substrs=["could not build module 'std'"],72 )73