"""
Test the 'gui' shortcuts 's','n','f','u','d' (step in, step over, step out, up, down)
"""

import lldb
from lldbsuite.test.decorators import *
from lldbsuite.test.lldbtest import *
from lldbsuite.test.lldbpexpect import PExpectTest


class TestGuiBasicDebugCommandTest(PExpectTest):
    # PExpect uses many timeouts internally and doesn't play well
    # under ASAN on a loaded machine..
    @skipIfAsan
    @skipIf(bugnumber="llvm.org/pr51833")
    @skipIfCursesSupportMissing
    def test_gui(self):
        self.build()

        self.launch(executable=self.getBuildArtifact("a.out"), dimensions=(100, 500))
        self.expect(
            'br set -f main.c -p "// Break here"', substrs=["Breakpoint 1", "address ="]
        )
        self.expect("run", substrs=["stop reason ="])

        escape_key = chr(27).encode()

        # Start the GUI.
        self.child.sendline("gui")

        # Simulate a simple debugging session.
        self.child.send("s")  # step
        self.child.expect("return 1; // In function[^\r\n]+<<< Thread 1: step in")
        self.child.send("u")  # up
        self.child.expect_exact("func();    // Break here")
        self.child.send("d")  # down
        self.child.expect_exact("return 1; // In function")
        self.child.send("f")  # finish
        self.child.expect("<<< Thread 1: step out")
        self.child.send("s")  # move onto the second one
        self.child.expect("<<< Thread 1: step in")
        self.child.send("n")  # step over
        self.child.expect("// Dummy command 1[^\r\n]+<<< Thread 1: step over")
        self.child.send("n")

        # Test that 'up' + 'step out' steps out of the selected function.
        self.child.send("s")  # move into func_up()
        self.child.expect("// In func_up")
        self.child.send("s")  # move into func_down()
        self.child.expect("// In func_down")
        self.child.send("u")  # up
        self.child.expect("// In func_up")
        self.child.send("f")  # finish
        self.child.expect("// Dummy command 2[^\r\n]+<<< Thread 1: step out")
        self.child.send("n")

        # Press escape to quit the gui
        self.child.send(escape_key)

        self.expect_prompt()
        self.quit()
