File: test_root_prefix.py

package info (click to toggle)
python-docutils 0.22%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: experimental
  • size: 11,448 kB
  • sloc: python: 53,302; lisp: 14,475; xml: 1,807; javascript: 1,032; makefile: 102; sh: 96
file content (131 lines) | stat: -rwxr-xr-x 3,408 bytes parent folder | download
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()