Add tests for :dedent: option of code-block directive

This commit is contained in:
Latosha Maltba
2021-09-21 09:19:53 +00:00
parent 274ee481ac
commit cf9b5b5be9
2 changed files with 90 additions and 0 deletions

View File

@@ -0,0 +1,64 @@
dedent option
-------------
.. code-block::
First line
Second line
Third line
Fourth line
ReST has no fixed indent and only a change in indention is significant not the amount [1]_.
Thus, the following code inside the code block is not indent even it looks so with respect to the previous block.
.. code-block::
First line
Second line
Third line
Fourth line
Having an option "fixates" the indent to be 3 spaces, thus the code inside the code block is indented by 4 spaces.
.. code-block::
:class: dummy
First line
Second line
Third line
Fourth line
The code has 6 spaces indent, minus 4 spaces dedent should yield a 2 space indented code in the output.
.. code-block::
:dedent: 4
First line
Second line
Third line
Fourth line
Dedenting by zero, should not strip any spaces and be a no-op.
.. note::
This can be used as an alternative to ``:class: dummy`` above, to fixate the ReST indention of the block.
.. code-block::
:dedent: 0
First line
Second line
Third line
Fourth line
Dedent without argument should autostrip common whitespace at the beginning.
.. code-block::
:dedent:
First line
Second line
Third line
Fourth line
.. [1] https://docutils.sourceforge.io/docs/ref/rst/restructuredtext.html#indentation

View File

@@ -580,3 +580,29 @@ def test_linenothreshold(app, status, warning):
# literal include not using linenothreshold (no line numbers)
assert ('<span></span><span class="c1"># Very small literal include '
'(linenothreshold check)</span>' in html)
@pytest.mark.sphinx('dummy', testroot='directive-code')
def test_code_block_dedent(app, status, warning):
app.builder.build(['dedent'])
doctree = app.env.get_doctree('dedent')
codeblocks = list(doctree.traverse(nodes.literal_block))
# Note: comparison string should not have newlines at the beginning or end
text_0_indent = '''First line
Second line
Third line
Fourth line'''
text_2_indent = ''' First line
Second line
Third line
Fourth line'''
text_4_indent = ''' First line
Second line
Third line
Fourth line'''
assert codeblocks[0].astext() == text_0_indent
assert codeblocks[1].astext() == text_0_indent
assert codeblocks[2].astext() == text_4_indent
assert codeblocks[3].astext() == text_2_indent
assert codeblocks[4].astext() == text_4_indent
assert codeblocks[5].astext() == text_0_indent