#! /usr/bin/env python3 # $Id: test_test_directives.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 test directives. """ 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['test_directives'] = [ ["""\ .. reStructuredText-test-directive:: Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive :: An optional space before the "::". """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={}, content: None An optional space before the "::". """], ["""\ .. reStructuredText-test-directive:: argument Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=['argument'], options={}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive:: argument :option: value Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=['argument'], options={'option': 'value'}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive:: :option: value Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={'option': 'value'}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive:: :option: Paragraph. """, """\ Error in "reStructuredText-test-directive" directive: invalid option value: (option: "option"; value: None) argument required but none supplied. .. reStructuredText-test-directive:: :option: Paragraph. """], ["""\ .. reStructuredText-test-directive:: Directive block contains one paragraph, with a blank line before. Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={}, content: Directive block contains one paragraph, with a blank line before. Paragraph. """], ["""\ .. reStructuredText-test-directive:: Directive block contains one paragraph, with two blank lines before. Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={}, content: Directive block contains one paragraph, with two blank lines before. Paragraph. """], ["""\ .. reStructuredText-test-directive:: Directive block contains one paragraph, no blank line before. Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=['Directive block contains one paragraph, no blank line before.'], options={}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive:: block no blank line. Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=['block'], options={}, content: None Explicit markup ends without a blank line; unexpected unindent. no blank line. Paragraph. """], ["""\ .. reStructuredText-test-directive:: argument :option: * value1 * value2 Paragraph. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=['argument'], options={'option': '* value1\\n* value2'}, content: None Paragraph. """], ["""\ .. reStructuredText-test-directive:: Directive \\block \\*contains* \\\\backslashes. """, """\ Directive processed. Type="reStructuredText-test-directive", arguments=[], options={}, content: Directive \\block \\*contains* \\\\backslashes. """], ] if __name__ == '__main__': unittest.main()