xref: /llvm-project/lldb/test/API/commands/gui/breakpoints/TestGuiBreakpoints.py (revision 2238dcc39358353cac21df75c3c3286ab20b8f53)
1db828abaSLuboš Luňák"""
2db828abaSLuboš LuňákTest the 'gui' shortcut 'b' (toggle breakpoint).
3db828abaSLuboš Luňák"""
4db828abaSLuboš Luňák
5db828abaSLuboš Luňákimport lldb
6db828abaSLuboš Luňákfrom lldbsuite.test.decorators import *
7db828abaSLuboš Luňákfrom lldbsuite.test.lldbtest import *
8db828abaSLuboš Luňákfrom lldbsuite.test.lldbpexpect import PExpectTest
9db828abaSLuboš Luňák
10db828abaSLuboš Luňák
11*2238dcc3SJonas Devlieghereclass TestGuiBasicDebugCommandTest(PExpectTest):
12db828abaSLuboš Luňák    # PExpect uses many timeouts internally and doesn't play well
13db828abaSLuboš Luňák    # under ASAN on a loaded machine..
14db828abaSLuboš Luňák    @skipIfAsan
15db828abaSLuboš Luňák    @skipIfCursesSupportMissing
16f2128abeSMuhammad Omair Javaid    @skipIf(oslist=["linux"], archs=["arm", "aarch64"])
17db828abaSLuboš Luňák    def test_gui(self):
18db828abaSLuboš Luňák        self.build()
19db828abaSLuboš Luňák
20db828abaSLuboš Luňák        self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100, 500))
21*2238dcc3SJonas Devlieghere        self.expect(
22*2238dcc3SJonas Devlieghere            'br set -o true -f main.c -p "// First break here"',
23*2238dcc3SJonas Devlieghere            substrs=["Breakpoint 1", "address ="],
24*2238dcc3SJonas Devlieghere        )
25db828abaSLuboš Luňák        self.expect("run", substrs=["stop reason ="])
26db828abaSLuboš Luňák
27db828abaSLuboš Luňák        self.child.sendline("breakpoint list")
28db828abaSLuboš Luňák        self.child.expect_exact("No breakpoints currently set.")
29db828abaSLuboš Luňák
30db828abaSLuboš Luňák        escape_key = chr(27).encode()
31*2238dcc3SJonas Devlieghere        down_key = chr(27) + "OB"  # for vt100 terminal (lldbexpect sets TERM=vt100)
32db828abaSLuboš Luňák
33aaca2acdSLuboš Luňák        # Start the GUI.
34db828abaSLuboš Luňák        self.child.sendline("gui")
35db828abaSLuboš Luňák        self.child.expect_exact("Sources")  # wait for gui
36db828abaSLuboš Luňák
37db828abaSLuboš Luňák        # Go to next line, set a breakpoint.
38db828abaSLuboš Luňák        self.child.send(down_key)
39*2238dcc3SJonas Devlieghere        self.child.send("b")
40db828abaSLuboš Luňák        self.child.send(escape_key)
41db828abaSLuboš Luňák        self.expect_prompt()
42db828abaSLuboš Luňák        self.child.sendline("breakpoint list")
43db828abaSLuboš Luňák        self.child.expect("2: file = '[^']*main.c', line = 3,.*")
44db828abaSLuboš Luňák        self.child.sendline("gui")
45db828abaSLuboš Luňák        self.child.expect_exact("Sources")
46db828abaSLuboš Luňák
47db828abaSLuboš Luňák        # Go two lines down ("gui" resets position), set a breakpoint.
48db828abaSLuboš Luňák        self.child.send(down_key)
49db828abaSLuboš Luňák        self.child.send(down_key)
50*2238dcc3SJonas Devlieghere        self.child.send("b")
51db828abaSLuboš Luňák        self.child.send(escape_key)
52db828abaSLuboš Luňák        self.expect_prompt()
53db828abaSLuboš Luňák        self.child.sendline("breakpoint list")
54db828abaSLuboš Luňák        self.child.expect("2: file = '[^']*main.c', line = 3,")
55db828abaSLuboš Luňák        self.child.expect("3: file = '[^']*main.c', line = 4,")
56db828abaSLuboš Luňák        self.child.sendline("gui")
57db828abaSLuboš Luňák        self.child.expect_exact("Sources")
58db828abaSLuboš Luňák
59db828abaSLuboš Luňák        # Toggle both the breakpoints (remove them).
60db828abaSLuboš Luňák        self.child.send(down_key)
61*2238dcc3SJonas Devlieghere        self.child.send("b")
62db828abaSLuboš Luňák        self.child.send(down_key)
63*2238dcc3SJonas Devlieghere        self.child.send("b")
64db828abaSLuboš Luňák        self.child.send(escape_key)
65db828abaSLuboš Luňák        self.expect_prompt()
66db828abaSLuboš Luňák        self.child.sendline("breakpoint list")
67db828abaSLuboš Luňák        self.child.expect_exact("No breakpoints currently set.")
68db828abaSLuboš Luňák        self.child.sendline("gui")
69db828abaSLuboš Luňák        self.child.expect_exact("Sources")
70db828abaSLuboš Luňák
71db828abaSLuboš Luňák        # Press escape to quit the gui
72db828abaSLuboš Luňák        self.child.send(escape_key)
73db828abaSLuboš Luňák
74db828abaSLuboš Luňák        self.expect_prompt()
75db828abaSLuboš Luňák        self.quit()
76