#! /usr/bin/env python3 # $Id$ # Author: David Goodger # Copyright: This module has been placed in the public domain. """ Tests for states.py. """ 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[3])) 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(output, case_expected) totest = {} totest['comments'] = [ ["""\ .. A comment Paragraph. """, """\ A comment Paragraph. """], ["""\ .. A comment block. Paragraph. """, """\ A comment block. Paragraph. """], ["""\ .. A comment consisting of multiple lines starting on the line after the explicit markup start. """, """\ A comment consisting of multiple lines starting on the line after the explicit markup start. """], ["""\ .. A comment. .. Another. Paragraph. """, """\ A comment. Another. Paragraph. """], ["""\ .. A comment no blank line Paragraph. """, """\ A comment Explicit markup ends without a blank line; unexpected unindent. no blank line Paragraph. """], ["""\ .. A comment. .. Another. no blank line Paragraph. """, """\ A comment. Another. Explicit markup ends without a blank line; unexpected unindent. no blank line Paragraph. """], ["""\ .. A comment:: Paragraph. """, """\ A comment:: Paragraph. """], ["""\ .. comment:: The extra newline before the comment text prevents the parser from recognizing a directive. """, """\ comment:: The extra newline before the comment text prevents the parser from recognizing a directive. """], ["""\ .. _comment: http://example.org The extra newline before the comment text prevents the parser from recognizing a hyperlink target. """, """\ _comment: http://example.org The extra newline before the comment text prevents the parser from recognizing a hyperlink target. """], ["""\ .. [comment] Not a citation. The extra newline before the comment text prevents the parser from recognizing a citation. """, """\ [comment] Not a citation. The extra newline before the comment text prevents the parser from recognizing a citation. """], ["""\ .. |comment| image:: bogus.png The extra newline before the comment text prevents the parser from recognizing a substitution definition. """, """\ |comment| image:: bogus.png The extra newline before the comment text prevents the parser from recognizing a substitution definition. """], ["""\ .. Next is an empty comment, which serves to end this comment and prevents the following block quote being swallowed up. .. A block quote. """, """\ Next is an empty comment, which serves to end this comment and prevents the following block quote being swallowed up. A block quote. """], ["""\ term 1 definition 1 .. a comment term 2 definition 2 """, """\ term 1 definition 1 a comment term 2 definition 2 """], ["""\ term 1 definition 1 .. a comment term 2 definition 2 """, """\ term 1 definition 1 a comment term 2 definition 2 """], ["""\ + bullet paragraph 1 bullet paragraph 2 .. comment between bullet paragraphs 2 and 3 bullet paragraph 3 """, """\ bullet paragraph 1 bullet paragraph 2 comment between bullet paragraphs 2 and 3 bullet paragraph 3 """], ["""\ + bullet paragraph 1 .. comment between bullet paragraphs 1 (leader) and 2 bullet paragraph 2 """, """\ bullet paragraph 1 comment between bullet paragraphs 1 (leader) and 2 bullet paragraph 2 """], ["""\ + bullet .. trailing comment """, """\ bullet trailing comment """], ] if __name__ == '__main__': unittest.main()