1*99451b44SJordan Rupprechtimport lldb
2*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
3*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
4*99451b44SJordan Rupprecht
5*99451b44SJordan Rupprecht
6*99451b44SJordan Rupprechtclass TestTargetSourceMap(TestBase):
7*99451b44SJordan Rupprecht
8*99451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
9*99451b44SJordan Rupprecht
10*99451b44SJordan Rupprecht    @no_debug_info_test
11*99451b44SJordan Rupprecht    def test_source_map(self):
12*99451b44SJordan Rupprecht        """Test target.source-map' functionality."""
13*99451b44SJordan Rupprecht        # Set the target soure map to map "./" to the current test directory
14*99451b44SJordan Rupprecht        src_dir = self.getSourceDir()
15*99451b44SJordan Rupprecht        src_path = os.path.join(src_dir, "main.c")
16*99451b44SJordan Rupprecht        yaml_path = os.path.join(src_dir, "a.yaml")
17*99451b44SJordan Rupprecht        yaml_base, ext = os.path.splitext(yaml_path)
18*99451b44SJordan Rupprecht        obj_path = self.getBuildArtifact("main.o")
19*99451b44SJordan Rupprecht        self.yaml2obj(yaml_path, obj_path)
20*99451b44SJordan Rupprecht
21*99451b44SJordan Rupprecht        # Create a target with the object file we just created from YAML
22*99451b44SJordan Rupprecht        target = self.dbg.CreateTarget(obj_path)
23*99451b44SJordan Rupprecht
24*99451b44SJordan Rupprecht        # Set a breakpoint before we remap source and verify that it fails
25*99451b44SJordan Rupprecht        bp = target.BreakpointCreateByLocation(src_path, 2)
26*99451b44SJordan Rupprecht        self.assertTrue(bp.GetNumLocations() == 0,
27*99451b44SJordan Rupprecht                        "make sure no breakpoints were resolved without map")
28*99451b44SJordan Rupprecht        src_map_cmd = 'settings set target.source-map . "%s"' % (src_dir)
29*99451b44SJordan Rupprecht        self.dbg.HandleCommand(src_map_cmd)
30*99451b44SJordan Rupprecht
31*99451b44SJordan Rupprecht        # Set a breakpoint after we remap source and verify that it succeeds
32*99451b44SJordan Rupprecht        bp = target.BreakpointCreateByLocation(src_path, 2)
33*99451b44SJordan Rupprecht        self.assertTrue(bp.GetNumLocations() == 1,
34*99451b44SJordan Rupprecht                        "make sure breakpoint was resolved with map")
35*99451b44SJordan Rupprecht
36*99451b44SJordan Rupprecht        # Now make sure that we can actually FIND the source file using this
37*99451b44SJordan Rupprecht        # remapping:
38*99451b44SJordan Rupprecht        retval = lldb.SBCommandReturnObject()
39*99451b44SJordan Rupprecht        self.dbg.GetCommandInterpreter().HandleCommand("source list -f main.c -l 2", retval)
40*99451b44SJordan Rupprecht        self.assertTrue(retval.Succeeded(), "source list didn't succeed.")
41*99451b44SJordan Rupprecht        self.assertTrue(retval.GetOutput() != None, "We got no ouput from source list")
42*99451b44SJordan Rupprecht        self.assertTrue("return" in retval.GetOutput(), "We didn't find the source file...")
43*99451b44SJordan Rupprecht
44