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