""" Test lldb-dap setBreakpoints request """ from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil import lldbdap_testcase class TestDAP_threads(lldbdap_testcase.DAPTestCaseBase): @skipIfWindows def test_correct_thread(self): """ Tests that the correct thread is selected if we continue from a thread that goes away and hit a breakpoint in another thread. In this case, the selected thread should be the thread that just hit the breakpoint, and not the first thread in the list. """ program = self.getBuildArtifact("a.out") self.build_and_launch(program) source = "main.c" breakpoint_line = line_number(source, "// break here") lines = [breakpoint_line] # Set breakpoint in the thread function breakpoint_ids = self.set_source_breakpoints(source, lines) self.assertEqual( len(breakpoint_ids), len(lines), "expect correct number of breakpoints" ) self.continue_to_breakpoints(breakpoint_ids) # We're now stopped at the breakpoint in the first thread, thread #2. # Continue to join the first thread and hit the breakpoint in the # second thread, thread #3. self.dap_server.request_continue() stopped_event = self.dap_server.wait_for_stopped() # Verify that the description is the relevant breakpoint, # preserveFocusHint is False and threadCausedFocus is True self.assertTrue( stopped_event[0]["body"]["description"].startswith( "breakpoint %s." % breakpoint_ids[0] ) ) self.assertFalse(stopped_event[0]["body"]["preserveFocusHint"]) self.assertTrue(stopped_event[0]["body"]["threadCausedFocus"]) @skipIfWindows def test_thread_format(self): """ Tests the support for custom thread formats. """ program = self.getBuildArtifact("a.out") self.build_and_launch( program, customThreadFormat="This is thread index #${thread.index}" ) source = "main.c" breakpoint_line = line_number(source, "// break here") lines = [breakpoint_line] # Set breakpoint in the thread function breakpoint_ids = self.set_source_breakpoints(source, lines) self.assertEqual( len(breakpoint_ids), len(lines), "expect correct number of breakpoints" ) self.continue_to_breakpoints(breakpoint_ids) # We are stopped at the second thread threads = self.dap_server.get_threads() self.assertEqual(threads[0]["name"], "This is thread index #1") self.assertEqual(threads[1]["name"], "This is thread index #2")