#! /usr/bin/env python3 # $Id: test_meta.py 9425 2023-06-30 14:56:47Z milde $ # Author: David Goodger # Copyright: This module has been placed in the public domain. """ Tests for html meta 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['meta'] = [ ["""\ .. meta:: :description: The reStructuredText plaintext markup language :keywords: plaintext,markup language """, """\ """], ["""\ .. meta:: :description lang=en: An amusing story :description lang=fr: Un histoire amusant """, """\ """], ["""\ .. meta:: :http-equiv=Content-Type: text/html; charset=ISO-8859-1 """, """\ """], ["""\ .. meta:: :name: content over multiple lines """, """\ """], ["""\ Paragraph .. meta:: :name: content """, """\ Paragraph """], ["""\ .. meta:: """, """\ Content block expected for the "meta" directive; none found. .. meta:: """], ["""\ .. meta:: :empty: """, """\ No content for meta tag "empty". :empty: """], ["""\ .. meta:: not a field list """, """\ Invalid meta directive. .. meta:: not a field list """], ["""\ .. meta:: :name: content not a field :name: content """, """\ Invalid meta directive. .. meta:: :name: content not a field :name: content """], ["""\ .. meta:: :name: content :name: content not a field """, """\ Invalid meta directive. .. meta:: :name: content :name: content not a field """], ["""\ .. meta:: :name notattval: content """, """\ Error parsing meta tag attribute "notattval": missing "=". :name notattval: content """], [r""" .. meta:: :name\:with\:colons: escaped line\ break :unescaped:embedded:colons: content """, """\ """], ] if __name__ == '__main__': unittest.main()