You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
421 lines
10 KiB
421 lines
10 KiB
#! /usr/bin/env python |
|
|
|
# $Id: test_interpreted.py 7936 2016-05-14 21:15:00Z milde $ |
|
# Author: David Goodger <goodger@python.org> |
|
# Copyright: This module has been placed in the public domain. |
|
|
|
""" |
|
Tests for interpreted text in docutils/parsers/rst/states.py. |
|
""" |
|
|
|
from __init__ import DocutilsTestSupport |
|
from docutils.utils.code_analyzer import with_pygments |
|
|
|
def suite(): |
|
s = DocutilsTestSupport.ParserTestSuite() |
|
if not with_pygments: |
|
del(totest['code-parsing']) |
|
s.generateTests(totest) |
|
return s |
|
|
|
totest = {} |
|
|
|
totest['basics'] = [ |
|
["""\ |
|
`interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
"""], |
|
["""\ |
|
:title:`interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
"""], |
|
["""\ |
|
`interpreted`:title: |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
"""], |
|
["""\ |
|
`interpreted \`title`` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted `title` |
|
"""], |
|
["""\ |
|
:title:`:not-role: interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
:not-role: interpreted |
|
"""], |
|
["""\ |
|
`interpreted` but not \\`interpreted` [`] or ({[`] or [`]}) or ` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
but not `interpreted` [`] or ({[`] or [`]}) or ` |
|
"""], |
|
["""\ |
|
`interpreted`-text `interpreted`: text `interpreted`:text `text`'s interpreted |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
-text \n\ |
|
<title_reference> |
|
interpreted |
|
: text \n\ |
|
<title_reference> |
|
interpreted |
|
:text \n\ |
|
<title_reference> |
|
text |
|
's interpreted |
|
"""], |
|
["""\ |
|
`interpreted without closing backquote |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
` |
|
interpreted without closing backquote |
|
<system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING"> |
|
<paragraph> |
|
Inline interpreted text or phrase reference start-string without end-string. |
|
"""], |
|
["""\ |
|
`interpreted`:not a role if it contains whitespace: |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
interpreted |
|
:not a role if it contains whitespace: |
|
"""], |
|
["""\ |
|
:title:`` (empty interpreted text not recognized) |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
:title:`` (empty interpreted text not recognized) |
|
"""], |
|
["""\ |
|
:title:`\ ` (interpreted text containing empty string) |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
(interpreted text containing empty string) |
|
"""], |
|
["""\ |
|
`\ `:title: (interpreted text containing empty string (postfix)) |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
(interpreted text containing empty string (postfix)) |
|
"""], |
|
["""\ |
|
:title:`\ non-empty` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<title_reference> |
|
non-empty |
|
"""], |
|
["""\ |
|
:title:`\ ` (trailing unquoted space) |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
:title: |
|
<problematic ids="id2" refid="id1"> |
|
` |
|
` (trailing unquoted space) |
|
<system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING"> |
|
<paragraph> |
|
Inline interpreted text or phrase reference start-string without end-string. |
|
"""], |
|
["""\ |
|
Explicit roles for standard inline markup: |
|
:emphasis:`emphasis`, |
|
:strong:`strong`, |
|
:literal:`inline literal text`. |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
Explicit roles for standard inline markup: |
|
<emphasis> |
|
emphasis |
|
, |
|
<strong> |
|
strong |
|
, |
|
<literal> |
|
inline literal text |
|
. |
|
"""], |
|
["""\ |
|
Simple explicit roles: |
|
:ab:`abbreviation`, |
|
:ac:`acronym`, |
|
:sup:`superscript`, |
|
:sub:`subscript`, |
|
:title:`title reference`. |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
Simple explicit roles: |
|
<abbreviation> |
|
abbreviation |
|
, |
|
<acronym> |
|
acronym |
|
, |
|
<superscript> |
|
superscript |
|
, |
|
<subscript> |
|
subscript |
|
, |
|
<title_reference> |
|
title reference |
|
. |
|
"""], |
|
] |
|
|
|
totest['code'] = [ |
|
["""\ |
|
Code role for inline code snippets: |
|
:code:`$\alpha = \int_0^\infty f(x) dx$`. |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
Code role for inline code snippets: |
|
<literal classes="code"> |
|
$\x07lpha = \\int_0^\\infty f(x) dx$ |
|
. |
|
"""], |
|
] |
|
|
|
totest['code-parsing'] = [ |
|
["""\ |
|
.. role:: tex(code) |
|
:language: latex |
|
|
|
Custom role based on code role: |
|
:tex:`$\alpha = f(x)$`. |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
Custom role based on code role: |
|
<literal classes="code tex latex"> |
|
<inline classes="literal string"> |
|
$ |
|
<inline classes="name builtin"> |
|
\x07lpha \n\ |
|
<inline classes="operator"> |
|
= |
|
<inline classes="name builtin"> |
|
f |
|
<inline classes="operator"> |
|
( |
|
<inline classes="name builtin"> |
|
x |
|
<inline classes="operator"> |
|
) |
|
<inline classes="literal string"> |
|
$ |
|
. |
|
"""], |
|
["""\ |
|
Custom role based on code role: |
|
|
|
.. role:: python(code) |
|
:language: python |
|
:class: testclass |
|
|
|
Python code :python:`print("The end")`. |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
Custom role based on code role: |
|
<paragraph> |
|
Python code \n\ |
|
<literal classes="code testclass python"> |
|
<inline classes="keyword"> |
|
print |
|
<inline classes="punctuation"> |
|
( |
|
<inline classes="literal string double"> |
|
"The end" |
|
<inline classes="punctuation"> |
|
) |
|
. |
|
"""], |
|
] |
|
|
|
totest['references'] = [ |
|
["""\ |
|
:PEP:`0` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<reference refuri="http://www.python.org/dev/peps/pep-0000"> |
|
PEP 0 |
|
"""], |
|
["""\ |
|
:PEP:`-1` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:PEP:`-1` |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
PEP number must be a number from 0 to 9999; "-1" is invalid. |
|
"""], |
|
["""\ |
|
:RFC:`2822` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<reference refuri="http://tools.ietf.org/html/rfc2822.html"> |
|
RFC 2822 |
|
"""], |
|
["""\ |
|
:RFC:`0` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:RFC:`0` |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
RFC number must be a number greater than or equal to 1; "0" is invalid. |
|
"""], |
|
] |
|
|
|
totest['unknown_roles'] = [ |
|
["""\ |
|
:role:`interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:role:`interpreted` |
|
<system_message level="1" line="1" source="test data" type="INFO"> |
|
<paragraph> |
|
No role entry for "role" in module "docutils.parsers.rst.languages.en". |
|
Trying "role" as canonical role name. |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
Unknown interpreted text role "role". |
|
"""], |
|
["""\ |
|
`interpreted`:role: |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
`interpreted`:role: |
|
<system_message level="1" line="1" source="test data" type="INFO"> |
|
<paragraph> |
|
No role entry for "role" in module "docutils.parsers.rst.languages.en". |
|
Trying "role" as canonical role name. |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
Unknown interpreted text role "role". |
|
"""], |
|
["""\ |
|
:role:`interpreted`:role: |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:role:`interpreted`:role: |
|
<system_message backrefs="id2" ids="id1" level="2" line="1" source="test data" type="WARNING"> |
|
<paragraph> |
|
Multiple roles in interpreted text (both prefix and suffix present; only one allowed). |
|
"""], |
|
["""\ |
|
:very.long-role_name:`interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:very.long-role_name:`interpreted` |
|
<system_message level="1" line="1" source="test data" type="INFO"> |
|
<paragraph> |
|
No role entry for "very.long-role_name" in module "docutils.parsers.rst.languages.en". |
|
Trying "very.long-role_name" as canonical role name. |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
Unknown interpreted text role "very.long-role_name". |
|
"""], |
|
["""\ |
|
:restructuredtext-unimplemented-role:`interpreted` |
|
""", |
|
"""\ |
|
<document source="test data"> |
|
<paragraph> |
|
<problematic ids="id2" refid="id1"> |
|
:restructuredtext-unimplemented-role:`interpreted` |
|
<system_message level="1" line="1" source="test data" type="INFO"> |
|
<paragraph> |
|
No role entry for "restructuredtext-unimplemented-role" in module "docutils.parsers.rst.languages.en". |
|
Trying "restructuredtext-unimplemented-role" as canonical role name. |
|
<system_message backrefs="id2" ids="id1" level="3" line="1" source="test data" type="ERROR"> |
|
<paragraph> |
|
Interpreted text role "restructuredtext-unimplemented-role" not implemented. |
|
"""], |
|
] |
|
|
|
|
|
if __name__ == '__main__': |
|
import unittest |
|
unittest.main(defaultTest='suite')
|
|
|