"""Tests parsers module.""" from __future__ import annotations from unittest.mock import Mock, patch import pytest from sphinx.parsers import RSTParser from sphinx.util.docutils import new_document @pytest.mark.sphinx('html', testroot='basic') @patch('docutils.parsers.rst.states.RSTStateMachine') def test_RSTParser_prolog_epilog(RSTStateMachine, app): document = new_document('dummy.rst') document.settings = Mock(tab_width=8, language_code='') parser = RSTParser() parser.set_application(app) # normal case text = 'hello Sphinx world\nSphinx is a document generator' parser.parse(text, document) (content, _), _ = RSTStateMachine().run.call_args assert list(content.xitems()) == [ ('dummy.rst', 0, 'hello Sphinx world'), ('dummy.rst', 1, 'Sphinx is a document generator'), ] # with rst_prolog app.config.rst_prolog = 'this is rst_prolog\nhello reST!' parser.parse(text, document) (content, _), _ = RSTStateMachine().run.call_args assert list(content.xitems()) == [ ('', 0, 'this is rst_prolog'), ('', 1, 'hello reST!'), ('', 0, ''), ('dummy.rst', 0, 'hello Sphinx world'), ('dummy.rst', 1, 'Sphinx is a document generator'), ] # with rst_epilog app.config.rst_prolog = None app.config.rst_epilog = 'this is rst_epilog\ngood-bye reST!' parser.parse(text, document) (content, _), _ = RSTStateMachine().run.call_args assert list(content.xitems()) == [ ('dummy.rst', 0, 'hello Sphinx world'), ('dummy.rst', 1, 'Sphinx is a document generator'), ('dummy.rst', 2, ''), ('', 0, 'this is rst_epilog'), ('', 1, 'good-bye reST!'), ] # expandtabs / convert whitespaces app.config.rst_prolog = None app.config.rst_epilog = None text = '\thello Sphinx world\n\v\fSphinx is a document generator' parser.parse(text, document) (content, _), _ = RSTStateMachine().run.call_args assert list(content.xitems()) == [ ('dummy.rst', 0, ' hello Sphinx world'), ('dummy.rst', 1, ' Sphinx is a document generator'), ]