#!/usr/bin/env python3 # :Copyright: © 2024 Günter Milde. # :License: Released under the terms of the `2-Clause BSD license`_, in short: # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. # This file is offered as-is, without any warranty. # # .. _2-Clause BSD license: https://opensource.org/licenses/BSD-2-Clause """Tests for `docutils.parsers.docutils_xml.Parser.parse()`.""" 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 import docutils_xml from docutils.utils import new_document parser = docutils_xml.Parser() class XmlParserTestCase(unittest.TestCase): def test_parse(self): 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) parser.parse(case_input, document) output = document.pformat() self.assertEqual(case_expected, output) totest = {} totest['simple'] = [ ["""\ A paragraph. """, """\ A paragraph. """], ["""\ A paragraph with two lines. """, """\ A paragraph with two lines. """], ["""\ Paragraph 1. Paragraph 2. """, """\ Paragraph 1. Paragraph 2. """], ["""\ Sub-trees are parsed, too. Line breaks are preserved. """, """\ Sub-trees are parsed, too. Line breaks are preserved. """], ] totest['inline'] = [ ["""\ emphatically """, """\ emphatically """], ["""\ strong week """, """\ strong week """], ["""\ Inline element with space at start, in the middle and after end. """, """\ Inline element with \n\ space at start, in the middle \n\ and after end. """], ] totest['attributes'] = [ ["""\ classified text """, """\ classified text """], [r""" target paragraph """, r""" target paragraph """], ] totest['invalid'] = [ ["""\ spurious text A paragraph. """, """\ spurious text A paragraph. """], ["""\ spurious text A paragraph. """, """\ spurious text A paragraph. """], ["""\ A paragraph. spurious tailing text """, """\ A paragraph. spurious tailing text """], ["""\ A paragraph. spurious tailing text """, """\ A paragraph. spurious tailing text """], ["""\ just spurious text """, """\ No XML element found. """], ] if __name__ == '__main__': unittest.main()