|
6 | 6 |
|
7 | 7 | import pytest |
8 | 8 | from markdown_it.token import Token |
| 9 | +from rich.style import Style |
| 10 | +from rich.text import Span |
9 | 11 |
|
10 | 12 | import textual.widgets._markdown as MD |
11 | 13 | from textual.app import App, ComposeResult |
@@ -89,3 +91,27 @@ def markdown_nodes(root: Widget) -> Iterator[MarkdownBlock]: |
89 | 91 | assert [ |
90 | 92 | node.__class__ for node in markdown_nodes(pilot.app.query_one(Markdown)) |
91 | 93 | ] == expected_nodes |
| 94 | + |
| 95 | + |
| 96 | +async def test_softbreak_split_links_rendered_correctly() -> None: |
| 97 | + """Test for https://github.com/Textualize/textual/issues/2805""" |
| 98 | + |
| 99 | + document = """\ |
| 100 | +My site [has |
| 101 | +this |
| 102 | +URL](https://example.com)\ |
| 103 | +""" |
| 104 | + async with MarkdownApp(document).run_test() as pilot: |
| 105 | + markdown = pilot.app.query_one(Markdown) |
| 106 | + paragraph = markdown.children[0] |
| 107 | + assert isinstance(paragraph, MD.MarkdownParagraph) |
| 108 | + assert paragraph._text.plain == "My site has this URL" |
| 109 | + expected_spans = [ |
| 110 | + Span(0, 8, Style()), |
| 111 | + Span(8, 11, Style(meta={"@click": "link('https://example.com')"})), |
| 112 | + Span(11, 12, Style(meta={"@click": "link('https://example.com')"})), |
| 113 | + Span(12, 16, Style(meta={"@click": "link('https://example.com')"})), |
| 114 | + Span(16, 17, Style(meta={"@click": "link('https://example.com')"})), |
| 115 | + Span(17, 20, Style(meta={"@click": "link('https://example.com')"})), |
| 116 | + ] |
| 117 | + assert paragraph._text.spans == expected_spans |
0 commit comments