""" Test the lldb platform Python API. """ import lldb from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test import lldbutil class PlatformPythonTestCase(TestBase): mydir = TestBase.compute_mydir(__file__) @add_test_categories(['pyapi']) @no_debug_info_test def test_platform_list(self): """Test SBDebugger::GetNumPlatforms() & GetPlatformAtIndex() API""" # Verify the host platform is present by default. initial_num_platforms = self.dbg.GetNumPlatforms() self.assertGreater(initial_num_platforms, 0) host_platform = self.dbg.GetPlatformAtIndex(0) self.assertTrue(host_platform.IsValid() and host_platform.GetName() == 'host', 'The host platform is present') # Select another platform and verify that the platform is added to # the platform list. platform_idx = self.dbg.GetNumAvailablePlatforms() - 1 if platform_idx < 1: self.fail('No platforms other than host are available') platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(platform_idx) platform_name = platform_data.GetValueForKey('name').GetStringValue(100) self.assertNotEqual(platform_name, 'host') self.dbg.SetCurrentPlatform(platform_name) selected_platform = self.dbg.GetSelectedPlatform() self.assertTrue(selected_platform.IsValid()) self.assertEqual(selected_platform.GetName(), platform_name) self.assertEqual(self.dbg.GetNumPlatforms(), initial_num_platforms + 1) platform_found = False for platform_idx in range(self.dbg.GetNumPlatforms()): platform = self.dbg.GetPlatformAtIndex(platform_idx) if platform.GetName() == platform_name: platform_found = True break self.assertTrue(platform_found) @add_test_categories(['pyapi']) @no_debug_info_test def test_host_is_connected(self): # We've already tested that this one IS the host platform. host_platform = self.dbg.GetPlatformAtIndex(0) self.assertTrue(host_platform.IsConnected(), "The host platform is always connected") @add_test_categories(['pyapi']) @no_debug_info_test def test_available_platform_list(self): """Test SBDebugger::GetNumAvailablePlatforms() and GetAvailablePlatformInfoAtIndex() API""" num_platforms = self.dbg.GetNumAvailablePlatforms() self.assertGreater( num_platforms, 0, 'There should be at least one platform available') for i in range(num_platforms): platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(i) name_data = platform_data.GetValueForKey('name') desc_data = platform_data.GetValueForKey('description') self.assertTrue( name_data and name_data.IsValid(), 'Platform has a name') self.assertEqual( name_data.GetType(), lldb.eStructuredDataTypeString, 'Platform name is a string') self.assertTrue( desc_data and desc_data.IsValid(), 'Platform has a description') self.assertEqual( desc_data.GetType(), lldb.eStructuredDataTypeString, 'Platform description is a string') @add_test_categories(['pyapi']) @no_debug_info_test def test_shell_interpreter(self): """ Test a shell with a custom interpreter """ platform = self.dbg.GetSelectedPlatform() self.assertTrue(platform.IsValid()) sh_cmd = lldb.SBPlatformShellCommand('/bin/zsh', 'echo $0') self.assertIn('/bin/zsh', sh_cmd.GetShell()) self.assertIn('echo $0', sh_cmd.GetCommand()) self.build() sh_cmd.SetShell(self.getBuildArtifact('a.out')) err = platform.Run(sh_cmd) self.assertTrue(err.Success()) self.assertIn("SUCCESS", sh_cmd.GetOutput())