File: test_repr.py

package info (click to toggle)
python-mistletoe 1.5.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 828 kB
  • sloc: python: 5,663; sh: 66; makefile: 40
file content (120 lines) | stat: -rw-r--r-- 5,736 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
import unittest

from mistletoe import Document
from mistletoe import block_token


class TestRepr(unittest.TestCase):
    def _check_repr_matches(self, token, expected_match):
        expected_match = "<mistletoe.{} at 0x".format(expected_match)
        output = repr(token)[:len(expected_match)]
        self.assertEqual(output, expected_match)

    # Block tokens

    def test_document(self):
        doc = Document("# Foo")
        self._check_repr_matches(doc, "block_token.Document with 1 child line_number=1")

    def test_heading(self):
        doc = Document("# Foo")
        self._check_repr_matches(doc.children[0], "block_token.Heading with 1 child line_number=1 level=1")
        self._check_repr_matches(doc.children[0].children[0], "span_token.RawText content='Foo'")

    def test_subheading(self):
        doc = Document("# Foo\n## Bar")
        self._check_repr_matches(doc.children[1], "block_token.Heading with 1 child line_number=2 level=2")
        self._check_repr_matches(doc.children[1].children[0], "span_token.RawText content='Bar'")

    def test_quote(self):
        doc = Document("> Foo")
        self._check_repr_matches(doc.children[0], "block_token.Quote with 1 child line_number=1")

    def test_paragraph(self):
        doc = Document("Foo")
        self._check_repr_matches(doc.children[0], "block_token.Paragraph with 1 child line_number=1")

    def test_blockcode(self):
        doc = Document("Foo\n\n\tBar\n\nBaz")
        self._check_repr_matches(doc.children[1], "block_token.BlockCode with 1 child line_number=3 language=''")

    def test_codefence(self):
        doc = Document("""```python\nprint("Hello, World!"\n```""")
        self._check_repr_matches(doc.children[0], "block_token.CodeFence with 1 child line_number=1 language='python'")

    def test_unordered_list(self):
        doc = Document("* Foo\n* Bar\n* Baz")
        self._check_repr_matches(doc.children[0], "block_token.List with 3 children line_number=1 loose=False start=None")
        self._check_repr_matches(doc.children[0].children[0], "block_token.ListItem with 1 child line_number=1 leader='*' indentation=0 prepend=2 loose=False")

    def test_ordered_list(self):
        doc = Document("1. Foo\n2. Bar\n3. Baz")
        self._check_repr_matches(doc.children[0], "block_token.List with 3 children line_number=1 loose=False start=1")
        self._check_repr_matches(doc.children[0].children[0], "block_token.ListItem with 1 child line_number=1 leader='1.' indentation=0 prepend=3 loose=False")

    def test_table(self):
        doc = Document("| Foo | Bar | Baz |\n|:--- |:---:| ---:|\n| Foo | Bar | Baz |\n")
        self._check_repr_matches(doc.children[0], "block_token.Table with 1 child line_number=1 column_align=[None, 0, 1]")
        self._check_repr_matches(doc.children[0].children[0], "block_token.TableRow with 3 children line_number=3 row_align=[None, 0, 1]")
        self._check_repr_matches(doc.children[0].children[0].children[0], "block_token.TableCell with 1 child line_number=3 align=None")

    def test_thematicbreak(self):
        doc = Document("Foo\n\n---\n\nBar\n")
        self._check_repr_matches(doc.children[1], "block_token.ThematicBreak line_number=3")

    # No test for ``Footnote``

    def test_htmlblock(self):
        try:
            block_token.add_token(block_token.HtmlBlock)
            doc = Document("<pre>\nFoo\n</pre>\n")
        finally:
            block_token.reset_tokens()
        self._check_repr_matches(doc.children[0], "block_token.HtmlBlock with 1 child line_number=1")
        self._check_repr_matches(doc.children[0].children[0], "span_token.RawText content='<pre>\\nFoo\\n</pre>'")

    # Span tokens

    def test_strong(self):
        doc = Document("**foo**\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.Strong with 1 child")

    def test_emphasis(self):
        doc = Document("*foo*\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.Emphasis with 1 child")

    def test_inlinecode(self):
        doc = Document("`foo`\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.InlineCode with 1 child")

    def test_strikethrough(self):
        doc = Document("~~foo~~\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.Strikethrough with 1 child")

    def test_image(self):
        doc = Document("""![Foo](http://www.example.org/ "bar")\n""")
        self._check_repr_matches(doc.children[0].children[0], "span_token.Image with 1 child src='http://www.example.org/' title='bar'")

    def test_link(self):
        doc = Document("[Foo](http://www.example.org/)\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.Link with 1 child target='http://www.example.org/' title=''")

    def test_autolink(self):
        doc = Document("Foo <http://www.example.org/>\n")
        self._check_repr_matches(doc.children[0].children[1], "span_token.AutoLink with 1 child target='http://www.example.org/' mailto=False")

    def test_escapesequence(self):
        doc = Document("\\*\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.EscapeSequence with 1 child")

    def test_soft_linebreak(self):
        doc = Document("Foo\nBar\n")
        self._check_repr_matches(doc.children[0].children[1], "span_token.LineBreak content='' soft=True")

    def test_hard_linebreak(self):
        doc = Document("Foo\\\nBar\n")
        self._check_repr_matches(doc.children[0].children[1], "span_token.LineBreak content='\\\\' soft=False")

    def test_rawtext(self):
        doc = Document("Foo\n")
        self._check_repr_matches(doc.children[0].children[0], "span_token.RawText content='Foo'")