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.
422 lines
10 KiB
422 lines
10 KiB
7 years ago
|
#! /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')
|