Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion lldb/source/Core/CoreProperties.td
Original file line number Diff line number Diff line change
Expand Up @@ -186,7 +186,7 @@ let Definition = "debugger" in {
: Property<"statusline-format", "FormatEntity">,
Global,
DefaultStringValue<
"${ansi.negative}{${target.file.basename}}{ "
"${ansi.negative}{${target.file.basename}|no target}{ "
"${separator}${line.file.basename}:${line.number}:${line.column}}{ "
"${separator}${thread.stop-reason}}{ "
"${separator}{${progress.count} }${progress.message}}">,
Expand Down
61 changes: 33 additions & 28 deletions lldb/test/API/functionalities/statusline/TestStatusline.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,17 @@
from lldbsuite.test.lldbpexpect import PExpectTest


# PExpect uses many timeouts internally and doesn't play well
# under ASAN on a loaded machine..
@skipIfAsan
class TestStatusline(PExpectTest):
# Change this value to something smaller to make debugging this test less
# tedious.
TIMEOUT = 60

TERMINAL_HEIGHT = 10
TERMINAL_WIDTH = 60

def do_setup(self):
# Create a target and run to a breakpoint.
exe = self.getBuildArtifact("a.out")
Expand All @@ -15,36 +25,34 @@ def do_setup(self):
)
self.expect('breakpoint set -p "Break here"', substrs=["Breakpoint 1"])
self.expect("run", substrs=["stop reason"])
self.resize()

def resize(self):
# Change the terminal dimensions. When we launch the tests, we reset
# all the settings, leaving the terminal dimensions unset.
self.child.setwinsize(self.TERMINAL_HEIGHT, self.TERMINAL_WIDTH)

# 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.launch(timeout=self.TIMEOUT)
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 separator "| "')
self.expect(
"set set show-statusline true",
[
"\x1b[0;{}r".format(terminal_height - 1),
"\x1b[0;{}r".format(self.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.setwinsize(self.TERMINAL_HEIGHT, 25)
self.child.expect(re.escape("a.out | main.c:2:11 | bre"))
self.child.setwinsize(terminal_height, terminal_width)
self.child.setwinsize(self.TERMINAL_HEIGHT, self.TERMINAL_WIDTH)

# Change the separator.
self.expect('set set separator "S "', ["a.out S main.c:2:11"])
Expand All @@ -58,23 +66,15 @@ def test(self):

# Hide the statusline and check or the control character.
self.expect(
"set set show-statusline false", ["\x1b[0;{}r".format(terminal_height)]
"set set show-statusline false", ["\x1b[0;{}r".format(self.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.launch(use_colors=False, timeout=self.TIMEOUT)
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",
Expand All @@ -87,15 +87,20 @@ def test_deadlock(self):
"""Regression test for lock inversion between the statusline mutex and
the output mutex."""
self.build()
self.launch(extra_args=["-o", "settings set use-color false"])
self.launch(
extra_args=["-o", "settings set use-color false"], timeout=self.TIMEOUT
)
self.child.expect("(lldb)")

# Change the terminal dimensions.
terminal_height = 10
terminal_width = 60
self.child.setwinsize(terminal_height, terminal_width)
self.resize()

exe = self.getBuildArtifact("a.out")

self.expect("file {}".format(exe), ["Current executable"])
self.expect("help", ["Debugger commands"])

def test_no_target(self):
"""Test that we print "no target" when launched without a target."""
self.launch(timeout=self.TIMEOUT)
self.resize()

self.expect("set set show-statusline true", ["no target"])
Loading