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
|
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("", 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("", 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 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 _create_writer():
return MarkdownWriter()
|