100 lines · python
1"""2Test the lldb platform Python API.3"""4 5 6import lldb7from lldbsuite.test.decorators import *8from lldbsuite.test.lldbtest import *9from lldbsuite.test import lldbutil10 11 12class PlatformPythonTestCase(TestBase):13 @add_test_categories(["pyapi"])14 @no_debug_info_test15 def test_platform_list(self):16 """Test SBDebugger::GetNumPlatforms() & GetPlatformAtIndex() API"""17 # Verify the host platform is present by default.18 initial_num_platforms = self.dbg.GetNumPlatforms()19 self.assertGreater(initial_num_platforms, 0)20 host_platform = self.dbg.GetPlatformAtIndex(0)21 self.assertTrue(22 host_platform.IsValid() and host_platform.GetName() == "host",23 "The host platform is present",24 )25 # Select another platform and verify that the platform is added to26 # the platform list.27 platform_idx = self.dbg.GetNumAvailablePlatforms() - 128 if platform_idx < 1:29 self.fail("No platforms other than host are available")30 platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(platform_idx)31 platform_name = platform_data.GetValueForKey("name").GetStringValue(100)32 self.assertNotEqual(platform_name, "host")33 self.dbg.SetCurrentPlatform(platform_name)34 selected_platform = self.dbg.GetSelectedPlatform()35 self.assertTrue(selected_platform.IsValid())36 self.assertEqual(selected_platform.GetName(), platform_name)37 self.assertEqual(self.dbg.GetNumPlatforms(), initial_num_platforms + 1)38 platform_found = False39 for platform_idx in range(self.dbg.GetNumPlatforms()):40 platform = self.dbg.GetPlatformAtIndex(platform_idx)41 if platform.GetName() == platform_name:42 platform_found = True43 break44 self.assertTrue(platform_found)45 46 @add_test_categories(["pyapi"])47 @no_debug_info_test48 def test_host_is_connected(self):49 # We've already tested that this one IS the host platform.50 host_platform = self.dbg.GetPlatformAtIndex(0)51 self.assertTrue(52 host_platform.IsConnected(), "The host platform is always connected"53 )54 55 @add_test_categories(["pyapi"])56 @no_debug_info_test57 def test_available_platform_list(self):58 """Test SBDebugger::GetNumAvailablePlatforms() and GetAvailablePlatformInfoAtIndex() API"""59 num_platforms = self.dbg.GetNumAvailablePlatforms()60 self.assertGreater(61 num_platforms, 0, "There should be at least one platform available"62 )63 64 for i in range(num_platforms):65 platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(i)66 name_data = platform_data.GetValueForKey("name")67 desc_data = platform_data.GetValueForKey("description")68 self.assertTrue(name_data and name_data.IsValid(), "Platform has a name")69 self.assertEqual(70 name_data.GetType(),71 lldb.eStructuredDataTypeString,72 "Platform name is a string",73 )74 self.assertTrue(75 desc_data and desc_data.IsValid(), "Platform has a description"76 )77 self.assertEqual(78 desc_data.GetType(),79 lldb.eStructuredDataTypeString,80 "Platform description is a string",81 )82 83 @add_test_categories(["pyapi"])84 @no_debug_info_test85 @skipIfRemote86 def test_shell_interpreter(self):87 """Test a shell with a custom interpreter"""88 platform = self.dbg.GetSelectedPlatform()89 self.assertTrue(platform.IsValid())90 91 sh_cmd = lldb.SBPlatformShellCommand("/bin/zsh", "echo $0")92 self.assertIn("/bin/zsh", sh_cmd.GetShell())93 self.assertIn("echo $0", sh_cmd.GetCommand())94 95 self.build()96 sh_cmd.SetShell(self.getBuildArtifact("a.out"))97 err = platform.Run(sh_cmd)98 self.assertSuccess(err)99 self.assertIn("SUCCESS", sh_cmd.GetOutput())100