| """ | |
| Test lldb command aliases. | |
| """ | |
| import unittest | |
| import os | |
| import lldb | |
| from lldbsuite.test.decorators import * | |
| from lldbsuite.test.lldbtest import * | |
| from lldbsuite.test import lldbutil | |
| class LaunchInTerminalTestCase(TestBase): | |
| # Darwin is the only platform that I know of that supports optionally launching | |
| # a program in a separate terminal window. It would be great if other platforms | |
| # added support for this. | |
| @skipUnlessDarwin | |
| # If the test is being run under sudo, the spawned terminal won't retain that elevated | |
| # privilege so it can't open the socket to talk back to the test case | |
| @unittest.skipIf( | |
| hasattr(os, "geteuid") and os.geteuid() == 0, "test cannot be run as root" | |
| ) | |
| # Do we need to disable this test if the testsuite is being run on a remote system? | |
| # This env var is only defined when the shell is running in a local mac | |
| # terminal window | |
| @unittest.skipUnless( | |
| "TERM_PROGRAM" in os.environ, "test must be run on local system" | |
| ) | |
| @no_debug_info_test | |
| def test_launch_in_terminal(self): | |
| self.build() | |
| exe = self.getBuildArtifact("a.out") | |
| target = self.dbg.CreateTarget(exe) | |
| launch_info = lldb.SBLaunchInfo(["-lAF", "/tmp/"]) | |
| launch_info.SetLaunchFlags( | |
| lldb.eLaunchFlagLaunchInTTY | lldb.eLaunchFlagCloseTTYOnExit | |
| ) | |
| error = lldb.SBError() | |
| process = target.Launch(launch_info, error) | |
| print("Error was: %s." % (error.GetCString())) | |
| self.assertTrue( | |
| error.Success(), | |
| "Make sure launch happened successfully in a terminal window", | |
| ) | |
| # Running in synchronous mode our process should have run and already | |
| # exited by the time target.Launch() returns | |
| self.assertState(process.GetState(), lldb.eStateExited) |