1*a94fbb25SMuhammad Omair Javaid""" 2*a94fbb25SMuhammad Omair JavaidTest the 'gui' default thread tree expansion. 3*a94fbb25SMuhammad Omair JavaidThe root process tree item and the tree item corresponding to the selected 4*a94fbb25SMuhammad Omair Javaidthread should be expanded by default. 5*a94fbb25SMuhammad Omair Javaid""" 6*a94fbb25SMuhammad Omair Javaid 7*a94fbb25SMuhammad Omair Javaidimport lldb 8*a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.decorators import * 9*a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.lldbtest import * 10*a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.lldbpexpect import PExpectTest 11*a94fbb25SMuhammad Omair Javaid 12*a94fbb25SMuhammad Omair Javaidclass TestGuiExpandThreadsTree(PExpectTest): 13*a94fbb25SMuhammad Omair Javaid 14*a94fbb25SMuhammad Omair Javaid mydir = TestBase.compute_mydir(__file__) 15*a94fbb25SMuhammad Omair Javaid 16*a94fbb25SMuhammad Omair Javaid # PExpect uses many timeouts internally and doesn't play well 17*a94fbb25SMuhammad Omair Javaid # under ASAN on a loaded machine.. 18*a94fbb25SMuhammad Omair Javaid @skipIfAsan 19*a94fbb25SMuhammad Omair Javaid @skipIfCursesSupportMissing 20*a94fbb25SMuhammad Omair Javaid def test_gui(self): 21*a94fbb25SMuhammad Omair Javaid self.build() 22*a94fbb25SMuhammad Omair Javaid 23*a94fbb25SMuhammad Omair Javaid self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100,500)) 24*a94fbb25SMuhammad Omair Javaid self.expect("breakpoint set -r thread_start_routine", substrs=["Breakpoint 1", "address ="]) 25*a94fbb25SMuhammad Omair Javaid self.expect("run", substrs=["stop reason ="]) 26*a94fbb25SMuhammad Omair Javaid 27*a94fbb25SMuhammad Omair Javaid escape_key = chr(27).encode() 28*a94fbb25SMuhammad Omair Javaid 29*a94fbb25SMuhammad Omair Javaid # Start the GUI and close the welcome window. 30*a94fbb25SMuhammad Omair Javaid self.child.sendline("gui") 31*a94fbb25SMuhammad Omair Javaid self.child.send(escape_key) 32*a94fbb25SMuhammad Omair Javaid self.child.expect_exact("Threads") 33*a94fbb25SMuhammad Omair Javaid 34*a94fbb25SMuhammad Omair Javaid # The thread running thread_start_routine should be expanded. 35*a94fbb25SMuhammad Omair Javaid self.child.expect_exact("frame #0: thread_start_routine") 36*a94fbb25SMuhammad Omair Javaid 37*a94fbb25SMuhammad Omair Javaid # Exit GUI. 38*a94fbb25SMuhammad Omair Javaid self.child.send(escape_key) 39*a94fbb25SMuhammad Omair Javaid self.expect_prompt() 40*a94fbb25SMuhammad Omair Javaid 41*a94fbb25SMuhammad Omair Javaid # Select the main thread. 42*a94fbb25SMuhammad Omair Javaid self.child.sendline("thread select 1") 43*a94fbb25SMuhammad Omair Javaid 44*a94fbb25SMuhammad Omair Javaid # Start the GUI. 45*a94fbb25SMuhammad Omair Javaid self.child.sendline("gui") 46*a94fbb25SMuhammad Omair Javaid self.child.expect_exact("Threads") 47*a94fbb25SMuhammad Omair Javaid 48*a94fbb25SMuhammad Omair Javaid # The main thread should be expanded. 49*a94fbb25SMuhammad Omair Javaid self.child.expect("frame #\d+: main") 50*a94fbb25SMuhammad Omair Javaid 51*a94fbb25SMuhammad Omair Javaid # Quit the GUI 52*a94fbb25SMuhammad Omair Javaid self.child.send(escape_key) 53*a94fbb25SMuhammad Omair Javaid 54*a94fbb25SMuhammad Omair Javaid self.expect_prompt() 55*a94fbb25SMuhammad Omair Javaid self.quit() 56