Skip to content

Commit d6b2dac

Browse files
committed
Add tests for python domain
1 parent 25ae353 commit d6b2dac

File tree

3 files changed

+77
-5
lines changed

3 files changed

+77
-5
lines changed
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
python_maximum_signature_line_length = len("hello(name: str) -> str") - 1
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
domain-py-maximum_signature_line_length
2+
=======================================
3+
4+
.. py:function:: hello(name: str) -> str

tests/test_domain_py.py

Lines changed: 72 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,10 @@
99

1010
from sphinx import addnodes
1111
from sphinx.addnodes import (desc, desc_addname, desc_annotation, desc_content, desc_name,
12-
desc_optional, desc_parameter, desc_parameterlist, desc_returns,
13-
desc_sig_keyword, desc_sig_literal_number,
14-
desc_sig_literal_string, desc_sig_name, desc_sig_operator,
15-
desc_sig_punctuation, desc_sig_space, desc_signature,
16-
pending_xref)
12+
desc_optional, desc_parameter, desc_parameter_line,
13+
desc_parameterlist, desc_returns, desc_sig_keyword,
14+
desc_sig_literal_number, desc_sig_literal_string,
15+
desc_sig_name, desc_sig_operator, desc_sig_punctuation, desc_sig_space, desc_signature, pending_xref)
1716
from sphinx.domains import IndexEntry
1817
from sphinx.domains.python import (PythonDomain, PythonModuleIndex, _parse_annotation,
1918
_pseudo_parse_arglist, py_sig_re)
@@ -1439,3 +1438,71 @@ def test_signature_line_number(app, include_options):
14391438
source, line = docutils.utils.get_source_line(xrefs[0])
14401439
assert 'index.rst' in source
14411440
assert line == 1
1441+
1442+
1443+
@pytest.mark.sphinx(
1444+
'html',
1445+
confoverrides={'python_maximum_signature_line_length': len("hello(name: str) -> str")}
1446+
)
1447+
def test_pyfunction_signature_with_python_maximum_signature_line_length(app):
1448+
text = ".. py:function:: hello(name: str) -> str"
1449+
doctree = restructuredtext.parse(app, text)
1450+
expected_doctree = (addnodes.index,
1451+
[desc, ([desc_signature, ([desc_name, "hello"],
1452+
desc_parameterlist,
1453+
[desc_returns, pending_xref, "str"])],
1454+
desc_content)])
1455+
assert_node(doctree, expected_doctree)
1456+
assert_node(doctree[1], addnodes.desc, desctype="function",
1457+
domain="py", objtype="function", noindex=False)
1458+
signame_node = [desc_sig_name, "name"]
1459+
expected_sig = [desc_parameterlist, desc_parameter, (signame_node,
1460+
[desc_sig_punctuation, ":"],
1461+
desc_sig_space,
1462+
[nodes.inline, pending_xref, "str"])]
1463+
assert_node(doctree[1][0][1], expected_sig)
1464+
1465+
1466+
text = (".. py:function:: hello(names: str) -> str\n"
1467+
" :single-line-signature:")
1468+
signame_node[1] = "names"
1469+
doctree = restructuredtext.parse(app, text)
1470+
assert_node(doctree, expected_doctree)
1471+
assert_node(doctree[1], addnodes.desc, desctype="function",
1472+
domain="py", objtype="function", noindex=False)
1473+
assert_node(doctree[1][0][1], expected_sig)
1474+
1475+
text = ".. py:function:: hello(names: str) -> str"
1476+
doctree = restructuredtext.parse(app, text)
1477+
assert_node(doctree, expected_doctree)
1478+
assert_node(doctree[1], addnodes.desc, desctype="function",
1479+
domain="py", objtype="function", noindex=False)
1480+
expected_sig.insert(1, desc_parameter_line)
1481+
1482+
assert_node(doctree[1][0][1], expected_sig)
1483+
1484+
1485+
@pytest.mark.sphinx(
1486+
'html', testroot='domain-py-python_maximum_signature_line_length',
1487+
)
1488+
def test_python_python_maximum_signature_line_length(app, status, warning):
1489+
app.build()
1490+
content = (app.outdir / 'index.html').read_text(encoding='utf8')
1491+
expected = '\n'.join((
1492+
'<dl>',
1493+
(
1494+
'<dd><em class="sig-param"><span class="n"><span class="pre">name</span></span>'
1495+
'<span class="p"><span class="pre">:</span></span><span class="w"> </span>'
1496+
'<span class="n"><span class="pre">str</span></span></em>, </dd>'
1497+
),
1498+
'</dl>',
1499+
'',
1500+
(
1501+
'<span class="sig-paren">)</span> <span class="sig-return">'
1502+
'<span class="sig-return-icon">&#x2192;</span> <span class="sig-return-typehint">'
1503+
'<span class="pre">str</span></span></span>'
1504+
'<a class="headerlink" href="#hello" title="Permalink to this definition">¶</a>'
1505+
'</dt>'
1506+
),
1507+
))
1508+
assert expected in content

0 commit comments

Comments
 (0)