1c7be982cSLuboš Luňák""" 2c7be982cSLuboš LuňákTest the 'gui' shortcuts 's','n','f','u','d' (step in, step over, step out, up, down) 3c7be982cSLuboš Luňák""" 4c7be982cSLuboš Luňák 5c7be982cSLuboš Luňákimport lldb 6c7be982cSLuboš Luňákfrom lldbsuite.test.decorators import * 7c7be982cSLuboš Luňákfrom lldbsuite.test.lldbtest import * 8c7be982cSLuboš Luňákfrom lldbsuite.test.lldbpexpect import PExpectTest 9c7be982cSLuboš Luňák 10c7be982cSLuboš Luňákclass TestGuiBasicDebugCommandTest(PExpectTest): 11c7be982cSLuboš Luňák 12c7be982cSLuboš Luňák mydir = TestBase.compute_mydir(__file__) 13c7be982cSLuboš Luňák 14c7be982cSLuboš Luňák # PExpect uses many timeouts internally and doesn't play well 15c7be982cSLuboš Luňák # under ASAN on a loaded machine.. 16c7be982cSLuboš Luňák @skipIfAsan 17c82dbc29SPavel Labath @skipIf(bugnumber="llvm.org/pr51833") 18c7be982cSLuboš Luňák @skipIfCursesSupportMissing 19c7be982cSLuboš Luňák def test_gui(self): 20c7be982cSLuboš Luňák self.build() 21c7be982cSLuboš Luňák 22c7be982cSLuboš Luňák self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100,500)) 23c7be982cSLuboš Luňák self.expect('br set -f main.c -p "// Break here"', substrs=["Breakpoint 1", "address ="]) 24c7be982cSLuboš Luňák self.expect("run", substrs=["stop reason ="]) 25c7be982cSLuboš Luňák 26c7be982cSLuboš Luňák escape_key = chr(27).encode() 27c7be982cSLuboš Luňák 28*aaca2acdSLuboš Luňák # Start the GUI. 29c7be982cSLuboš Luňák self.child.sendline("gui") 30c7be982cSLuboš Luňák 31c7be982cSLuboš Luňák # Simulate a simple debugging session. 32c7be982cSLuboš Luňák self.child.send("s") # step 33c7be982cSLuboš Luňák self.child.expect("return 1; // In function[^\r\n]+<<< Thread 1: step in") 34c7be982cSLuboš Luňák self.child.send("u") # up 35c7be982cSLuboš Luňák self.child.expect_exact("func(); // Break here") 36c7be982cSLuboš Luňák self.child.send("d") # down 37c7be982cSLuboš Luňák self.child.expect_exact("return 1; // In function") 38c7be982cSLuboš Luňák self.child.send("f") # finish 39d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step out") 40c7be982cSLuboš Luňák self.child.send("s") # move onto the second one 41d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step in") 42c7be982cSLuboš Luňák self.child.send("n") # step over 43d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step over") 44c7be982cSLuboš Luňák 45c7be982cSLuboš Luňák # Press escape to quit the gui 46c7be982cSLuboš Luňák self.child.send(escape_key) 47c7be982cSLuboš Luňák 48c7be982cSLuboš Luňák self.expect_prompt() 49c7be982cSLuboš Luňák self.quit() 50