#! /usr/bin/env python3 # $Id: test_replace.py 9425 2023-06-30 14:56:47Z milde $ # Author: David Goodger # Copyright: This module has been placed in the public domain. """ Tests for misc.py "replace" directive. """ from pathlib import Path import sys import unittest if __name__ == '__main__': # prepend the "docutils root" to the Python library path # so we import the local `docutils` package. sys.path.insert(0, str(Path(__file__).resolve().parents[4])) from docutils.frontend import get_default_settings from docutils.parsers.rst import Parser from docutils.utils import new_document class ParserTestCase(unittest.TestCase): def test_parser(self): parser = Parser() settings = get_default_settings(Parser) settings.warning_stream = '' for name, cases in totest.items(): for casenum, (case_input, case_expected) in enumerate(cases): with self.subTest(id=f'totest[{name!r}][{casenum}]'): document = new_document('test data', settings.copy()) parser.parse(case_input, document) output = document.pformat() self.assertEqual(case_expected, output) totest = {} totest['replace'] = [ ["""\ Test the |name| directive. .. |name| replace:: "**replace**" """, """\ Test the \n\ name directive. " replace " """], ["""\ .. |name| replace:: paragraph 1 paragraph 2 """, """\ Error in "replace" directive: may contain a single paragraph only. Substitution definition "name" empty or invalid. .. |name| replace:: paragraph 1 \n\ paragraph 2 """], ["""\ .. |name| replace:: """, """\ Content block expected for the "replace" directive; none found. replace:: Substitution definition "name" empty or invalid. .. |name| replace:: """], ["""\ .. |Python| replace:: Python, *the* best language around .. _Python: http://www.python.org/ I recommend you try |Python|_. """, """\ Python, \n\ the best language around I recommend you try \n\ Python . """], ["""\ .. |name| replace:: *error in **inline ``markup """, """\ Inline emphasis start-string without end-string. Inline strong start-string without end-string. Inline literal start-string without end-string. Substitution definition contains illegal element : * .. |name| replace:: *error in **inline ``markup """], ["""\ .. replace:: not valid outside of a substitution definition """, """\ Invalid context: the "replace" directive can only be used within a substitution definition. .. replace:: not valid outside of a substitution definition """], ] if __name__ == '__main__': unittest.main()