import nixos_render_docs as nrd import pytest import textwrap from sample_md import sample1 class Renderer(nrd.html.HTMLRenderer): def _pull_image(self, src: str) -> str: return src class Converter(nrd.md.Converter[nrd.html.HTMLRenderer]): def __init__(self, manpage_urls: dict[str, str], xrefs: dict[str, nrd.manual_structure.XrefTarget]): super().__init__() self._renderer = Renderer(manpage_urls, xrefs) def unpretty(s: str) -> str: return "".join(map(str.strip, s.splitlines())).replace('␣', ' ').replace('↵', '\n') def test_lists_styles() -> None: # nested lists rotate through a number of list style c = Converter({}, {}) assert c._render("- - - - foo") == unpretty("""
""") assert c._render("1. 1. 1. 1. 1. 1. foo") == unpretty("""
            1. foo

""") def test_xrefs() -> None: # nested lists rotate through a number of list style c = Converter({}, { 'foo': nrd.manual_structure.XrefTarget('foo', '
', 'toc1', 'title1', 'index.html'), 'bar': nrd.manual_structure.XrefTarget('bar', '
', 'toc2', 'title2', 'index.html', True), }) assert c._render("[](#foo)") == '


' assert c._render("[](#bar)") == '


' with pytest.raises(nrd.html.UnresolvedXrefError) as exc: c._render("[](#baz)") assert exc.value.args[0] == 'bad local reference, id #baz not known' def test_images() -> None: c = Converter({}, {}) assert c._render("![*alt text*](foo \"title text\")") == unpretty("""

*alt text*

""") def test_tables() -> None: c = Converter({}, {}) assert c._render(textwrap.dedent(""" | d | l | m | r | |---|:--|:-:|--:| | a | b | c | d | """)) == unpretty("""
d l m r
a b c d
""") def test_footnotes() -> None: c = Converter({}, { "bar": nrd.manual_structure.XrefTarget("bar", "", None, None, ""), "bar.__back.0": nrd.manual_structure.XrefTarget("bar.__back.0", "", None, None, ""), "bar.__back.1": nrd.manual_structure.XrefTarget("bar.__back.1", "", None, None, ""), }) assert c._render(textwrap.dedent(""" foo [^bar] baz [^bar] [^bar]: note """)) == unpretty("""

foo [1]␣ baz [1]



note[1] [1]

""") def test_full() -> None: c = Converter({ 'man(1)': 'http://example.org' }, {}) assert c._render(sample1) == unpretty("""

Warning

foo

Note

nested

↵ multiline↵

man(1) reference

some nested anchors

emphstrongnesting emph and strong␣ and code

  1. wide ordered

  2. list

  1. narrow ordered

  2. list

quotes

with nesting

↵
             nested code block↵
            
  • and lists

  • ↵
                  containing code↵
                 

and more quote

  1. list starting at 100

  2. goes on

deflist

with a quote↵ and stuff

↵
            code block↵
           
↵
            fenced block↵
           

text

more stuff in same deflist

foo

""")