• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1"""
2Python Markdown
3
4A Python implementation of John Gruber's Markdown.
5
6Documentation: https://python-markdown.github.io/
7GitHub: https://github.com/Python-Markdown/markdown/
8PyPI: https://pypi.org/project/Markdown/
9
10Started by Manfred Stienstra (http://www.dwerg.net/).
11Maintained for a few years by Yuri Takhteyev (http://www.freewisdom.org).
12Currently maintained by Waylan Limberg (https://github.com/waylan),
13Dmitry Shachnev (https://github.com/mitya57) and Isaac Muse (https://github.com/facelessuser).
14
15Copyright 2007-2018 The Python Markdown Project (v. 1.7 and later)
16Copyright 2004, 2005, 2006 Yuri Takhteyev (v. 0.2-1.6b)
17Copyright 2004 Manfred Stienstra (the original version)
18
19License: BSD (see LICENSE.md for details).
20"""
21
22from markdown.test_tools import TestCase
23
24
25class TestParagraphBlocks(TestCase):
26
27    def test_simple_paragraph(self):
28        self.assertMarkdownRenders(
29            'A simple paragraph.',
30
31            '<p>A simple paragraph.</p>'
32        )
33
34    def test_blank_line_before_paragraph(self):
35        self.assertMarkdownRenders(
36            '\nA paragraph preceded by a blank line.',
37
38            '<p>A paragraph preceded by a blank line.</p>'
39        )
40
41    def test_multiline_paragraph(self):
42        self.assertMarkdownRenders(
43            self.dedent(
44                """
45                This is a paragraph
46                on multiple lines
47                with hard returns.
48                """
49            ),
50            self.dedent(
51                """
52                <p>This is a paragraph
53                on multiple lines
54                with hard returns.</p>
55                """
56            )
57        )
58
59    def test_paragraph_long_line(self):
60        self.assertMarkdownRenders(
61            'A very long long long long long long long long long long long long long long long long long long long '
62            'long long long long long long long long long long long long long paragraph on 1 line.',
63
64            '<p>A very long long long long long long long long long long long long long long long long long long '
65            'long long long long long long long long long long long long long long paragraph on 1 line.</p>'
66        )
67
68    def test_2_paragraphs_long_line(self):
69        self.assertMarkdownRenders(
70            'A very long long long long long long long long long long long long long long long long long long long '
71            'long long long long long long long long long long long long long paragraph on 1 line.\n\n'
72
73            'A new long long long long long long long long long long long long long long long '
74            'long paragraph on 1 line.',
75
76            '<p>A very long long long long long long long long long long long long long long long long long long '
77            'long long long long long long long long long long long long long long paragraph on 1 line.</p>\n'
78            '<p>A new long long long long long long long long long long long long long long long '
79            'long paragraph on 1 line.</p>'
80        )
81
82    def test_consecutive_paragraphs(self):
83        self.assertMarkdownRenders(
84            self.dedent(
85                """
86                Paragraph 1.
87
88                Paragraph 2.
89                """
90            ),
91            self.dedent(
92                """
93                <p>Paragraph 1.</p>
94                <p>Paragraph 2.</p>
95                """
96            )
97        )
98
99    def test_consecutive_paragraphs_tab(self):
100        self.assertMarkdownRenders(
101            self.dedent(
102                """
103                Paragraph followed by a line with a tab only.
104                \t
105                Paragraph after a line with a tab only.
106                """
107            ),
108            self.dedent(
109                """
110                <p>Paragraph followed by a line with a tab only.</p>
111                <p>Paragraph after a line with a tab only.</p>
112                """
113            )
114        )
115
116    def test_consecutive_paragraphs_space(self):
117        self.assertMarkdownRenders(
118            self.dedent(
119                """
120                Paragraph followed by a line with a space only.
121
122                Paragraph after a line with a space only.
123                """
124            ),
125            self.dedent(
126                """
127                <p>Paragraph followed by a line with a space only.</p>
128                <p>Paragraph after a line with a space only.</p>
129                """
130            )
131        )
132
133    def test_consecutive_multiline_paragraphs(self):
134        self.assertMarkdownRenders(
135            self.dedent(
136                """
137                Paragraph 1, line 1.
138                Paragraph 1, line 2.
139
140                Paragraph 2, line 1.
141                Paragraph 2, line 2.
142                """
143            ),
144            self.dedent(
145                """
146                <p>Paragraph 1, line 1.
147                Paragraph 1, line 2.</p>
148                <p>Paragraph 2, line 1.
149                Paragraph 2, line 2.</p>
150                """
151            )
152        )
153
154    def test_paragraph_leading_space(self):
155        self.assertMarkdownRenders(
156            ' A paragraph with 1 leading space.',
157
158            '<p>A paragraph with 1 leading space.</p>'
159        )
160
161    def test_paragraph_2_leading_spaces(self):
162        self.assertMarkdownRenders(
163            '  A paragraph with 2 leading spaces.',
164
165            '<p>A paragraph with 2 leading spaces.</p>'
166        )
167
168    def test_paragraph_3_leading_spaces(self):
169        self.assertMarkdownRenders(
170            '   A paragraph with 3 leading spaces.',
171
172            '<p>A paragraph with 3 leading spaces.</p>'
173        )
174
175    def test_paragraph_trailing_leading_space(self):
176        self.assertMarkdownRenders(
177            ' A paragraph with 1 trailing and 1 leading space. ',
178
179            '<p>A paragraph with 1 trailing and 1 leading space. </p>'
180        )
181
182    def test_paragraph_trailing_tab(self):
183        self.assertMarkdownRenders(
184            'A paragraph with 1 trailing tab.\t',
185
186            '<p>A paragraph with 1 trailing tab.    </p>'
187        )
188
189    def test_paragraphs_CR(self):
190        self.assertMarkdownRenders(
191            'Paragraph 1, line 1.\rParagraph 1, line 2.\r\rParagraph 2, line 1.\rParagraph 2, line 2.\r',
192
193            self.dedent(
194                """
195                <p>Paragraph 1, line 1.
196                Paragraph 1, line 2.</p>
197                <p>Paragraph 2, line 1.
198                Paragraph 2, line 2.</p>
199                """
200            )
201        )
202
203    def test_paragraphs_LF(self):
204        self.assertMarkdownRenders(
205            'Paragraph 1, line 1.\nParagraph 1, line 2.\n\nParagraph 2, line 1.\nParagraph 2, line 2.\n',
206
207            self.dedent(
208                """
209                <p>Paragraph 1, line 1.
210                Paragraph 1, line 2.</p>
211                <p>Paragraph 2, line 1.
212                Paragraph 2, line 2.</p>
213                """
214            )
215        )
216
217    def test_paragraphs_CR_LF(self):
218        self.assertMarkdownRenders(
219            'Paragraph 1, line 1.\r\nParagraph 1, line 2.\r\n\r\nParagraph 2, line 1.\r\nParagraph 2, line 2.\r\n',
220
221            self.dedent(
222                """
223                <p>Paragraph 1, line 1.
224                Paragraph 1, line 2.</p>
225                <p>Paragraph 2, line 1.
226                Paragraph 2, line 2.</p>
227                """
228            )
229        )
230