title descriptors (#2213)

* title descriptors

* add extra line around titles

* changelog

* snapshots

* comment

* Fix border refresh

* simplify typing

* test for None case
This commit is contained in:
Will McGugan
2023-04-05 10:10:43 +01:00
committed by GitHub
parent c2f7004fbb
commit 41af489648
7 changed files with 318 additions and 278 deletions

File diff suppressed because one or more lines are too long

View File

@@ -2,6 +2,7 @@ import pytest
from rich.console import Console
from rich.segment import Segment
from rich.style import Style
from rich.text import Text
from textual._border import render_border_label, render_row
from textual.widget import Widget
@@ -37,6 +38,11 @@ def test_border_title_single_line():
"""The border_title gets set to a single line even when multiple lines are provided."""
widget = Widget()
assert widget.border_title is None
widget.border_title = None
assert widget.border_title == None
widget.border_title = ""
assert widget.border_title == ""
@@ -50,7 +56,10 @@ def test_border_title_single_line():
assert widget.border_title == "Sorry you "
widget.border_title = "[red]This also \n works with markup \n involved.[/]"
assert widget.border_title == "[red]This also "
assert widget.border_title == "[red]This also [/red]"
widget.border_title = Text.from_markup("[bold]Hello World")
assert widget.border_title == "[bold]Hello World[/bold]"
def test_border_subtitle_single_line():
@@ -70,7 +79,10 @@ def test_border_subtitle_single_line():
assert widget.border_subtitle == "Sorry you "
widget.border_subtitle = "[red]This also \n works with markup \n involved.[/]"
assert widget.border_subtitle == "[red]This also "
assert widget.border_subtitle == "[red]This also [/red]"
widget.border_subtitle = Text.from_markup("[bold]Hello World")
assert widget.border_subtitle == "[bold]Hello World[/bold]"
@pytest.mark.parametrize(
@@ -93,7 +105,7 @@ def test_render_border_label_empty_label_skipped(
assert [] == list(
render_border_label(
"",
Text(""),
True,
"round",
width,
@@ -130,7 +142,7 @@ def test_render_border_label_skipped_if_narrow(
assert [] == list(
render_border_label(
label,
Text.from_markup(label),
True,
"round",
width,
@@ -168,7 +180,7 @@ def test_render_border_label_wide_plain(label: str):
True,
True,
)
left, original_text, right = render_border_label(label, *args)
left, original_text, right = render_border_label(Text.from_markup(label), *args)
assert left == _BLANK_SEGMENT
assert right == _BLANK_SEGMENT
@@ -188,7 +200,7 @@ def test_render_border_empty_text_with_markup(label: str):
"""Test label rendering if there is no text but some markup."""
assert [] == list(
render_border_label(
label,
Text.from_markup(label),
True,
"round",
999,
@@ -210,7 +222,7 @@ def test_render_border_label():
# Implicit test on the number of segments returned:
blank1, what, is_up, with_you, blank2 = render_border_label(
label,
Text.from_markup(label),
True,
"round",
9999,
@@ -239,7 +251,7 @@ def test_render_border_label():
assert with_you == expected_with_you
blank1, what, blank2 = render_border_label(
label,
Text.from_markup(label),
True,
"round",
5 + 4, # 5 where "What…" fits + 2 for the blank spaces + 2 for the corners.