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 17c7be982cSLuboš Luňák @skipIfCursesSupportMissing 18c7be982cSLuboš Luňák def test_gui(self): 19c7be982cSLuboš Luňák self.build() 20c7be982cSLuboš Luňák 21c7be982cSLuboš Luňák self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100,500)) 22c7be982cSLuboš Luňák self.expect('br set -f main.c -p "// Break here"', substrs=["Breakpoint 1", "address ="]) 23c7be982cSLuboš Luňák self.expect("run", substrs=["stop reason ="]) 24c7be982cSLuboš Luňák 25c7be982cSLuboš Luňák escape_key = chr(27).encode() 26c7be982cSLuboš Luňák 27c7be982cSLuboš Luňák # Start the GUI and close the welcome window. 28c7be982cSLuboš Luňák self.child.sendline("gui") 29*43e45f0eSRaphael Isemann self.child.expect("Welcome to the LLDB curses GUI.") 30c7be982cSLuboš Luňák self.child.send(escape_key) 31c7be982cSLuboš Luňák 32c7be982cSLuboš Luňák # Simulate a simple debugging session. 33c7be982cSLuboš Luňák self.child.send("s") # step 34c7be982cSLuboš Luňák self.child.expect("return 1; // In function[^\r\n]+<<< Thread 1: step in") 35c7be982cSLuboš Luňák self.child.send("u") # up 36c7be982cSLuboš Luňák self.child.expect_exact("func(); // Break here") 37c7be982cSLuboš Luňák self.child.send("d") # down 38c7be982cSLuboš Luňák self.child.expect_exact("return 1; // In function") 39c7be982cSLuboš Luňák self.child.send("f") # finish 40d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step out") 41c7be982cSLuboš Luňák self.child.send("s") # move onto the second one 42d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step in") 43c7be982cSLuboš Luňák self.child.send("n") # step over 44d689570dSJonas Devlieghere self.child.expect("<<< Thread 1: step over") 45c7be982cSLuboš Luňák 46c7be982cSLuboš Luňák # Press escape to quit the gui 47c7be982cSLuboš Luňák self.child.send(escape_key) 48c7be982cSLuboš Luňák 49c7be982cSLuboš Luňák self.expect_prompt() 50c7be982cSLuboš Luňák self.quit() 51