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