def test_admonition(): source = dedent( """ [admonition,aclass,anicon,alabel] ---- This is my test admonition ---- """ ) expected = [ remove_indentation( """ <div class="admonition aclass"> <i class="anicon"></i> <div class="content"> <div class="title">alabel</div> <div> <p>This is my test admonition</p> </div> </div> </div> """ ) ] _test(source, expected)
def test_basic_block_title(header_anchor_mock): header_anchor_mock.return_value = "XXXXXX" source = dedent(""" . Title [sometype] ++++ = A block This contains headers, paragraphs and blocks ++++ """) expected = [ remove_indentation(""" <div class="sometype"> <div class="title">Title</div> <div class="content"> <h1 id="XXXXXX">A block</h1> <p>This contains headers, paragraphs and blocks</p> </div> </div> """) ] _test(source, expected)
def test_command_toc_exclude_tags(): source = dedent(""" [tags=notoc] = Header 1 == Header 1.1 = Header 2 ::toc:exclude_tags=notoc """) parser = init_parser(source) parser.parse() result = visitlist([node.asdict() for node in parser.nodes], toc=parser.toc) assert result == [ '<h1 id="header-1">Header 1</h1>', '<h2 id="header-1.1">Header 1.1</h2>', '<h1 id="header-2">Header 2</h1>', remove_indentation(""" <div> <ul> <li> <a href="#header-2">Header 2</a> </li> </ul> </div> """), ]
def test_document(): parser = init_parser( dedent( """ This is text """ ) ) parser.parse() document = DocumentNode(parser.nodes) node = document.asdict() result = visitlist([node]) assert result == [ remove_indentation( """ <html> <head> </head> <body> <p>This is text</p> </body> </html> """ ) ]
def test_list_unordered(): source = dedent( """ * Item 1 ** Item 1.1 * Item 2 """ ) expected = [ remove_indentation( """ <ul> <li>Item 1 <ul> <li>Item 1.1</li> </ul> </li> <li>Item 2</li> </ul> """ ) ] _test(source, expected)
def test_toc_generation_from_headers(): source = dedent(""" = Header 1 == Header 1.1 ::toc: """) parser = init_parser(source) parser.parse() result = visitlist([node.asdict() for node in parser.nodes], toc=parser.toc) assert result == [ '<h1 id="header-1">Header 1</h1>', '<h2 id="header-1.1">Header 1.1</h2>', remove_indentation(""" <div> <ul> <li> <a href="#header-1">Header 1</a> <ul> <li> <a href="#header-1.1">Header 1.1</a> </li> </ul> </li> </ul> </div> """), ]
def test_command_toc_exclude_tags_multiple_tags(): toc = nodes.TocNode(entries=[ nodes.TocEntryNode( nodes.HeaderNode("Header 1", 1, "Header 1-XXXXXX", kwargs={"tags": "notoc,section"}), children=[ nodes.TocEntryNode( nodes.HeaderNode("Header 1.1", 2, "Header 1.1-XXXXXX")) ], ), nodes.TocEntryNode( nodes.HeaderNode( "Header 2", 1, "Header 2-XXXXXX", kwargs={"tags": "section"}), ), ]) parser = init_parser('::toc:exclude_tags="notoc"') parser.parse() result = visitlist([node.asdict() for node in parser.nodes], toc=toc) assert result == [ remove_indentation(""" <div> <ul> <li> <a href="#Header 2-XXXXXX">Header 2</a> </li> </ul> </div> """) ]
def test_list_mixed(): source = dedent( """ # Item 1 ** Item 1.1 # Item 2 """ ) expected = [ remove_indentation( """ <ol> <li>Item 1 <ul> <li>Item 1.1</li> </ul> </li> <li>Item 2</li> </ol> """ ) ] _test(source, expected)
def test_footnotes(): v = HTMLVisitor() result = v.visit_footnotes([ { "type": "footnote_def", "number": 1, "refanchor": "refXYZ1", "defanchor": "defXYZ1", "content": [{ "type": "sentence", "content": [ { "type": "text", "value": "Some text 1" }, ], }], }, { "type": "footnote_def", "number": 2, "refanchor": "refXYZ2", "defanchor": "defXYZ2", "content": [{ "type": "sentence", "content": [ { "type": "text", "value": "Some text 2" }, ], }], }, ]) assert result == remove_indentation(""" <div id="_footnotes"> <div id="defXYZ1"> <a href="#refXYZ1">1</a> Some text 1 </div> <div id="defXYZ2"> <a href="#refXYZ2">2</a> Some text 2 </div> </div> """)
def test_command_toc(): toc = [ { "type": "toc_entry", "level": 1, "text": "Header 1", "anchor": "Header 1-XXXXXX", "children": [ { "type": "toc_entry", "level": 2, "text": "Header 1.1", "anchor": "Header 1.1-XXXXXX", "children": [], }, ], }, { "type": "toc_entry", "level": 1, "text": "Header 2", "anchor": "Header 2-XXXXXX", "children": [], }, ] parser = init_parser("::toc:") parser.parse() result = visitlist([node.asdict() for node in parser.nodes], toc=toc) assert result == [ remove_indentation(""" <div> <ul> <li> <a href="#Header 1-XXXXXX">Header 1</a> <ul> <li> <a href="#Header 1.1-XXXXXX">Header 1.1</a> </li> </ul> </li> <li> <a href="#Header 2-XXXXXX">Header 2</a> </li> </ul> </div> """) ]
def test_footnotes(): v = HTMLVisitor() nodes = [ { "type": "footnote_def", "number": 1, "refanchor": "refXYZ1", "defanchor": "defXYZ1", "content": [ { "type": "sentence", "content": [ {"type": "text", "value": "Some text 1"}, ], } ], }, { "type": "footnote_def", "number": 2, "refanchor": "refXYZ2", "defanchor": "defXYZ2", "content": [ { "type": "sentence", "content": [ {"type": "text", "value": "Some text 2"}, ], } ], }, ] result = v._render( "footnotes", entries="".join([v.visit(i) for i in nodes]), ) assert result == remove_indentation( """ <div id="_footnotes"> <div id="defXYZ1"> <a href="#refXYZ1">1</a> Some text 1 </div> <div id="defXYZ2"> <a href="#refXYZ2">2</a> Some text 2 </div> </div> """ )
def test_include_image(): source = "<< image:/path/to/it.jpg" expected = [ remove_indentation(""" <div class="imageblock"> <div class="content"> <img src="/path/to/it.jpg"> </div> </div> """) ] _test(source, expected)
def test_include_image_alt_text(): source = dedent(""" [alt_text="This is a beautiful image"] << image:/path/to/it.jpg """) expected = [ remove_indentation(""" <div class="imageblock"> <div class="content"> <img src="/path/to/it.jpg" alt="This is a beautiful image"> </div> </div> """) ] _test(source, expected)
def test_quote(): source = dedent(""" [quote,"Star Wars, 1977"] ---- Learn about the Force, Luke. ---- """) expected = [ remove_indentation(""" <blockquote> <p>Learn about the Force, Luke.</p> <cite>Star Wars, 1977</cite> </blockquote> """) ] _test(source, expected)
def test_include_image_title(): source = dedent(""" . A nice _caption_ << image:/path/to/it.jpg """) expected = [ remove_indentation(""" <div class="imageblock"> <div class="content"> <img src="/path/to/it.jpg"> <div class="title">A nice <em>caption</em></div> </div> </div> """) ] _test(source, expected)
def test_basic_block_attributes(): source = dedent(""" [sometype,mayattr1=value1] ++++ This contains headers, paragraphs and blocks ++++ """) expected = [ remove_indentation(""" <div class="sometype"> <div class="content"> <p>This contains headers, paragraphs and blocks</p> </div> </div> """) ] _test(source, expected)
def test_container(): parser = init_parser( dedent( """ This is text """ ) ) parser.parse() document = ContainerNode(parser.nodes) node = document.asdict() result = visitlist([node]) assert result == [ remove_indentation( """ <p>This is text</p> """ ) ]
def test_command_toc(): toc = nodes.TocNode(entries=[ nodes.TocEntryNode( nodes.HeaderNode("Header 1", 1, "Header 1-XXXXXX"), children=[ nodes.TocEntryNode( nodes.HeaderNode("Header 1.1", 2, "Header 1.1-XXXXXX")) ], ), nodes.TocEntryNode(nodes.HeaderNode("Header 2", 1, "Header 2-XXXXXX"), ), ]) parser = init_parser("::toc:") parser.parse() result = visitlist([node.asdict() for node in parser.nodes], toc=toc) assert result == [ remove_indentation(""" <div> <ul> <li> <a href="#Header 1-XXXXXX">Header 1</a> <ul> <li> <a href="#Header 1.1-XXXXXX">Header 1.1</a> </li> </ul> </li> <li> <a href="#Header 2-XXXXXX">Header 2</a> </li> </ul> </div> """) ]
def test_quote_attribution_in_secondary_content_supports_styles(): source = dedent( """ [quote] ---- Learn about the Force, Luke. ---- _Star Wars_, 1977 """ ) expected = [ remove_indentation( """ <blockquote> <p>Learn about the Force, Luke.</p> <cite><p><em>Star Wars</em>, 1977</p></cite> </blockquote> """ ) ] _test(source, expected)
def test_command_footnotes(): footnotes = nodes.FootnotesNode( entries=[ nodes.FootnoteDefNode( 1, "refXYZ1", "defXYZ1", [nodes.SentenceNode([nodes.TextNode("Some text 1")])], ), nodes.FootnoteDefNode( 2, "refXYZ2", "defXYZ2", [nodes.SentenceNode([nodes.TextNode("Some text 2")])], ), ] ) parser = init_parser("::footnotes:") parser.parse() result = visitlist([node.asdict() for node in parser.nodes], footnotes=footnotes) assert result == [ remove_indentation( """ <div id="_footnotes"> <div id="defXYZ1"> <a href="#refXYZ1">1</a> Some text 1 </div> <div id="defXYZ2"> <a href="#refXYZ2">2</a> Some text 2 </div> </div> """ ) ]
def test_command_footnotes(): footnotes = [ { "type": "footnote_def", "number": 1, "refanchor": "refXYZ1", "defanchor": "defXYZ1", "content": [{ "type": "sentence", "content": [ { "type": "text", "value": "Some text 1" }, ], }], }, { "type": "footnote_def", "number": 2, "refanchor": "refXYZ2", "defanchor": "defXYZ2", "content": [{ "type": "sentence", "content": [ { "type": "text", "value": "Some text 2" }, ], }], }, ] parser = init_parser("::footnotes:") parser.parse() result = visitlist([node.asdict() for node in parser.nodes], footnotes=footnotes) assert result == [ remove_indentation(""" <div id="_footnotes"> <div id="defXYZ1"> <a href="#refXYZ1">1</a> Some text 1 </div> <div id="defXYZ2"> <a href="#refXYZ2">2</a> Some text 2 </div> </div> """) ]