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
207
208
209
210
211
212
213
|
from __future__ import unicode_literals
from mammoth.writers.markdown import MarkdownWriter
from ..testing import assert_equal
def test_special_markdown_characters_in_text_are_escaped():
writer = _create_writer()
writer.text(r"\*")
assert_equal(r"\\\*", writer.as_string())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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())
def test_special_markdown_characters_in_anchor_href_are_escaped():
writer = _create_writer()
writer.start("a", {"href": "http://example.com)Oops"})
writer.text("Hello")
writer.end("a")
assert_equal("[Hello](http://example\\.com\\)Oops)", writer.as_string())
def test_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())
def test_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())
def test_anchor_tag_ids_are_escaped():
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())
def test_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())
def test_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("", writer.as_string())
def test_image_alt_text_is_escaped():
writer = _create_writer()
writer.self_closing("img", {"src": "http://example.com/image.jpg", "alt": "Alt Text]Oops"})
assert_equal("![Alt Text\\]Oops](http://example\\.com/image\\.jpg)", writer.as_string())
def test_image_src_is_escaped():
writer = _create_writer()
writer.self_closing("img", {"src": "http://example.com/image.jpg)Oops", "alt": "Alt Text"})
assert_equal("Oops)", writer.as_string())
def test_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("", writer.as_string())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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())
def test_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()
|