""" 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): @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 @skipIfRemote 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.assertSuccess(err) self.assertIn("SUCCESS", sh_cmd.GetOutput())