199451b44SJordan Rupprechtimport lldb
299451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
399451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtclass TestTargetSourceMap(TestBase):
799451b44SJordan Rupprecht
899451b44SJordan Rupprecht    mydir = TestBase.compute_mydir(__file__)
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht    @no_debug_info_test
1199451b44SJordan Rupprecht    def test_source_map(self):
1299451b44SJordan Rupprecht        """Test target.source-map' functionality."""
1399451b44SJordan Rupprecht        # Set the target soure map to map "./" to the current test directory
1499451b44SJordan Rupprecht        src_dir = self.getSourceDir()
1599451b44SJordan Rupprecht        src_path = os.path.join(src_dir, "main.c")
1699451b44SJordan Rupprecht        yaml_path = os.path.join(src_dir, "a.yaml")
1799451b44SJordan Rupprecht        yaml_base, ext = os.path.splitext(yaml_path)
1899451b44SJordan Rupprecht        obj_path = self.getBuildArtifact("main.o")
1999451b44SJordan Rupprecht        self.yaml2obj(yaml_path, obj_path)
2099451b44SJordan Rupprecht
2199451b44SJordan Rupprecht        # Create a target with the object file we just created from YAML
2299451b44SJordan Rupprecht        target = self.dbg.CreateTarget(obj_path)
2399451b44SJordan Rupprecht
2499451b44SJordan Rupprecht        # Set a breakpoint before we remap source and verify that it fails
2599451b44SJordan Rupprecht        bp = target.BreakpointCreateByLocation(src_path, 2)
26*b3a0c4d7SRaphael Isemann        self.assertEquals(bp.GetNumLocations(), 0,
2799451b44SJordan Rupprecht                        "make sure no breakpoints were resolved without map")
2899451b44SJordan Rupprecht        src_map_cmd = 'settings set target.source-map . "%s"' % (src_dir)
2999451b44SJordan Rupprecht        self.dbg.HandleCommand(src_map_cmd)
3099451b44SJordan Rupprecht
3199451b44SJordan Rupprecht        # Set a breakpoint after we remap source and verify that it succeeds
3299451b44SJordan Rupprecht        bp = target.BreakpointCreateByLocation(src_path, 2)
33*b3a0c4d7SRaphael Isemann        self.assertEquals(bp.GetNumLocations(), 1,
3499451b44SJordan Rupprecht                        "make sure breakpoint was resolved with map")
3599451b44SJordan Rupprecht
3699451b44SJordan Rupprecht        # Now make sure that we can actually FIND the source file using this
3799451b44SJordan Rupprecht        # remapping:
3899451b44SJordan Rupprecht        retval = lldb.SBCommandReturnObject()
3999451b44SJordan Rupprecht        self.dbg.GetCommandInterpreter().HandleCommand("source list -f main.c -l 2", retval)
4099451b44SJordan Rupprecht        self.assertTrue(retval.Succeeded(), "source list didn't succeed.")
41*b3a0c4d7SRaphael Isemann        self.assertNotEqual(retval.GetOutput(), None, "We got no ouput from source list")
4299451b44SJordan Rupprecht        self.assertTrue("return" in retval.GetOutput(), "We didn't find the source file...")
4399451b44SJordan Rupprecht
44