xref: /llvm-project/lldb/test/API/commands/gui/expand-threads-tree/TestGuiExpandThreadsTree.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1a94fbb25SMuhammad Omair Javaid"""
2a94fbb25SMuhammad Omair JavaidTest the 'gui' default thread tree expansion.
3a94fbb25SMuhammad Omair JavaidThe root process tree item and the tree item corresponding to the selected
4a94fbb25SMuhammad Omair Javaidthread should be expanded by default.
5a94fbb25SMuhammad Omair Javaid"""
6a94fbb25SMuhammad Omair Javaid
7a94fbb25SMuhammad Omair Javaidimport lldb
8a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.decorators import *
9a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.lldbtest import *
10a94fbb25SMuhammad Omair Javaidfrom lldbsuite.test.lldbpexpect import PExpectTest
11a94fbb25SMuhammad Omair Javaid
12a94fbb25SMuhammad Omair Javaid
13*2238dcc3SJonas Devlieghereclass TestGuiExpandThreadsTree(PExpectTest):
14a94fbb25SMuhammad Omair Javaid    # PExpect uses many timeouts internally and doesn't play well
15a94fbb25SMuhammad Omair Javaid    # under ASAN on a loaded machine..
16a94fbb25SMuhammad Omair Javaid    @skipIfAsan
17a94fbb25SMuhammad Omair Javaid    @skipIfCursesSupportMissing
18f2128abeSMuhammad Omair Javaid    @skipIf(oslist=["linux"], archs=["arm", "aarch64"])
193b8a1cc3SAugusto Noronha    @skipIf(bugnumber="rdar://97460266")
20a94fbb25SMuhammad Omair Javaid    def test_gui(self):
21a94fbb25SMuhammad Omair Javaid        self.build()
22a94fbb25SMuhammad Omair Javaid
23a94fbb25SMuhammad Omair Javaid        self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100, 500))
24*2238dcc3SJonas Devlieghere        self.expect(
25*2238dcc3SJonas Devlieghere            "breakpoint set -n break_here", substrs=["Breakpoint 1", "address ="]
26*2238dcc3SJonas Devlieghere        )
27a94fbb25SMuhammad Omair Javaid        self.expect("run", substrs=["stop reason ="])
28a94fbb25SMuhammad Omair Javaid
29a94fbb25SMuhammad Omair Javaid        escape_key = chr(27).encode()
30a94fbb25SMuhammad Omair Javaid
31a94fbb25SMuhammad Omair Javaid        # Start the GUI and close the welcome window.
32a94fbb25SMuhammad Omair Javaid        self.child.sendline("gui")
33a94fbb25SMuhammad Omair Javaid        self.child.send(escape_key)
34a94fbb25SMuhammad Omair Javaid        self.child.expect_exact("Threads")
35a94fbb25SMuhammad Omair Javaid
36a94fbb25SMuhammad Omair Javaid        # The thread running thread_start_routine should be expanded.
37f90fa555SLuboš Luňák        self.child.expect_exact("#0: break_here")
38a94fbb25SMuhammad Omair Javaid
39a94fbb25SMuhammad Omair Javaid        # Exit GUI.
40a94fbb25SMuhammad Omair Javaid        self.child.send(escape_key)
41a94fbb25SMuhammad Omair Javaid        self.expect_prompt()
42a94fbb25SMuhammad Omair Javaid
43a94fbb25SMuhammad Omair Javaid        # Select the main thread.
44a94fbb25SMuhammad Omair Javaid        self.child.sendline("thread select 1")
45a94fbb25SMuhammad Omair Javaid
46a94fbb25SMuhammad Omair Javaid        # Start the GUI.
47a94fbb25SMuhammad Omair Javaid        self.child.sendline("gui")
48a94fbb25SMuhammad Omair Javaid        self.child.expect_exact("Threads")
49a94fbb25SMuhammad Omair Javaid
50a94fbb25SMuhammad Omair Javaid        # The main thread should be expanded.
51f90fa555SLuboš Luňák        self.child.expect("#\d+: main")
52a94fbb25SMuhammad Omair Javaid
53a94fbb25SMuhammad Omair Javaid        # Quit the GUI
54a94fbb25SMuhammad Omair Javaid        self.child.send(escape_key)
55a94fbb25SMuhammad Omair Javaid
56a94fbb25SMuhammad Omair Javaid        self.expect_prompt()
57a94fbb25SMuhammad Omair Javaid        self.quit()
58