import lldb import re from lldbsuite.test.decorators import * from lldbsuite.test.lldbtest import * from lldbsuite.test.lldbpexpect import PExpectTest class TestStatusline(PExpectTest): def do_setup(self): # Create a target and run to a breakpoint. exe = self.getBuildArtifact("a.out") self.expect( "target create {}".format(exe), substrs=["Current executable set to"] ) self.expect('breakpoint set -p "Break here"', substrs=["Breakpoint 1"]) self.expect("run", substrs=["stop reason"]) # PExpect uses many timeouts internally and doesn't play well # under ASAN on a loaded machine.. @skipIfAsan def test(self): """Basic test for the statusline.""" self.build() self.launch() self.do_setup() # Change the terminal dimensions. terminal_height = 10 terminal_width = 60 self.child.setwinsize(terminal_height, terminal_width) # Enable the statusline and check for the control character and that we # can see the target, the location and the stop reason. self.expect( "set set show-statusline true", [ "\x1b[0;{}r".format(terminal_height - 1), "a.out | main.c:2:11 | breakpoint 1.1 ", ], ) # Change the terminal dimensions and make sure it's reflected immediately. self.child.setwinsize(terminal_height, 25) self.child.expect(re.escape("a.out | main.c:2:11 | bre")) self.child.setwinsize(terminal_height, terminal_width) # Change the format. self.expect( 'set set statusline-format "target = {${target.file.basename}}"', ["target = a.out"], ) # Hide the statusline and check or the control character. self.expect( "set set show-statusline false", ["\x1b[0;{}r".format(terminal_height)] ) # PExpect uses many timeouts internally and doesn't play well # under ASAN on a loaded machine.. @skipIfAsan def test_no_color(self): """Basic test for the statusline with colors disabled.""" self.build() self.launch(use_colors=False) self.do_setup() # Change the terminal dimensions. terminal_height = 10 terminal_width = 60 self.child.setwinsize(terminal_height, terminal_width) # Enable the statusline and check for the "reverse video" control character. self.expect( "set set show-statusline true", [ "\x1b[7m", ], )