Files
mdpolish/tests/test_mapped_line_join.py
T

91 lines
2.8 KiB
Python

from __future__ import annotations
import pytest
from mdpolish import ModifierContractError, Pipeline, RunStatus
from mdpolish.modifiers import mapped_line_join
MAPPINGS = (
("exam-", "ple", "example"),
("rule-", "based", "rule-based"),
("value.", "ues", "values"),
)
def transform(markdown: str): # type: ignore[no-untyped-def]
return Pipeline([mapped_line_join(MAPPINGS)]).transform(markdown)
@pytest.mark.parametrize(
("markdown", "expected"),
[
("an exam-\nple here", "an example here"),
("an exam-\n\nple here", "an example here"),
("a rule-\nbased method", "a rule-based method"),
("the value.\n\nues differ", "the values differ"),
("an exam-\r\n\r\nple here", "an example here"),
("an exam-\r\rple here", "an example here"),
],
)
def test_applies_exact_mapping_across_supported_line_shapes(markdown: str, expected: str) -> None:
result = transform(markdown)
assert result.status is RunStatus.SUCCESS
assert result.output_markdown == expected
assert len(result.changes) == 1
@pytest.mark.parametrize(
"markdown",
[
"an unknown-\nword here",
"an exam-\n\n\nple here",
"an exam-\r\n\nple here",
"an EXAM-\nple here",
"an exam-\nplemore here",
"an xrule-\nbased method",
],
)
def test_unknown_or_unsafe_boundaries_are_preserved(markdown: str) -> None:
assert transform(markdown).output_markdown == markdown
def test_parameters_and_results_are_independent_of_mapping_order() -> None:
first = mapped_line_join(MAPPINGS)
second = mapped_line_join(reversed(MAPPINGS))
markdown = "example becomes exam-\nple"
first_result = Pipeline([first]).transform(markdown)
second_result = Pipeline([second]).transform(markdown)
assert first_result.modifiers == second_result.modifiers
assert first_result.output_markdown == second_result.output_markdown
def test_library_contains_no_default_mapping() -> None:
modifier = mapped_line_join(())
result = Pipeline([modifier]).transform("an exam-\nple here")
assert modifier.parameters == (("mappings", ()),)
assert result.output_markdown == "an exam-\nple here"
@pytest.mark.parametrize(
"mappings",
[
(("", "right", "word"),),
(("left", "right", "two words"),),
(("left", "right", "word"), ("left", "right", "other")),
(("left", "right"),),
],
)
def test_invalid_mappings_raise_contract_error(mappings: object) -> None:
with pytest.raises(ModifierContractError):
mapped_line_join(mappings) # type: ignore[arg-type]
def test_successful_output_is_idempotent() -> None:
pipeline = Pipeline([mapped_line_join(MAPPINGS)])
first = pipeline.transform("an exam-\n\nple here")
assert first.output_markdown is not None
assert pipeline.transform(first.output_markdown).changes == ()