1*99451b44SJordan Rupprecht"""Test the integrity of the lldb public api directory containing SB*.h headers. 2*99451b44SJordan Rupprecht 3*99451b44SJordan RupprechtThere should be nothing unwanted there and a simpe main.cpp which includes SB*.h 4*99451b44SJordan Rupprechtshould compile and link with the LLDB framework.""" 5*99451b44SJordan Rupprecht 6*99451b44SJordan Rupprechtfrom __future__ import print_function 7*99451b44SJordan Rupprecht 8*99451b44SJordan Rupprecht 9*99451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 10*99451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 11*99451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 12*99451b44SJordan Rupprecht 13*99451b44SJordan Rupprecht 14*99451b44SJordan Rupprechtclass SBDirCheckerCase(TestBase): 15*99451b44SJordan Rupprecht NO_DEBUG_INFO_TESTCASE = True 16*99451b44SJordan Rupprecht 17*99451b44SJordan Rupprecht def setUp(self): 18*99451b44SJordan Rupprecht TestBase.setUp(self) 19*99451b44SJordan Rupprecht self.source = 'main.cpp' 20*99451b44SJordan Rupprecht self.generateSource(self.source) 21*99451b44SJordan Rupprecht 22*99451b44SJordan Rupprecht @skipIfNoSBHeaders 23*99451b44SJordan Rupprecht def test_sb_api_directory(self): 24*99451b44SJordan Rupprecht """Test the SB API directory and make sure there's no unwanted stuff.""" 25*99451b44SJordan Rupprecht 26*99451b44SJordan Rupprecht # Only proceed if this is an Apple OS, "x86_64", and local platform. 27*99451b44SJordan Rupprecht if not (self.platformIsDarwin() and self.getArchitecture() == "x86_64"): 28*99451b44SJordan Rupprecht self.skipTest("This test is only for LLDB.framework built 64-bit") 29*99451b44SJordan Rupprecht if self.getArchitecture() == "i386": 30*99451b44SJordan Rupprecht self.skipTest( 31*99451b44SJordan Rupprecht "LLDB is 64-bit and cannot be linked to 32-bit test program.") 32*99451b44SJordan Rupprecht 33*99451b44SJordan Rupprecht exe_name = self.getBuildArtifact("a.out") 34*99451b44SJordan Rupprecht self.buildDriver(self.source, exe_name) 35*99451b44SJordan Rupprecht self.sanity_check_executable(exe_name) 36*99451b44SJordan Rupprecht 37*99451b44SJordan Rupprecht def sanity_check_executable(self, exe_name): 38*99451b44SJordan Rupprecht """Sanity check executable compiled from the auto-generated program.""" 39*99451b44SJordan Rupprecht exe_name = self.getBuildArtifact("a.out") 40*99451b44SJordan Rupprecht exe = self.getBuildArtifact(exe_name) 41*99451b44SJordan Rupprecht self.runCmd("file %s" % exe, CURRENT_EXECUTABLE_SET) 42*99451b44SJordan Rupprecht 43*99451b44SJordan Rupprecht # This test uses a generated source file, so it's in the build directory. 44*99451b44SJordan Rupprecht self.line_to_break = line_number( 45*99451b44SJordan Rupprecht self.getBuildArtifact(self.source), '// Set breakpoint here.') 46*99451b44SJordan Rupprecht 47*99451b44SJordan Rupprecht env_cmd = "settings set target.env-vars %s=%s" % ( 48*99451b44SJordan Rupprecht self.dylibPath, self.getLLDBLibraryEnvVal()) 49*99451b44SJordan Rupprecht if self.TraceOn(): 50*99451b44SJordan Rupprecht print("Set environment to: ", env_cmd) 51*99451b44SJordan Rupprecht self.runCmd(env_cmd) 52*99451b44SJordan Rupprecht self.addTearDownHook( 53*99451b44SJordan Rupprecht lambda: self.dbg.HandleCommand( 54*99451b44SJordan Rupprecht "settings remove target.env-vars %s" % 55*99451b44SJordan Rupprecht self.dylibPath)) 56*99451b44SJordan Rupprecht 57*99451b44SJordan Rupprecht lldbutil.run_break_set_by_file_and_line( 58*99451b44SJordan Rupprecht self, self.source, self.line_to_break, num_expected_locations=-1) 59*99451b44SJordan Rupprecht 60*99451b44SJordan Rupprecht self.runCmd("run", RUN_SUCCEEDED) 61*99451b44SJordan Rupprecht 62*99451b44SJordan Rupprecht # The stop reason of the thread should be breakpoint. 63*99451b44SJordan Rupprecht self.expect("thread list", STOPPED_DUE_TO_BREAKPOINT, 64*99451b44SJordan Rupprecht substrs=['stopped', 65*99451b44SJordan Rupprecht 'stop reason = breakpoint']) 66*99451b44SJordan Rupprecht 67*99451b44SJordan Rupprecht self.runCmd('frame variable') 68