1"""Test the SBPlatform APIs."""
2
3from lldbsuite.test.decorators import *
4from lldbsuite.test.lldbtest import *
5
6class SBPlatformAPICase(TestBase):
7    NO_DEBUG_INFO_TESTCASE = True
8
9    @skipIfRemote # Remote environment not supported.
10    def test_run(self):
11        self.build()
12        plat = lldb.SBPlatform.GetHostPlatform()
13
14        os.environ["MY_TEST_ENV_VAR"]="SBPlatformAPICase.test_run"
15        def cleanup():
16            del os.environ["MY_TEST_ENV_VAR"]
17        self.addTearDownHook(cleanup)
18        cmd = lldb.SBPlatformShellCommand(self.getBuildArtifact("a.out"))
19        self.assertSuccess(plat.Run(cmd))
20        self.assertIn("MY_TEST_ENV_VAR=SBPlatformAPICase.test_run", cmd.GetOutput())
21
22    def test_SetSDKRoot(self):
23        plat = lldb.SBPlatform("remote-linux") # arbitrary choice
24        self.assertTrue(plat)
25        plat.SetSDKRoot(self.getBuildDir())
26        self.dbg.SetSelectedPlatform(plat)
27        self.expect("platform status",
28                substrs=["Sysroot:", self.getBuildDir()])
29
30    def test_SetCurrentPlatform_floating(self):
31        # floating platforms cannot be referenced by name until they are
32        # associated with a debugger
33        floating_platform = lldb.SBPlatform("remote-netbsd")
34        floating_platform.SetWorkingDirectory(self.getBuildDir())
35        self.assertSuccess(self.dbg.SetCurrentPlatform("remote-netbsd"))
36        dbg_platform = self.dbg.GetSelectedPlatform()
37        self.assertEqual(dbg_platform.GetName(), "remote-netbsd")
38        self.assertIsNone(dbg_platform.GetWorkingDirectory())
39
40    def test_SetCurrentPlatform_associated(self):
41        # associated platforms are found by name-based lookup
42        floating_platform = lldb.SBPlatform("remote-netbsd")
43        floating_platform.SetWorkingDirectory(self.getBuildDir())
44        orig_platform = self.dbg.GetSelectedPlatform()
45
46        self.dbg.SetSelectedPlatform(floating_platform)
47        self.dbg.SetSelectedPlatform(orig_platform)
48        self.assertSuccess(self.dbg.SetCurrentPlatform("remote-netbsd"))
49        dbg_platform = self.dbg.GetSelectedPlatform()
50        self.assertEqual(dbg_platform.GetName(), "remote-netbsd")
51        self.assertEqual(dbg_platform.GetWorkingDirectory(), self.getBuildDir())
52