sphinx/tests/test_directives/test_directive_patch.py
2024-08-11 14:58:56 +01:00

125 lines
3.9 KiB
Python

"""Test the patched directives."""
import pytest
from docutils import nodes
from sphinx.testing import restructuredtext
from sphinx.testing.util import assert_node
def test_code_directive(app):
# normal case
text = '.. code::\n\n print("hello world")\n'
doctree = restructuredtext.parse(app, text)
assert_node(doctree, [nodes.document, nodes.literal_block, 'print("hello world")'])
assert_node(doctree[0], language='default', highlight_args={})
# with language
text = '.. code:: python\n\n print("hello world")\n'
doctree = restructuredtext.parse(app, text)
assert_node(doctree, [nodes.document, nodes.literal_block, 'print("hello world")'])
assert_node(doctree[0], language='python', highlight_args={})
# :number-lines: option
text = '.. code:: python\n :number-lines:\n\n print("hello world")\n'
doctree = restructuredtext.parse(app, text)
assert_node(doctree, [nodes.document, nodes.literal_block, 'print("hello world")'])
assert_node(doctree[0], language='python', linenos=True, highlight_args={})
# :number-lines: option
text = '.. code:: python\n :number-lines: 5\n\n print("hello world")\n'
doctree = restructuredtext.parse(app, text)
assert_node(doctree, [nodes.document, nodes.literal_block, 'print("hello world")'])
assert_node(
doctree[0], language='python', linenos=True, highlight_args={'linenostart': 5}
)
@pytest.mark.sphinx(testroot='directive-csv-table')
def test_csv_table_directive(app):
# relative path from current document
text = '.. csv-table::\n :file: example.csv\n'
doctree = restructuredtext.parse(app, text, docname='subdir/index')
assert_node(
doctree,
(
[
nodes.table,
nodes.tgroup,
(nodes.colspec, nodes.colspec, nodes.colspec, [nodes.tbody, nodes.row]),
],
),
)
assert_node(
doctree[0][0][3][0],
(
[nodes.entry, nodes.paragraph, 'FOO'],
[nodes.entry, nodes.paragraph, 'BAR'],
[nodes.entry, nodes.paragraph, 'BAZ'],
),
)
# absolute path from source directory
text = '.. csv-table::\n :file: /example.csv\n'
doctree = restructuredtext.parse(app, text, docname='subdir/index')
assert_node(
doctree,
(
[
nodes.table,
nodes.tgroup,
(nodes.colspec, nodes.colspec, nodes.colspec, [nodes.tbody, nodes.row]),
],
),
)
assert_node(
doctree[0][0][3][0],
(
[nodes.entry, nodes.paragraph, 'foo'],
[nodes.entry, nodes.paragraph, 'bar'],
[nodes.entry, nodes.paragraph, 'baz'],
),
)
def test_math_directive(app):
# normal case
text = '.. math:: E = mc^2'
doctree = restructuredtext.parse(app, text)
assert_node(doctree, [nodes.document, nodes.math_block, 'E = mc^2\n\n'])
# :name: option
text = '.. math:: E = mc^2\n :name: eq1\n'
doctree = restructuredtext.parse(app, text)
assert_node(
doctree, [nodes.document, (nodes.target, [nodes.math_block, 'E = mc^2\n\n'])]
)
assert_node(doctree[1], nodes.math_block, docname='index', label='eq1', number=1)
# :label: option
text = '.. math:: E = mc^2\n :label: eq2\n'
doctree = restructuredtext.parse(app, text)
assert_node(
doctree, [nodes.document, (nodes.target, [nodes.math_block, 'E = mc^2\n\n'])]
)
assert_node(doctree[1], nodes.math_block, docname='index', label='eq2', number=2)
# :label: option without value
text = '.. math:: E = mc^2\n :label:\n'
doctree = restructuredtext.parse(app, text)
assert_node(
doctree, [nodes.document, (nodes.target, [nodes.math_block, 'E = mc^2\n\n'])]
)
assert_node(
doctree[1],
nodes.math_block,
ids=['equation-index-0'],
docname='index',
label='index:0',
number=3,
)