def test_markup_error(): with pytest.raises(MarkupError): assert render("foo[/]") with pytest.raises(MarkupError): assert render("foo[/bar]") with pytest.raises(MarkupError): assert render("[foo]hello[/bar]")
def test_render_overlap(): result = render("[green]X[bold]Y[/green]Z[/bold]") assert str(result) == "XYZ" assert result.spans == [ Span(0, 2, "green"), Span(1, 3, "bold"), ]
def test_render_combine(): result = render("[green]X[blue]Y[/blue]Z[/green]") assert str(result) == "XYZ" assert result.spans == [ Span(0, 3, "green"), Span(1, 2, "blue"), ]
def test_render_meta(): console = Console() text = render("foo[@click=close]bar[/]baz") assert text.get_style_at_offset(console, 3).meta == {"@click": ("close", ())} text = render("foo[@click=close()]bar[/]baz") assert text.get_style_at_offset(console, 3).meta == {"@click": ("close", ())} text = render("foo[@click=close('dialog')]bar[/]baz") assert text.get_style_at_offset(console, 3).meta == { "@click": ("close", ("dialog",)) } text = render("foo[@click=close('dialog', 3)]bar[/]baz") assert text.get_style_at_offset(console, 3).meta == { "@click": ("close", ("dialog", 3)) } text = render("foo[@click=(1, 2, 3)]bar[/]baz") assert text.get_style_at_offset(console, 3).meta == {"@click": (1, 2, 3)}
def test_escape_escape(): # Escaped escapes (i.e. double backslash)should be treated as literal result = render(r"\\[bold]FOO") assert str(result) == r"\FOO" # Single backslash makes the tag literal result = render(r"\[bold]FOO") assert str(result) == "[bold]FOO" # Double backslash produces a backslash result = render(r"\\[bold]some text[/]") assert str(result) == r"\some text" # Triple backslash parsed as literal backslash plus escaped tag result = render(r"\\\[bold]some text\[/]") assert str(result) == r"\[bold]some text[/]" # Backslash escaping only happens when preceding a tag result = render(r"\\") assert str(result) == r"\\" result = render(r"\\\\") assert str(result) == r"\\\\"
def strip_markup(styled_text: str) -> str: """ Strip the Rich markup from a string """ t = markup.render(styled_text) return t.plain
def test_render_close_ambiguous(): result = render("[green]X[bold]Y[/]Z[/]") assert str(result) == "XYZ" assert result.spans == [Span(0, 3, "green"), Span(1, 2, "bold")]
def test_render_close(): result = render("[bold]X[/]Y") assert str(result) == "XY" assert result.spans == [Span(0, 1, "bold")]
def test_render_link(): result = render("[link=foo]FOO[/link]") assert str(result) == "FOO" assert result.spans == [Span(0, 3, "link foo")]
def test_events_broken(): with pytest.raises(MarkupError): render("[@click=sdfwer(sfs)]foo[/]") with pytest.raises(MarkupError): render("[@click='view.toggle]foo[/]")
def test_events(): result = render( "[@click]Hello[/@click] [@click='view.toggle', 'left']World[/]") assert str(result) == "Hello World"
def test_markup_escape(): result = str(render("[dim white]\[url=[/]")) assert result == "[url="
def test_adjoint(): result = render("[red][blue]B[/blue]R[/red]") print(repr(result)) assert result.spans == [Span(0, 2, "red"), Span(0, 1, "blue")]
def strip_markup(styled_text: str) -> str: text = markup.render(styled_text) return text.plain
def test_render(): result = render("[bold]FOO[/bold]") assert str(result) == "FOO" assert result.spans == [Span(0, 3, "bold")]
def test_render_not_tags(): result = render('[[1], [1,2,3,4], ["hello"], [None], [False], [True]] []') assert str( result) == '[[1], [1,2,3,4], ["hello"], [None], [False], [True]] []' assert result.spans == []
def strip_markup(styled_text: str) -> str: """Strip rich markup from text""" text = markup.render(styled_text) return text.plain