#! /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['indented_literal_blocks'] = [ ["""\ A paragraph:: A literal block. """, """\ A paragraph: A literal block. """], ["""\ A paragraph with a space after the colons:: \n\ A literal block. """, """\ A paragraph with a space after the colons: A literal block. """], ["""\ A paragraph:: A literal block. Another paragraph:: Another literal block. With two blank lines following. A final paragraph. """, """\ A paragraph: A literal block. Another paragraph: Another literal block. With two blank lines following. A final paragraph. """], ["""\ A paragraph on more than one line:: A literal block. """, """\ A paragraph on more than one line: A literal block. """], ["""\ A paragraph on more than one line:: A literal block with no blank line above. """, """\ A paragraph on more than one line: Unexpected indentation. A literal block with no blank line above. """], ["""\ A paragraph:: A literal block. no blank line """, """\ A paragraph: A literal block. Literal block ends without a blank line; unexpected unindent. no blank line """], [r""" A paragraph\\:: A literal block. A paragraph\:: Not a literal block. """, r""" A paragraph\: A literal block. A paragraph:: Not a literal block. """], [r""" \\:: A literal block. \:: Not a literal block. """, r""" \: A literal block. :: Not a literal block. """], ["""\ A paragraph: :: A literal block. """, """\ A paragraph: A literal block. """], ["""\ A paragraph: :: A literal block. """, """\ A paragraph: A literal block. """], ["""\ A paragraph: :: A literal block. """, """\ Possible title underline, too short for the title. Treating it as ordinary text because it's so short. A paragraph: A literal block. """], ["""\ A paragraph: :: A literal block. """, """\ A paragraph: A literal block. """], ["""\ A paragraph:: Not a literal block. """, """\ A paragraph: Literal block expected; none found. Not a literal block. """], ["""\ A paragraph:: A wonky literal block. Literal line 2. Literal line 3. """, """\ A paragraph: A wonky literal block. Literal line 2. \n\ Literal line 3. """], ["""\ EOF, even though a literal block is indicated:: """, """\ EOF, even though a literal block is indicated: Literal block expected; none found. """], ] totest['quoted_literal_blocks'] = [ ["""\ A paragraph:: > A literal block. """, """\ A paragraph: > A literal block. """], ["""\ A paragraph:: > A literal block. """, """\ A paragraph: > A literal block. """], ["""\ A paragraph:: > A literal block. > Line 2. """, """\ A paragraph: > A literal block. > Line 2. """], ["""\ A paragraph:: > A literal block. Indented line. """, """\ A paragraph: > A literal block. Unexpected indentation. Indented line. """], ["""\ A paragraph:: > A literal block. Text. """, """\ A paragraph: > A literal block. Inconsistent literal block quoting. Text. """], ["""\ A paragraph:: > A literal block. $ Inconsistent line. """, """\ A paragraph: > A literal block. Inconsistent literal block quoting. $ Inconsistent line. """], ] if __name__ == '__main__': unittest.main()