docutils.utils is now a package (providing a place for sub-modules)
[docutils.git] / test / test_parsers / test_rst / test_interpreted.py
blob7bdce8b9471142c474686129c1a1ddeb2017f440
1 #! /usr/bin/env python
3 # $Id$
4 # Author: David Goodger <goodger@python.org>
5 # Copyright: This module has been placed in the public domain.
7 """
8 Tests for interpreted text in docutils/parsers/rst/states.py.
9 """
11 from __init__ import DocutilsTestSupport
12 from docutils.utils.code_analyzer import with_pygments
14 def suite():
15 s = DocutilsTestSupport.ParserTestSuite()
16 if not with_pygments:
17 del(totest['code-parsing'])
18 s.generateTests(totest)
19 return s
21 totest = {}
23 totest['basics'] = [
24 ["""\
25 `interpreted`
26 """,
27 """\
28 <document source="test data">
29 <paragraph>
30 <title_reference>
31 interpreted
32 """],
33 ["""\
34 :title:`interpreted`
35 """,
36 """\
37 <document source="test data">
38 <paragraph>
39 <title_reference>
40 interpreted
41 """],
42 ["""\
43 `interpreted`:title:
44 """,
45 """\
46 <document source="test data">
47 <paragraph>
48 <title_reference>
49 interpreted
50 """],
51 ["""\
52 `interpreted \`title``
53 """,
54 """\
55 <document source="test data">
56 <paragraph>
57 <title_reference>
58 interpreted `title`
59 """],
60 ["""\
61 :title:`:not-role: interpreted`
62 """,
63 """\
64 <document source="test data">
65 <paragraph>
66 <title_reference>
67 :not-role: interpreted
68 """],
69 ["""\
70 `interpreted` but not \\`interpreted` [`] or ({[`] or [`]}) or `
71 """,
72 """\
73 <document source="test data">
74 <paragraph>
75 <title_reference>
76 interpreted
77 but not `interpreted` [`] or ({[`] or [`]}) or `
78 """],
79 ["""\
80 `interpreted`-text `interpreted`: text `interpreted`:text `text`'s interpreted
81 """,
82 """\
83 <document source="test data">
84 <paragraph>
85 <title_reference>
86 interpreted
87 -text \n\
88 <title_reference>
89 interpreted
90 : text \n\
91 <title_reference>
92 interpreted
93 :text \n\
94 <title_reference>
95 text
96 's interpreted
97 """],
98 ["""\
99 `interpreted without closing backquote
100 """,
101 """\
102 <document source="test data">
103 <paragraph>
104 <problematic ids="id2" refid="id1">
106 interpreted without closing backquote
107 <system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING">
108 <paragraph>
109 Inline interpreted text or phrase reference start-string without end-string.
110 """],
111 ["""\
112 `interpreted`:not a role if it contains whitespace:
113 """,
114 """\
115 <document source="test data">
116 <paragraph>
117 <title_reference>
118 interpreted
119 :not a role if it contains whitespace:
120 """],
121 ["""\
122 :title:`` (empty interpteted text not recognized)
123 """,
124 """\
125 <document source="test data">
126 <paragraph>
127 :title:`` (empty interpteted text not recognized)
128 """],
129 ["""\
130 :title:`\ ` (interpteted text containing empty string)
131 """,
132 """\
133 <document source="test data">
134 <paragraph>
135 <title_reference>
136 (interpteted text containing empty string)
137 """],
138 ["""\
139 `\ `:title: (interpteted text containing empty string (postfix))
140 """,
141 """\
142 <document source="test data">
143 <paragraph>
144 <title_reference>
145 (interpteted text containing empty string (postfix))
146 """],
147 ["""\
148 :title:`\ non-empty`
149 """,
150 """\
151 <document source="test data">
152 <paragraph>
153 <title_reference>
154 non-empty
155 """],
156 ["""\
157 :title:`\ ` (trailing unquoted space)
158 """,
159 """\
160 <document source="test data">
161 <paragraph>
162 :title:
163 <problematic ids="id2" refid="id1">
165 ` (trailing unquoted space)
166 <system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING">
167 <paragraph>
168 Inline interpreted text or phrase reference start-string without end-string.
169 """],
170 ["""\
171 Explicit roles for standard inline markup:
172 :emphasis:`emphasis`,
173 :strong:`strong`,
174 :literal:`inline literal text`.
175 """,
176 """\
177 <document source="test data">
178 <paragraph>
179 Explicit roles for standard inline markup:
180 <emphasis>
181 emphasis
183 <strong>
184 strong
186 <literal>
187 inline literal text
189 """],
190 ["""\
191 Simple explicit roles:
192 :ab:`abbreviation`,
193 :ac:`acronym`,
194 :sup:`superscript`,
195 :sub:`subscript`,
196 :title:`title reference`.
197 """,
198 """\
199 <document source="test data">
200 <paragraph>
201 Simple explicit roles:
202 <abbreviation>
203 abbreviation
205 <acronym>
206 acronym
208 <superscript>
209 superscript
211 <subscript>
212 subscript
214 <title_reference>
215 title reference
217 """],
220 totest['code'] = [
221 ["""\
222 Code role for inline code snippets:
223 :code:`$\alpha = \int_0^\infty f(x) dx$`.
224 """,
225 """\
226 <document source="test data">
227 <paragraph>
228 Code role for inline code snippets:
229 <literal classes="code">
230 $\x07lpha = \\int_0^\\infty f(x) dx$
232 """],
235 totest['code-parsing'] = [
236 ["""\
237 .. role:: tex(code)
238 :language: latex
240 Custom role based on code role:
241 :tex:`$\alpha = f(x)$`.
242 """,
243 """\
244 <document source="test data">
245 <paragraph>
246 Custom role based on code role:
247 <literal classes="code latex tex">
248 <inline classes="s">
250 <inline classes="nb">
251 \x07lpha \n\
252 <inline classes="o">
254 <inline classes="nb">
256 <inline classes="o">
258 <inline classes="nb">
260 <inline classes="o">
262 <inline classes="s">
265 """],
266 ["""\
267 Custom role based on code role:
269 .. role:: python(code)
270 :language: python
271 :class: testclass
273 Python code :python:`print("The end")`.
274 """,
275 """\
276 <document source="test data">
277 <paragraph>
278 Custom role based on code role:
279 <paragraph>
280 Python code \n\
281 <literal classes="code python testclass">
282 <inline classes="k">
283 print
284 <inline classes="p">
286 <inline classes="s">
287 "The end"
288 <inline classes="p">
291 """],
294 totest['references'] = [
295 ["""\
296 :PEP:`0`
297 """,
298 """\
299 <document source="test data">
300 <paragraph>
301 <reference refuri="http://www.python.org/dev/peps/pep-0000">
302 PEP 0
303 """],
304 ["""\
305 :PEP:`-1`
306 """,
307 """\
308 <document source="test data">
309 <paragraph>
310 <problematic ids="id2" refid="id1">
311 :PEP:`-1`
312 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
313 <paragraph>
314 PEP number must be a number from 0 to 9999; "-1" is invalid.
315 """],
316 ["""\
317 :RFC:`2822`
318 """,
319 """\
320 <document source="test data">
321 <paragraph>
322 <reference refuri="http://www.faqs.org/rfcs/rfc2822.html">
323 RFC 2822
324 """],
325 ["""\
326 :RFC:`0`
327 """,
328 """\
329 <document source="test data">
330 <paragraph>
331 <problematic ids="id2" refid="id1">
332 :RFC:`0`
333 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
334 <paragraph>
335 RFC number must be a number greater than or equal to 1; "0" is invalid.
336 """],
339 totest['unknown_roles'] = [
340 ["""\
341 :role:`interpreted`
342 """,
343 """\
344 <document source="test data">
345 <paragraph>
346 <problematic ids="id2" refid="id1">
347 :role:`interpreted`
348 <system_message level="1" line="1" source="test data" type="INFO">
349 <paragraph>
350 No role entry for "role" in module "docutils.parsers.rst.languages.en".
351 Trying "role" as canonical role name.
352 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
353 <paragraph>
354 Unknown interpreted text role "role".
355 """],
356 ["""\
357 `interpreted`:role:
358 """,
359 """\
360 <document source="test data">
361 <paragraph>
362 <problematic ids="id2" refid="id1">
363 `interpreted`:role:
364 <system_message level="1" line="1" source="test data" type="INFO">
365 <paragraph>
366 No role entry for "role" in module "docutils.parsers.rst.languages.en".
367 Trying "role" as canonical role name.
368 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
369 <paragraph>
370 Unknown interpreted text role "role".
371 """],
372 ["""\
373 :role:`interpreted`:role:
374 """,
375 """\
376 <document source="test data">
377 <paragraph>
378 <problematic ids="id2" refid="id1">
379 :role:`interpreted`:role:
380 <system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING">
381 <paragraph>
382 Multiple roles in interpreted text (both prefix and suffix present; only one allowed).
383 """],
384 ["""\
385 :very.long-role_name:`interpreted`
386 """,
387 """\
388 <document source="test data">
389 <paragraph>
390 <problematic ids="id2" refid="id1">
391 :very.long-role_name:`interpreted`
392 <system_message level="1" line="1" source="test data" type="INFO">
393 <paragraph>
394 No role entry for "very.long-role_name" in module "docutils.parsers.rst.languages.en".
395 Trying "very.long-role_name" as canonical role name.
396 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
397 <paragraph>
398 Unknown interpreted text role "very.long-role_name".
399 """],
400 ["""\
401 :restructuredtext-unimplemented-role:`interpreted`
402 """,
403 """\
404 <document source="test data">
405 <paragraph>
406 <problematic ids="id2" refid="id1">
407 :restructuredtext-unimplemented-role:`interpreted`
408 <system_message level="1" line="1" source="test data" type="INFO">
409 <paragraph>
410 No role entry for "restructuredtext-unimplemented-role" in module "docutils.parsers.rst.languages.en".
411 Trying "restructuredtext-unimplemented-role" as canonical role name.
412 <system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR">
413 <paragraph>
414 Interpreted text role "restructuredtext-unimplemented-role" not implemented.
415 """],
419 if __name__ == '__main__':
420 import unittest
421 unittest.main(defaultTest='suite')