xref: /llvm-project/lldb/test/API/tools/lldb-dap/stackTrace/subtleFrames/TestDAP_subtleFrames.py (revision 9e9e8238df63b9f10c6635d3f16d8a0fbc7f00c4)
1*9e9e8238SAdrian Prantl"""
2*9e9e8238SAdrian PrantlTest lldb-dap stack trace response
3*9e9e8238SAdrian Prantl"""
4*9e9e8238SAdrian Prantl
5*9e9e8238SAdrian Prantl
6*9e9e8238SAdrian Prantlimport dap_server
7*9e9e8238SAdrian Prantlfrom lldbsuite.test.decorators import *
8*9e9e8238SAdrian Prantl
9*9e9e8238SAdrian Prantlimport lldbdap_testcase
10*9e9e8238SAdrian Prantlfrom lldbsuite.test.lldbtest import *
11*9e9e8238SAdrian Prantl
12*9e9e8238SAdrian Prantl
13*9e9e8238SAdrian Prantlclass TestDAP_subtleFrames(lldbdap_testcase.DAPTestCaseBase):
14*9e9e8238SAdrian Prantl    @add_test_categories(["libc++"])
15*9e9e8238SAdrian Prantl    def test_subtleFrames(self):
16*9e9e8238SAdrian Prantl        """
17*9e9e8238SAdrian Prantl        Internal stack frames (such as the ones used by `std::function`) are marked as "subtle".
18*9e9e8238SAdrian Prantl        """
19*9e9e8238SAdrian Prantl        program = self.getBuildArtifact("a.out")
20*9e9e8238SAdrian Prantl        self.build_and_launch(program)
21*9e9e8238SAdrian Prantl        source = "main.cpp"
22*9e9e8238SAdrian Prantl        self.set_source_breakpoints(source, [line_number(source, "BREAK HERE")])
23*9e9e8238SAdrian Prantl        self.continue_to_next_stop()
24*9e9e8238SAdrian Prantl
25*9e9e8238SAdrian Prantl        frames = self.get_stackFrames()
26*9e9e8238SAdrian Prantl        for f in frames:
27*9e9e8238SAdrian Prantl            if "__function" in f["name"]:
28*9e9e8238SAdrian Prantl                self.assertEqual(f["presentationHint"], "subtle")
29*9e9e8238SAdrian Prantl        self.assertTrue(any(f.get("presentationHint") == "subtle" for f in frames))
30