| """ | |
| 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()) |