from __future__ import annotations
import pytest
from mdpolish import Pipeline, RunStatus
from mdpolish.components import HtmlTableDoubleEscapeComponent
def transform(markdown: str): # type: ignore[no-untyped-def]
return Pipeline([HtmlTableDoubleEscapeComponent()]).transform(markdown)
def test_unescapes_one_layer_only_in_strict_cell_text() -> None:
markdown = (
'
'
"\noutside <"
)
result = transform(markdown)
assert result.status is RunStatus.SUCCESS
assert result.output_markdown == (
''
"\noutside <"
)
assert len(result.changes) == 3
def test_multiple_tables_and_cells_report_source_order() -> None:
markdown = " x "
result = transform(markdown)
assert result.output_markdown == " x "
assert [change.span.start for change in result.changes] == sorted(change.span.start for change in result.changes)
@pytest.mark.parametrize(
"markdown",
[
"outside <",
"",
"",
"",
"",
],
)
def test_non_strict_or_outside_content_is_preserved(markdown: str) -> None:
assert transform(markdown).output_markdown == markdown
def test_fenced_table_is_not_protected() -> None:
markdown = "```html\n\n```"
assert transform(markdown).output_markdown == "```html\n\n```"
def test_successful_output_is_idempotent() -> None:
pipeline = Pipeline([HtmlTableDoubleEscapeComponent()])
first = pipeline.transform("")
assert first.output_markdown is not None
assert pipeline.transform(first.output_markdown).changes == ()