实现 ClinDB 第一批清洗组件
This commit is contained in:
@@ -0,0 +1,59 @@
|
||||
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 = (
|
||||
'<table data-note="&lt;"><tr><td>&lt;5</td><td>&gt;2 &amp; x <</td></tr></table>'
|
||||
"\noutside &lt;"
|
||||
)
|
||||
result = transform(markdown)
|
||||
|
||||
assert result.status is RunStatus.SUCCESS
|
||||
assert result.output_markdown == (
|
||||
'<table data-note="&lt;"><tr><td><5</td><td>>2 & x <</td></tr></table>'
|
||||
"\noutside &lt;"
|
||||
)
|
||||
assert len(result.changes) == 3
|
||||
|
||||
|
||||
def test_multiple_tables_and_cells_report_source_order() -> None:
|
||||
markdown = "<table><tr><td>&gt;</td></tr></table> x <table><tr><th>&lt;</th></tr></table>"
|
||||
result = transform(markdown)
|
||||
|
||||
assert result.output_markdown == "<table><tr><td>></td></tr></table> x <table><tr><th><</th></tr></table>"
|
||||
assert [change.span.start for change in result.changes] == sorted(change.span.start for change in result.changes)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"markdown",
|
||||
[
|
||||
"outside &lt;",
|
||||
"<table><tr><td>&lt;</tr></table>",
|
||||
"<table><tr><td><em>&lt;</em></td></tr></table>",
|
||||
"<table><tr><td><table><tr><td>&lt;</td></tr></table></td></tr></table>",
|
||||
"<table><tbody><tr><td>&lt;</td></tr></tbody></table>",
|
||||
],
|
||||
)
|
||||
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<table><tr><td>&lt;</td></tr></table>\n```"
|
||||
assert transform(markdown).output_markdown == "```html\n<table><tr><td><</td></tr></table>\n```"
|
||||
|
||||
|
||||
def test_successful_output_is_idempotent() -> None:
|
||||
pipeline = Pipeline([HtmlTableDoubleEscapeComponent()])
|
||||
first = pipeline.transform("<table><tr><td>&lt;</td></tr></table>")
|
||||
assert first.output_markdown is not None
|
||||
assert pipeline.transform(first.output_markdown).changes == ()
|
||||
Reference in New Issue
Block a user