Beispiel #1
0
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)
Beispiel #2
0
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)
Beispiel #3
0
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>
            """),
    ]
Beispiel #4
0
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>
            """
        )
    ]
Beispiel #5
0
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)
Beispiel #6
0
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>
            """),
    ]
Beispiel #7
0
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>
            """)
    ]
Beispiel #8
0
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)
Beispiel #9
0
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>
        """)
Beispiel #10
0
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>
            """)
    ]
Beispiel #11
0
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>
        """
    )
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
0
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)
Beispiel #16
0
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)
Beispiel #17
0
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>
            """
        )
    ]
Beispiel #18
0
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>
            """)
    ]
Beispiel #19
0
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)
Beispiel #20
0
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>
            """
        )
    ]
Beispiel #21
0
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>
            """)
    ]