199451b44SJordan Rupprecht"""
299451b44SJordan RupprechtTest the lldb platform Python API.
399451b44SJordan Rupprecht"""
499451b44SJordan Rupprecht
599451b44SJordan Rupprecht
699451b44SJordan Rupprecht
799451b44SJordan Rupprechtimport lldb
899451b44SJordan Rupprechtfrom lldbsuite.test.decorators import *
999451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import *
1099451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil
1199451b44SJordan Rupprecht
1299451b44SJordan Rupprecht
1399451b44SJordan Rupprechtclass PlatformPythonTestCase(TestBase):
1499451b44SJordan Rupprecht
1599451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
1699451b44SJordan Rupprecht    @no_debug_info_test
1799451b44SJordan Rupprecht    def test_platform_list(self):
1899451b44SJordan Rupprecht        """Test SBDebugger::GetNumPlatforms() & GetPlatformAtIndex() API"""
1999451b44SJordan Rupprecht        # Verify the host platform is present by default.
2099451b44SJordan Rupprecht        initial_num_platforms = self.dbg.GetNumPlatforms()
2199451b44SJordan Rupprecht        self.assertGreater(initial_num_platforms, 0)
2299451b44SJordan Rupprecht        host_platform = self.dbg.GetPlatformAtIndex(0)
2399451b44SJordan Rupprecht        self.assertTrue(host_platform.IsValid() and
2499451b44SJordan Rupprecht                        host_platform.GetName() == 'host',
2599451b44SJordan Rupprecht                        'The host platform is present')
2699451b44SJordan Rupprecht        # Select another platform and verify that the platform is added to
2799451b44SJordan Rupprecht        # the platform list.
2899451b44SJordan Rupprecht        platform_idx = self.dbg.GetNumAvailablePlatforms() - 1
2999451b44SJordan Rupprecht        if platform_idx < 1:
3099451b44SJordan Rupprecht            self.fail('No platforms other than host are available')
3199451b44SJordan Rupprecht        platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(platform_idx)
3299451b44SJordan Rupprecht        platform_name = platform_data.GetValueForKey('name').GetStringValue(100)
3399451b44SJordan Rupprecht        self.assertNotEqual(platform_name, 'host')
3499451b44SJordan Rupprecht        self.dbg.SetCurrentPlatform(platform_name)
3599451b44SJordan Rupprecht        selected_platform = self.dbg.GetSelectedPlatform()
3699451b44SJordan Rupprecht        self.assertTrue(selected_platform.IsValid())
3799451b44SJordan Rupprecht        self.assertEqual(selected_platform.GetName(), platform_name)
3899451b44SJordan Rupprecht        self.assertEqual(self.dbg.GetNumPlatforms(), initial_num_platforms + 1)
3999451b44SJordan Rupprecht        platform_found = False
4099451b44SJordan Rupprecht        for platform_idx in range(self.dbg.GetNumPlatforms()):
4199451b44SJordan Rupprecht            platform = self.dbg.GetPlatformAtIndex(platform_idx)
4299451b44SJordan Rupprecht            if platform.GetName() == platform_name:
4399451b44SJordan Rupprecht                platform_found = True
4499451b44SJordan Rupprecht                break
4599451b44SJordan Rupprecht        self.assertTrue(platform_found)
4699451b44SJordan Rupprecht
4799451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
4899451b44SJordan Rupprecht    @no_debug_info_test
4999451b44SJordan Rupprecht    def test_host_is_connected(self):
5099451b44SJordan Rupprecht        # We've already tested that this one IS the host platform.
5199451b44SJordan Rupprecht        host_platform = self.dbg.GetPlatformAtIndex(0)
5299451b44SJordan Rupprecht        self.assertTrue(host_platform.IsConnected(), "The host platform is always connected")
5399451b44SJordan Rupprecht
5499451b44SJordan Rupprecht
5599451b44SJordan Rupprecht    @add_test_categories(['pyapi'])
5699451b44SJordan Rupprecht    @no_debug_info_test
5799451b44SJordan Rupprecht    def test_available_platform_list(self):
5899451b44SJordan Rupprecht        """Test SBDebugger::GetNumAvailablePlatforms() and GetAvailablePlatformInfoAtIndex() API"""
5999451b44SJordan Rupprecht        num_platforms = self.dbg.GetNumAvailablePlatforms()
6099451b44SJordan Rupprecht        self.assertGreater(
6199451b44SJordan Rupprecht            num_platforms, 0,
6299451b44SJordan Rupprecht            'There should be at least one platform available')
6399451b44SJordan Rupprecht
6499451b44SJordan Rupprecht        for i in range(num_platforms):
6599451b44SJordan Rupprecht            platform_data = self.dbg.GetAvailablePlatformInfoAtIndex(i)
6699451b44SJordan Rupprecht            name_data = platform_data.GetValueForKey('name')
6799451b44SJordan Rupprecht            desc_data = platform_data.GetValueForKey('description')
6899451b44SJordan Rupprecht            self.assertTrue(
6999451b44SJordan Rupprecht                name_data and name_data.IsValid(),
7099451b44SJordan Rupprecht                'Platform has a name')
7199451b44SJordan Rupprecht            self.assertEqual(
7299451b44SJordan Rupprecht                name_data.GetType(), lldb.eStructuredDataTypeString,
7399451b44SJordan Rupprecht                'Platform name is a string')
7499451b44SJordan Rupprecht            self.assertTrue(
7599451b44SJordan Rupprecht                desc_data and desc_data.IsValid(),
7699451b44SJordan Rupprecht                'Platform has a description')
7799451b44SJordan Rupprecht            self.assertEqual(
7899451b44SJordan Rupprecht                desc_data.GetType(), lldb.eStructuredDataTypeString,
7999451b44SJordan Rupprecht                'Platform description is a string')
80addb5148SMed Ismail Bennani
81addb5148SMed Ismail Bennani    @add_test_categories(['pyapi'])
82addb5148SMed Ismail Bennani    @no_debug_info_test
83*66b829acSJonas Devlieghere    @skipIfRemote
84addb5148SMed Ismail Bennani    def test_shell_interpreter(self):
85addb5148SMed Ismail Bennani        """ Test a shell with a custom interpreter """
86addb5148SMed Ismail Bennani        platform = self.dbg.GetSelectedPlatform()
87addb5148SMed Ismail Bennani        self.assertTrue(platform.IsValid())
88addb5148SMed Ismail Bennani
89addb5148SMed Ismail Bennani        sh_cmd = lldb.SBPlatformShellCommand('/bin/zsh', 'echo $0')
90addb5148SMed Ismail Bennani        self.assertIn('/bin/zsh', sh_cmd.GetShell())
91addb5148SMed Ismail Bennani        self.assertIn('echo $0', sh_cmd.GetCommand())
92addb5148SMed Ismail Bennani
93addb5148SMed Ismail Bennani        self.build()
94addb5148SMed Ismail Bennani        sh_cmd.SetShell(self.getBuildArtifact('a.out'))
95addb5148SMed Ismail Bennani        err = platform.Run(sh_cmd)
96779bbbf2SDave Lee        self.assertSuccess(err)
97addb5148SMed Ismail Bennani        self.assertIn("SUCCESS", sh_cmd.GetOutput())
98