aboutsummaryrefslogtreecommitdiff
path: root/tests/writers/markdown_tests.py
blob: 27d6d56e9c1b36a0f899bc6c00a34c1f29294126 (plain)
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
from __future__ import unicode_literals

from nose.tools import istest, assert_equal

from mammoth.writers.markdown import MarkdownWriter


@istest
def special_markdown_characters_are_escaped():
    writer = _create_writer()
    writer.text(r"\*")
    assert_equal(r"\\\*", writer.as_string())


@istest
def unrecognised_elements_are_treated_as_normal_text():
    writer = _create_writer()
    writer.start("blah");
    writer.text("Hello");
    writer.end("blah");
    assert_equal("Hello", writer.as_string())


@istest
def paragraphs_are_terminated_with_double_new_line():
    writer = _create_writer()
    writer.start("p");
    writer.text("Hello");
    writer.end("p");
    assert_equal("Hello\n\n", writer.as_string())


@istest
def h1_elements_are_converted_to_heading_with_leading_hash():
    writer = _create_writer()
    writer.start("h1");
    writer.text("Hello");
    writer.end("h1");
    assert_equal("# Hello\n\n", writer.as_string())


@istest
def h6_elements_are_converted_to_heading_with_six_leading_hashes():
    writer = _create_writer()
    writer.start("h6");
    writer.text("Hello");
    writer.end("h6");
    assert_equal("###### Hello\n\n", writer.as_string())


@istest
def br_is_written_as_two_spaces_followed_by_newline():
    writer = _create_writer()
    writer.text("Hello");
    writer.self_closing("br");
    assert_equal("Hello  \n", writer.as_string())


@istest
def strong_text_is_surrounded_by_two_underscores():
    writer = _create_writer()
    writer.text("Hello ");
    writer.start("strong");
    writer.text("World")
    writer.end("strong")
    assert_equal("Hello __World__", writer.as_string())


@istest
def emphasised_text_is_surrounded_by_one_asterix():
    writer = _create_writer()
    writer.text("Hello ");
    writer.start("em");
    writer.text("World")
    writer.end("em")
    assert_equal("Hello *World*", writer.as_string())


@istest
def anchor_tags_are_written_as_hyperlinks():
    writer = _create_writer()
    writer.start("a", {"href": "http://example.com"});
    writer.text("Hello");
    writer.end("a");
    assert_equal("[Hello](http://example.com)", writer.as_string())
    

@istest
def anchor_tags_without_href_attribute_are_treated_as_ordinary_text():
    writer = _create_writer()
    writer.start("a");
    writer.text("Hello");
    writer.end("a");
    assert_equal("Hello", writer.as_string())
    

@istest
def elements_with_ids_have_anchor_tags_with_ids_appended_to_start_of_markdown_element():
    writer = _create_writer()
    writer.start("h1", {"id": "start"})
    writer.text("Hello")
    writer.end("h1")
    assert_equal('# <a id="start"></a>Hello\n\n', writer.as_string())
    

@istest
def links_have_anchors_before_opening_square_bracket():
    writer = _create_writer()
    writer.start("a", {"href": "http://example.com", "id": "start"})
    writer.text("Hello")
    writer.end("a")
    assert_equal('<a id="start"></a>[Hello](http://example.com)', writer.as_string())
    

@istest
def image_elements_are_written_as_markdown_images():
    writer = _create_writer()
    writer.self_closing("img", {"src": "http://example.com/image.jpg", "alt": "Alt Text"})
    assert_equal("![Alt Text](http://example.com/image.jpg)", writer.as_string())
    

@istest
def images_are_written_even_if_they_dont_have_alt_text():
    writer = _create_writer()
    writer.self_closing("img", {"src": "http://example.com/image.jpg"})
    assert_equal("![](http://example.com/image.jpg)", writer.as_string())
    

@istest
def images_are_written_even_if_they_dont_have_a_src_attribute():
    writer = _create_writer()
    writer.self_closing("img", {"alt": "Alt Text"})
    assert_equal("![Alt Text]()", writer.as_string())
    

@istest
def image_elements_are_ignored_if_they_have_no_src_and_no_alt_text():
    writer = _create_writer()
    writer.self_closing("img")
    assert_equal("", writer.as_string())


@istest
def list_item_outside_of_list_is_treated_as_unordered_list():
    writer = _create_writer()
    writer.start("li")
    writer.text("Fruit")
    writer.end("li")
    assert_equal("- Fruit\n", writer.as_string())


@istest
def ol_element_is_written_as_ordered_list_with_sequential_numbering():
    writer = _create_writer()
    writer.start("ol")
    writer.start("li")
    writer.text("Fruit")
    writer.end("li")
    writer.start("li")
    writer.text("Condiments")
    writer.end("li")
    writer.end("ol")
    assert_equal("1. Fruit\n2. Condiments\n\n", writer.as_string())


@istest
def ul_element_is_written_as_unordered_list_using_hyphens_as_bullets():
    writer = _create_writer()
    writer.start("ul")
    writer.start("li")
    writer.text("Fruit")
    writer.end("li")
    writer.start("li")
    writer.text("Condiments")
    writer.end("li")
    writer.end("ul")
    assert_equal("- Fruit\n- Condiments\n\n", writer.as_string())


@istest
def numbering_is_separate_for_nested_list_and_parent_list():
    writer = _create_writer()
    writer.start("ol")
    
    writer.start("li")
    writer.text("Fruit")
    writer.start("ol")
    writer.start("li")
    writer.text("Apple")
    writer.end("li")
    writer.start("li")
    writer.text("Banana")
    writer.end("li")
    writer.end("ol")
    writer.end("li")
    
    writer.start("li")
    writer.text("Condiments")
    writer.end("li")
    writer.end("ol")
    assert_equal("1. Fruit\n\t1. Apple\n\t2. Banana\n2. Condiments\n\n", writer.as_string())
        


def _create_writer():
    return MarkdownWriter()