"""XHTML-MP emission: prolog, head, block mapping, and well-formedness.""" from __future__ import annotations from xml.etree import ElementTree import pytest from wapdown.renderers.xhtmlmp.renderer import XHTML_PROLOG TWO_SECTIONS = "Intro.\n\n{.card One}\nFirst.\n\n{.card Two}\nSecond.\n" def parse(markup: str) -> ElementTree.Element: """Parse the page, proving it is well-formed XML. ElementTree honours the DOCTYPE declaration without trying to fetch the external DTD, so this never depends on a network round trip to wapforum.org. """ return ElementTree.fromstring(markup) class TestDocumentShape: def test_prolog_and_doctype(self, render_xhtmlmp): markup = render_xhtmlmp("Body.\n") assert markup.startswith(XHTML_PROLOG) assert 'PUBLIC "-//WAPFORUM//DTD XHTML Mobile 1.0//EN"' in markup def test_root_element_is_html(self, render_xhtmlmp): # ElementTree namespace-qualifies the tag because of the xhtml xmlns. assert parse(render_xhtmlmp("Body.\n")).tag == "{http://www.w3.org/1999/xhtml}html" def test_output_is_well_formed(self, render_xhtmlmp): parse(render_xhtmlmp(TWO_SECTIONS)) def test_no_carriage_returns(self, render_xhtmlmp): assert "\r" not in render_xhtmlmp(TWO_SECTIONS) def test_card_breaks_do_not_split_the_page(self, render_xhtmlmp): # Cards are a WAP 1.x screen-budget concern; XHTML-MP renders one # continuous page and a {.card} marker draws nothing of its own. markup = render_xhtmlmp(TWO_SECTIONS) assert markup.count("Fish & Chips" in markup class TestBlockMapping: @pytest.mark.parametrize( ("source", "expected"), [ ("Just text.\n", "
Just text.
"), ("> quoted\n", ""), ("```\ncode\n```\n", "quoted
code"), ("---\n", "
| A | B |
|---|---|
| 1 | 2 |