1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
#! /usr/bin/env python3
# $Id: test_root_prefix.py 9906 2024-08-15 08:43:38Z grubert $
# Author: Günter Milde
# Maintainer: docutils-develop@lists.sourceforge.net
# :Copyright: 2022 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
"""Test configurable root directory for included files
Cf. feature-requests #91.
"""
import os
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__).parents[3]))
from docutils.frontend import get_default_settings
from docutils.parsers.rst import Parser
from docutils.utils import new_document
ROOT_PREFIX = (Path(__file__).parent/'test_directives').as_posix()
REL_PREFIX = os.path.relpath(ROOT_PREFIX).replace('\\', '/')
class ParserTestCase(unittest.TestCase):
def test_parser(self):
parser = Parser()
settings = get_default_settings(Parser)
settings.warning_stream = ''
settings.root_prefix = ROOT_PREFIX
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['include-root'] = [
# locate included files using "include-root" setting value
["""\
.. include:: /include 11.rst
""",
"""\
<document source="test data">
<paragraph>
some text
"""],
# Do we want to support a leading backslash to signify a path root?
# ["""\
# .. include:: \include 11.rst
# """,
# """\
# <document source="test data">
# <paragraph>
# some text
# """],
["""\
.. include:: /include 11.rst
:parser: rst
""",
"""\
<document source="test data">
<paragraph>
some text
"""],
["""\
.. include:: /include 11.rst
:literal:
""",
f"""\
<document source="test data">
<literal_block source="{REL_PREFIX}/include 11.rst" xml:space="preserve">
some text
"""],
["""\
.. include:: /include 11.rst
:code:
""",
f"""\
<document source="test data">
<literal_block classes="code" source="{REL_PREFIX}/include 11.rst" xml:space="preserve">
some text
"""],
# search included CSV files using "include-root" setting value
["""\
.. CSV-table::
:file: /include 11.rst
""",
"""\
<document source="test data">
<table>
<tgroup cols="1">
<colspec colwidth="100">
<tbody>
<row>
<entry>
<paragraph>
some text
"""],
["""\
.. raw:: txt
:file: /include 11.rst
""",
f"""\
<document source="test data">
<raw format="txt" source="{REL_PREFIX}/include 11.rst" xml:space="preserve">
some text
"""],
]
if __name__ == '__main__':
unittest.main()
|