Coverage for tests/conftest.py: 96.77%
29 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-09 18:38 +0100
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-09 18:38 +0100
1"""Configuration for the pytest test suite."""
3from __future__ import annotations
5from collections import ChainMap
6from typing import TYPE_CHECKING
8import pytest
9from markdown.core import Markdown
10from mkdocs.config.defaults import MkDocsConfig
12if TYPE_CHECKING:
13 from collections.abc import Iterator
14 from pathlib import Path
16 from mkdocstrings import MkdocstringsExtension, MkdocstringsPlugin
19@pytest.fixture(name="mkdocs_conf")
20def fixture_mkdocs_conf(request: pytest.FixtureRequest, tmp_path: Path) -> Iterator[MkDocsConfig]:
21 """Yield a MkDocs configuration object.
23 Parameters:
24 request: Pytest request fixture.
25 tmp_path: Pytest temporary path fixture.
27 Yields:
28 MkDocs configuration object.
29 """
30 conf = MkDocsConfig()
31 while hasattr(request, "_parent_request") and hasattr(request._parent_request, "_parent_request"):
32 request = request._parent_request
34 conf_dict = {
35 "site_name": "foo",
36 "site_url": "https://example.org/",
37 "site_dir": str(tmp_path),
38 "plugins": [{"mkdocstrings": {"default_handler": "python"}}],
39 **getattr(request, "param", {}),
40 }
41 # Re-create it manually as a workaround for https://github.com/mkdocs/mkdocs/issues/2289
42 mdx_configs = dict(ChainMap(*conf_dict.get("markdown_extensions", [])))
44 conf.load_dict(conf_dict)
45 assert conf.validate() == ([], [])
47 conf["mdx_configs"] = mdx_configs
48 conf["markdown_extensions"].insert(0, "toc") # Guaranteed to be added by MkDocs.
50 conf = conf["plugins"]["mkdocstrings"].on_config(conf)
51 conf = conf["plugins"]["autorefs"].on_config(conf)
52 yield conf
53 conf["plugins"]["mkdocstrings"].on_post_build(conf)
56@pytest.fixture(name="plugin")
57def fixture_plugin(mkdocs_conf: MkDocsConfig) -> MkdocstringsPlugin:
58 """Return a plugin instance.
60 Parameters:
61 mkdocs_conf: MkDocs configuration object (fixture).
63 Returns:
64 Configurated plugin instance.
65 """
66 plugin = mkdocs_conf["plugins"]["mkdocstrings"]
67 plugin.md = Markdown(extensions=mkdocs_conf["markdown_extensions"], extension_configs=mkdocs_conf["mdx_configs"])
68 return plugin
71@pytest.fixture(name="ext_markdown")
72def fixture_ext_markdown(plugin: MkdocstringsPlugin) -> MkdocstringsExtension:
73 """Return a Markdown instance with MkdocstringsExtension.
75 Parameters:
76 plugin: A configurated plugin instance. (fixture).
78 Returns:
79 The plugin Markdown instance.
80 """
81 return plugin.md # type: ignore[attr-defined]