xref: /llvm-project/lldb/test/API/api/check_public_api_headers/TestPublicAPIHeaders.py (revision 0da0966da4b813386a85cf70ae0d0efc7cb2eaea)
199451b44SJordan Rupprecht"""Test the integrity of the lldb public api directory containing SB*.h headers.
299451b44SJordan Rupprecht
399451b44SJordan RupprechtThere should be nothing unwanted there and a simpe main.cpp which includes SB*.h
499451b44SJordan Rupprechtshould compile and link with the LLDB framework."""
599451b44SJordan Rupprecht
699451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
799451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
899451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
999451b44SJordan Rupprecht
1099451b44SJordan Rupprecht
118be41c78SJordan Rupprecht@skipIfNoSBHeaders
12b1e9baeaSAlex Langford@skipIfRemote
13b1e9baeaSAlex Langford@skipUnlessDarwin
1499451b44SJordan Rupprechtclass SBDirCheckerCase(TestBase):
1599451b44SJordan Rupprecht    NO_DEBUG_INFO_TESTCASE = True
1699451b44SJordan Rupprecht
1799451b44SJordan Rupprecht    def setUp(self):
1899451b44SJordan Rupprecht        TestBase.setUp(self)
19*2238dcc3SJonas Devlieghere        self.source = "main.cpp"
2099451b44SJordan Rupprecht        self.generateSource(self.source)
2199451b44SJordan Rupprecht
2299451b44SJordan Rupprecht    def test_sb_api_directory(self):
2399451b44SJordan Rupprecht        """Test the SB API directory and make sure there's no unwanted stuff."""
2499451b44SJordan Rupprecht
25b1e9baeaSAlex Langford        if not self.isAArch64() and self.getArchitecture() != "x86_64":
2699451b44SJordan Rupprecht            self.skipTest("This test is only for LLDB.framework built 64-bit")
2799451b44SJordan Rupprecht
2899451b44SJordan Rupprecht        exe_name = self.getBuildArtifact("a.out")
2999451b44SJordan Rupprecht        self.buildDriver(self.source, exe_name)
3099451b44SJordan Rupprecht        self.sanity_check_executable(exe_name)
3199451b44SJordan Rupprecht
3299451b44SJordan Rupprecht    def sanity_check_executable(self, exe_name):
3399451b44SJordan Rupprecht        """Sanity check executable compiled from the auto-generated program."""
3499451b44SJordan Rupprecht        exe = self.getBuildArtifact(exe_name)
3599451b44SJordan Rupprecht        self.runCmd("file %s" % exe, CURRENT_EXECUTABLE_SET)
3699451b44SJordan Rupprecht
3799451b44SJordan Rupprecht        # This test uses a generated source file, so it's in the build directory.
3899451b44SJordan Rupprecht        self.line_to_break = line_number(
39*2238dcc3SJonas Devlieghere            self.getBuildArtifact(self.source), "// Set breakpoint here."
40*2238dcc3SJonas Devlieghere        )
4199451b44SJordan Rupprecht
4299451b44SJordan Rupprecht        lldbutil.run_break_set_by_file_and_line(
43*2238dcc3SJonas Devlieghere            self, self.source, self.line_to_break, num_expected_locations=-1
44*2238dcc3SJonas Devlieghere        )
4599451b44SJordan Rupprecht
4699451b44SJordan Rupprecht        self.runCmd("run", RUN_SUCCEEDED)
4799451b44SJordan Rupprecht
4899451b44SJordan Rupprecht        # The stop reason of the thread should be breakpoint.
49*2238dcc3SJonas Devlieghere        self.expect(
50*2238dcc3SJonas Devlieghere            "thread list",
51*2238dcc3SJonas Devlieghere            STOPPED_DUE_TO_BREAKPOINT,
52*2238dcc3SJonas Devlieghere            substrs=["stopped", "stop reason = breakpoint"],
53*2238dcc3SJonas Devlieghere        )
5499451b44SJordan Rupprecht
55*2238dcc3SJonas Devlieghere        self.runCmd("frame variable")
56