mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
282 lines
7.0 KiB
Python
282 lines
7.0 KiB
Python
"""Tests the reStructuredText domain."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
|
|
from sphinx import addnodes
|
|
from sphinx.addnodes import (
|
|
desc,
|
|
desc_addname,
|
|
desc_annotation,
|
|
desc_content,
|
|
desc_name,
|
|
desc_signature,
|
|
)
|
|
from sphinx.domains.rst import parse_directive
|
|
from sphinx.testing import restructuredtext
|
|
from sphinx.testing.util import assert_node
|
|
|
|
|
|
def test_parse_directive():
|
|
s = parse_directive(' foö ')
|
|
assert s == ('foö', '')
|
|
|
|
s = parse_directive(' .. foö :: ')
|
|
assert s == ('foö', '')
|
|
|
|
s = parse_directive('.. foö:: args1 args2')
|
|
assert s == ('foö', ' args1 args2')
|
|
|
|
s = parse_directive('.. :: bar')
|
|
assert s == ('.. :: bar', '')
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive(app):
|
|
# bare
|
|
text = '.. rst:directive:: toctree'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[desc, ([desc_signature, desc_name, '.. toctree::'], [desc_content, ()])],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[('single', 'toctree (directive)', 'directive-toctree', '', None)],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive',
|
|
domain='rst',
|
|
objtype='directive',
|
|
no_index=False,
|
|
)
|
|
|
|
# decorated
|
|
text = '.. rst:directive:: .. toctree::'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[desc, ([desc_signature, desc_name, '.. toctree::'], [desc_content, ()])],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[('single', 'toctree (directive)', 'directive-toctree', '', None)],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive',
|
|
domain='rst',
|
|
objtype='directive',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive_with_argument(app):
|
|
text = '.. rst:directive:: .. toctree:: foo bar baz'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[
|
|
desc,
|
|
(
|
|
[
|
|
desc_signature,
|
|
([desc_name, '.. toctree::'], [desc_addname, ' foo bar baz']),
|
|
],
|
|
[desc_content, ()],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[('single', 'toctree (directive)', 'directive-toctree', '', None)],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive',
|
|
domain='rst',
|
|
objtype='directive',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive_option(app):
|
|
text = '.. rst:directive:option:: foo'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[desc, ([desc_signature, desc_name, ':foo:'], [desc_content, ()])],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[
|
|
('single', ':foo: (directive option)', 'directive-option-foo', '', 'F')
|
|
],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive:option',
|
|
domain='rst',
|
|
objtype='directive:option',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive_option_with_argument(app):
|
|
text = '.. rst:directive:option:: foo: bar baz'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[
|
|
desc,
|
|
(
|
|
[
|
|
desc_signature,
|
|
([desc_name, ':foo:'], [desc_annotation, ' bar baz']),
|
|
],
|
|
[desc_content, ()],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[
|
|
('single', ':foo: (directive option)', 'directive-option-foo', '', 'F')
|
|
],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive:option',
|
|
domain='rst',
|
|
objtype='directive:option',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive_option_type(app):
|
|
text = '.. rst:directive:option:: foo\n :type: directives.flags\n'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[
|
|
desc,
|
|
(
|
|
[
|
|
desc_signature,
|
|
(
|
|
[desc_name, ':foo:'],
|
|
[desc_annotation, ' (directives.flags)'],
|
|
),
|
|
],
|
|
[desc_content, ()],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[0],
|
|
entries=[
|
|
('single', ':foo: (directive option)', 'directive-option-foo', '', 'F')
|
|
],
|
|
)
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='directive:option',
|
|
domain='rst',
|
|
objtype='directive:option',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_directive_and_directive_option(app):
|
|
text = '.. rst:directive:: foo\n\n .. rst:directive:option:: bar\n'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[
|
|
desc,
|
|
(
|
|
[desc_signature, desc_name, '.. foo::'],
|
|
[desc_content, (addnodes.index, desc)],
|
|
),
|
|
],
|
|
),
|
|
)
|
|
assert_node(
|
|
doctree[1][1][0],
|
|
entries=[
|
|
(
|
|
'pair',
|
|
'foo (directive); :bar: (directive option)',
|
|
'directive-option-foo-bar',
|
|
'',
|
|
'B',
|
|
)
|
|
],
|
|
)
|
|
assert_node(
|
|
doctree[1][1][1], ([desc_signature, desc_name, ':bar:'], [desc_content, ()])
|
|
)
|
|
assert_node(
|
|
doctree[1][1][1],
|
|
addnodes.desc,
|
|
desctype='directive:option',
|
|
domain='rst',
|
|
objtype='directive:option',
|
|
no_index=False,
|
|
)
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='root')
|
|
def test_rst_role(app):
|
|
text = '.. rst:role:: ref'
|
|
doctree = restructuredtext.parse(app, text)
|
|
assert_node(
|
|
doctree,
|
|
(
|
|
addnodes.index,
|
|
[desc, ([desc_signature, desc_name, ':ref:'], [desc_content, ()])],
|
|
),
|
|
)
|
|
assert_node(doctree[0], entries=[('single', 'ref (role)', 'role-ref', '', None)])
|
|
assert_node(
|
|
doctree[1],
|
|
addnodes.desc,
|
|
desctype='role',
|
|
domain='rst',
|
|
objtype='role',
|
|
no_index=False,
|
|
)
|