199451b44SJordan Rupprecht""" 299451b44SJordan RupprechtTest lldb command aliases. 399451b44SJordan Rupprecht""" 499451b44SJordan Rupprecht 599451b44SJordan Rupprechtfrom __future__ import print_function 699451b44SJordan Rupprecht 799451b44SJordan Rupprecht 899451b44SJordan Rupprechtimport unittest2 999451b44SJordan Rupprechtimport os 1099451b44SJordan Rupprechtimport lldb 1199451b44SJordan Rupprechtfrom lldbsuite.test.decorators import * 1299451b44SJordan Rupprechtfrom lldbsuite.test.lldbtest import * 1399451b44SJordan Rupprechtfrom lldbsuite.test import lldbutil 1499451b44SJordan Rupprecht 1599451b44SJordan Rupprecht 1699451b44SJordan Rupprechtclass LaunchInTerminalTestCase(TestBase): 1799451b44SJordan Rupprecht 1899451b44SJordan Rupprecht # Darwin is the only platform that I know of that supports optionally launching 1999451b44SJordan Rupprecht # a program in a separate terminal window. It would be great if other platforms 2099451b44SJordan Rupprecht # added support for this. 2199451b44SJordan Rupprecht @skipUnlessDarwin 2299451b44SJordan Rupprecht # If the test is being run under sudo, the spawned terminal won't retain that elevated 2399451b44SJordan Rupprecht # privilege so it can't open the socket to talk back to the test case 2499451b44SJordan Rupprecht @unittest2.skipIf(hasattr(os, 'geteuid') and os.geteuid() 2599451b44SJordan Rupprecht == 0, "test cannot be run as root") 2699451b44SJordan Rupprecht # Do we need to disable this test if the testsuite is being run on a remote system? 2799451b44SJordan Rupprecht # This env var is only defined when the shell is running in a local mac 2899451b44SJordan Rupprecht # terminal window 2999451b44SJordan Rupprecht @unittest2.skipUnless( 3099451b44SJordan Rupprecht 'TERM_PROGRAM' in os.environ, 3199451b44SJordan Rupprecht "test must be run on local system") 3299451b44SJordan Rupprecht @no_debug_info_test 3399451b44SJordan Rupprecht def test_launch_in_terminal(self): 3499451b44SJordan Rupprecht self.build() 3599451b44SJordan Rupprecht exe = self.getBuildArtifact("a.out") 3699451b44SJordan Rupprecht 3799451b44SJordan Rupprecht target = self.dbg.CreateTarget(exe) 3899451b44SJordan Rupprecht launch_info = lldb.SBLaunchInfo(["-lAF", "/tmp/"]) 3999451b44SJordan Rupprecht launch_info.SetLaunchFlags( 4099451b44SJordan Rupprecht lldb.eLaunchFlagLaunchInTTY | lldb.eLaunchFlagCloseTTYOnExit) 4199451b44SJordan Rupprecht error = lldb.SBError() 4299451b44SJordan Rupprecht process = target.Launch(launch_info, error) 4399451b44SJordan Rupprecht print("Error was: %s."%(error.GetCString())) 4499451b44SJordan Rupprecht self.assertTrue( 4599451b44SJordan Rupprecht error.Success(), 4699451b44SJordan Rupprecht "Make sure launch happened successfully in a terminal window") 4799451b44SJordan Rupprecht # Running in synchronous mode our process should have run and already 4899451b44SJordan Rupprecht # exited by the time target.Launch() returns 49*1b8c7352SJonas Devlieghere self.assertState(process.GetState(), lldb.eStateExited) 50