#! /usr/bin/env python3 # $Id: test_date.py 9829 2024-08-01 20:47:11Z aa-turner $ # Author: David Goodger # Copyright: This module has been placed in the public domain. """ Tests for the misc.py "date" directive. """ import time 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.io import _locale_encoding 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['date'] = [ ["""\ .. |date| date:: Today's date is |date|. """, """\ %s Today's date is \n\ date . """ % time.strftime('%Y-%m-%d')], ["""\ .. |date| date:: %a, %d %b %Y """, """\ %s """ % time.strftime('%a, %d %b %Y')], ["""\ .. date:: """, """\ Invalid context: the "date" directive can only be used within a substitution definition. .. date:: """], ] # some locales return non-ASCII characters for names of days or months # ensure the directive handles them correctly if _locale_encoding in ('utf-8', 'utf8', 'latin-1', 'iso-8859-1'): totest['decode_date'] = [ ["""\ .. |date| date:: täglich """, """\ täglich """], ] if __name__ == '__main__': unittest.main()