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
|
from pathlib import Path
import shutil
import docutils
import pytest
import sphinx
from docutils.nodes import Element
from sphinx_panels.tabs import TabbedHtmlTransform
@pytest.fixture()
def sphinx_app_factory(make_app, tmp_path: Path, monkeypatch):
monkeypatch.setattr(TabbedHtmlTransform, "get_unique_key", lambda self: "mock-uuid")
def _func(src_folder, **kwargs):
shutil.copytree(
(Path(__file__).parent / "sources" / src_folder), tmp_path / src_folder
)
srcdir = (tmp_path / src_folder).absolute()
if sphinx.version_info < (7, 2):
from sphinx.testing.path import path
srcdir = path(str(srcdir))
app = make_app(srcdir=srcdir, **kwargs)
return app
yield _func
@pytest.mark.parametrize("folder", ["tabbed_basic", "dropdown_basic"])
def test_sources(sphinx_app_factory, file_regression, folder):
app = sphinx_app_factory(folder)
app.build()
assert app._warning.getvalue() == ""
doctree = app.env.get_and_resolve_doctree("index", app.builder)
doctree["source"] = "source"
if sphinx.version_info < (7, 1):
doctree["translation_progress"] = "{'total': 0, 'translated': 0}"
if docutils.__version_info__ < (0, 22):
for node in doctree.findall(Element):
for name, value in node.attlist():
if isinstance(value, bool):
node.attributes[name] = str(int(value))
file_regression.check(
doctree.pformat(),
encoding="utf8",
extension=".xml",
)
|