|
1 | 1 | # fmt: off |
| 2 | +import inspect |
2 | 3 | import os |
3 | 4 |
|
4 | 5 | import sphinx |
|
9 | 10 | from sphinx.config import Config |
10 | 11 |
|
11 | 12 | # from docutils import nodes |
12 | | -from sphinx_needs.api import add_dynamic_function, add_extra_option, add_need_type |
| 13 | +from sphinx_needs.api import add_dynamic_function, add_need_type |
13 | 14 |
|
14 | 15 | from sphinxcontrib.test_reports.directives.test_case import TestCase, TestCaseDirective |
15 | 16 | from sphinxcontrib.test_reports.directives.test_env import EnvReport, EnvReportDirective |
|
39 | 40 |
|
40 | 41 | VERSION = "1.3.2" |
41 | 42 |
|
| 43 | +# Field descriptions for better semantics |
| 44 | +FIELD_DESCRIPTIONS = { |
| 45 | + "file": "Test file name", |
| 46 | + "suite": "Test suite name", |
| 47 | + "case": "Test case name", |
| 48 | + "case_name": "Test case display name", |
| 49 | + "case_parameter": "Test case parameter", |
| 50 | + "classname": "Test class name", |
| 51 | + "time": "Test execution time", |
| 52 | + "suites": "Number of test suites", |
| 53 | + "cases": "Number of test cases", |
| 54 | + "passed": "Number of passed tests", |
| 55 | + "skipped": "Number of skipped tests", |
| 56 | + "failed": "Number of failed tests", |
| 57 | + "errors": "Number of test errors", |
| 58 | + "result": "Test result status", |
| 59 | +} |
| 60 | + |
| 61 | +try: |
| 62 | + from sphinx_needs.api import add_field as _add_field |
| 63 | + |
| 64 | + def _register_field(app, name, schema=None): |
| 65 | + description = FIELD_DESCRIPTIONS.get(name, name) |
| 66 | + _add_field(name, description, schema=schema) |
| 67 | + |
| 68 | +except ImportError: |
| 69 | + from sphinx_needs.api import add_extra_option as _add_extra_option |
| 70 | + |
| 71 | + _add_extra_option_supports_description = ( |
| 72 | + "description" in inspect.signature(_add_extra_option).parameters |
| 73 | + ) |
| 74 | + |
| 75 | + def _register_field(app, name, schema=None): |
| 76 | + kwargs = {} |
| 77 | + if _add_extra_option_supports_description: |
| 78 | + kwargs["description"] = FIELD_DESCRIPTIONS.get(name, name) |
| 79 | + if schema is not None: |
| 80 | + kwargs["schema"] = schema |
| 81 | + _add_extra_option(app, name, **kwargs) |
| 82 | + |
42 | 83 |
|
43 | 84 | def setup(app: Sphinx): |
44 | 85 | """ |
@@ -177,44 +218,41 @@ def sphinx_needs_update(app: Sphinx, config: Config) -> None: |
177 | 218 | sphinx-needs configuration |
178 | 219 | """ |
179 | 220 |
|
180 | | - # Check sphinx-needs version to determine if schema is needed |
181 | | - try: |
182 | | - needs_version = Version(sphinx_needs.__version__) |
183 | | - use_schema = needs_version >= Version("6.0.0") |
184 | | - except ImportError: |
185 | | - # If we can't determine version, assume older version |
186 | | - use_schema = False |
187 | | - |
188 | | - # Extra options |
189 | | - # For details read |
190 | | - # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_extra_option |
191 | | - |
192 | | - add_extra_option(app, getattr(config, "tr_file_option", "file")) |
193 | | - |
194 | | - add_extra_option(app, "suite") |
195 | | - add_extra_option(app, "case") |
196 | | - add_extra_option(app, "case_name") |
197 | | - add_extra_option(app, "case_parameter") |
198 | | - add_extra_option(app, "classname") |
199 | | - # Add schema parameter conditionally based on sphinx-needs version |
| 221 | + needs_version = Version(sphinx_needs.__version__) |
| 222 | + use_schema = needs_version >= Version("6.0.0") |
| 223 | + |
200 | 224 | if use_schema: |
201 | | - add_extra_option(app, "time", schema={"type": "string"}) |
202 | | - add_extra_option(app, "suites", schema={"type": "integer"}) |
203 | | - add_extra_option(app, "cases", schema={"type": "integer"}) |
204 | | - add_extra_option(app, "passed", schema={"type": "integer"}) |
205 | | - add_extra_option(app, "skipped", schema={"type": "integer"}) |
206 | | - add_extra_option(app, "failed", schema={"type": "integer"}) |
207 | | - add_extra_option(app, "errors", schema={"type": "integer"}) |
208 | | - add_extra_option(app, "result", schema={"type": "string"}) |
| 225 | + _register_field( |
| 226 | + app, getattr(config, "tr_file_option", "file"), schema={"type": "string"} |
| 227 | + ) |
| 228 | + _register_field(app, "suite", schema={"type": "string"}) |
| 229 | + _register_field(app, "case", schema={"type": "string"}) |
| 230 | + _register_field(app, "case_name", schema={"type": "string"}) |
| 231 | + _register_field(app, "case_parameter", schema={"type": "string"}) |
| 232 | + _register_field(app, "classname", schema={"type": "string"}) |
| 233 | + _register_field(app, "time", schema={"type": "string"}) |
| 234 | + _register_field(app, "suites", schema={"type": "integer"}) |
| 235 | + _register_field(app, "cases", schema={"type": "integer"}) |
| 236 | + _register_field(app, "passed", schema={"type": "integer"}) |
| 237 | + _register_field(app, "skipped", schema={"type": "integer"}) |
| 238 | + _register_field(app, "failed", schema={"type": "integer"}) |
| 239 | + _register_field(app, "errors", schema={"type": "integer"}) |
| 240 | + _register_field(app, "result", schema={"type": "string"}) |
209 | 241 | else: |
210 | | - add_extra_option(app, "time") |
211 | | - add_extra_option(app, "suites") |
212 | | - add_extra_option(app, "cases") |
213 | | - add_extra_option(app, "passed") |
214 | | - add_extra_option(app, "skipped") |
215 | | - add_extra_option(app, "failed") |
216 | | - add_extra_option(app, "errors") |
217 | | - add_extra_option(app, "result") |
| 242 | + _register_field(app, getattr(config, "tr_file_option", "file")) |
| 243 | + _register_field(app, "suite") |
| 244 | + _register_field(app, "case") |
| 245 | + _register_field(app, "case_name") |
| 246 | + _register_field(app, "case_parameter") |
| 247 | + _register_field(app, "classname") |
| 248 | + _register_field(app, "time") |
| 249 | + _register_field(app, "suites") |
| 250 | + _register_field(app, "cases") |
| 251 | + _register_field(app, "passed") |
| 252 | + _register_field(app, "skipped") |
| 253 | + _register_field(app, "failed") |
| 254 | + _register_field(app, "errors") |
| 255 | + _register_field(app, "result") |
218 | 256 | # Extra dynamic functions |
219 | 257 | # For details about usage read |
220 | 258 | # https://sphinx-needs.readthedocs.io/en/latest/api.html#sphinx_needs.api.configuration.add_dynamic_function |
|
0 commit comments