summaryrefslogtreecommitdiffstats
path: root/tests/test_builders/test_build_html.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_builders/test_build_html.py')
-rw-r--r--tests/test_builders/test_build_html.py77
1 files changed, 67 insertions, 10 deletions
diff --git a/tests/test_builders/test_build_html.py b/tests/test_builders/test_build_html.py
index 1fa3ba4..8db0790 100644
--- a/tests/test_builders/test_build_html.py
+++ b/tests/test_builders/test_build_html.py
@@ -1,5 +1,6 @@
"""Test the HTML builder and check output against XPath."""
+import contextlib
import os
import posixpath
import re
@@ -8,7 +9,7 @@ import pytest
from sphinx.builders.html import validate_html_extra_path, validate_html_static_path
from sphinx.deprecation import RemovedInSphinx80Warning
-from sphinx.errors import ConfigError
+from sphinx.errors import ConfigError, ThemeError
from sphinx.util.console import strip_colors
from sphinx.util.inventory import InventoryFile
@@ -16,6 +17,31 @@ from tests.test_builders.xpath_data import FIGURE_CAPTION
from tests.test_builders.xpath_util import check_xpath
+def test_html_sidebars_error(make_app, tmp_path):
+ (tmp_path / 'conf.py').touch()
+ (tmp_path / 'index.rst').touch()
+ app = make_app(
+ buildername='html',
+ srcdir=tmp_path,
+ confoverrides={'html_sidebars': {'index': 'searchbox.html'}},
+ )
+
+ # Test that the error is logged
+ warnings = app.warning.getvalue()
+ assert ("ERROR: Values in 'html_sidebars' must be a list of strings. "
+ "At least one pattern has a string value: 'index'. "
+ "Change to `html_sidebars = {'index': ['searchbox.html']}`.") in warnings
+
+ # But that the value is unchanged.
+ # (Remove this bit of the test in Sphinx 8)
+ def _html_context_hook(app, pagename, templatename, context, doctree):
+ assert context["sidebars"] == 'searchbox.html'
+ app.connect('html-page-context', _html_context_hook)
+ with contextlib.suppress(ThemeError):
+ # ignore template rendering issues (ThemeError).
+ app.build()
+
+
def test_html4_error(make_app, tmp_path):
(tmp_path / 'conf.py').write_text('', encoding='utf-8')
with pytest.raises(
@@ -131,24 +157,24 @@ def test_html_inventory(app):
'py-modindex',
'genindex',
'search'}
- assert invdata['std:label']['modindex'] == ('Python',
+ assert invdata['std:label']['modindex'] == ('Project name not set',
'',
'https://www.google.com/py-modindex.html',
'Module Index')
- assert invdata['std:label']['py-modindex'] == ('Python',
+ assert invdata['std:label']['py-modindex'] == ('Project name not set',
'',
'https://www.google.com/py-modindex.html',
'Python Module Index')
- assert invdata['std:label']['genindex'] == ('Python',
+ assert invdata['std:label']['genindex'] == ('Project name not set',
'',
'https://www.google.com/genindex.html',
'Index')
- assert invdata['std:label']['search'] == ('Python',
+ assert invdata['std:label']['search'] == ('Project name not set',
'',
'https://www.google.com/search.html',
'Search Page')
assert set(invdata['std:doc'].keys()) == {'index'}
- assert invdata['std:doc']['index'] == ('Python',
+ assert invdata['std:doc']['index'] == ('Project name not set',
'',
'https://www.google.com/index.html',
'The basic Sphinx documentation for testing')
@@ -222,8 +248,8 @@ def test_html_sidebar(app, status, warning):
app.build(force_all=True)
result = (app.outdir / 'index.html').read_text(encoding='utf8')
assert ('<div class="sphinxsidebar" role="navigation" '
- 'aria-label="main navigation">' in result)
- assert '<h1 class="logo"><a href="#">Python</a></h1>' in result
+ 'aria-label="Main">' in result)
+ assert '<h1 class="logo"><a href="#">Project name not set</a></h1>' in result
assert '<h3>Navigation</h3>' in result
assert '<h3>Related Topics</h3>' in result
assert '<h3 id="searchlabel">Quick search</h3>' in result
@@ -237,7 +263,7 @@ def test_html_sidebar(app, status, warning):
app.build(force_all=True)
result = (app.outdir / 'index.html').read_text(encoding='utf8')
assert ('<div class="sphinxsidebar" role="navigation" '
- 'aria-label="main navigation">' in result)
+ 'aria-label="Main">' in result)
assert '<h1 class="logo"><a href="#">Python</a></h1>' not in result
assert '<h3>Navigation</h3>' not in result
assert '<h3>Related Topics</h3>' in result
@@ -251,7 +277,7 @@ def test_html_sidebar(app, status, warning):
app.build(force_all=True)
result = (app.outdir / 'index.html').read_text(encoding='utf8')
assert ('<div class="sphinxsidebar" role="navigation" '
- 'aria-label="main navigation">' not in result)
+ 'aria-label="Main">' not in result)
assert '<h1 class="logo"><a href="#">Python</a></h1>' not in result
assert '<h3>Navigation</h3>' not in result
assert '<h3>Related Topics</h3>' not in result
@@ -376,3 +402,34 @@ def test_html_remove_sources_before_write_gh_issue_10786(app, warning):
file = os.fsdecode(target)
assert f'WARNING: cannot copy image file {file!r}: {file!s} does not exist' == ws[-1]
+
+
+@pytest.mark.sphinx('html', testroot='domain-py-python_maximum_signature_line_length',
+ confoverrides={'python_maximum_signature_line_length': 1})
+def test_html_pep_695_one_type_per_line(app, cached_etree_parse):
+ app.build()
+ fname = app.outdir / 'index.html'
+ etree = cached_etree_parse(fname)
+
+ class chk:
+ def __init__(self, expect):
+ self.expect = expect
+
+ def __call__(self, nodes):
+ assert len(nodes) == 1, nodes
+ objnode = ''.join(nodes[0].itertext()).replace('\n\n', '')
+ objnode = objnode.rstrip(chr(182)) # remove '¶' symbol
+ objnode = objnode.strip('\n') # remove surrounding new lines
+ assert objnode == self.expect
+
+ # each signature has a dangling ',' at the end of its parameters lists
+ check_xpath(etree, fname, r'.//dt[@id="generic_foo"][1]',
+ chk('generic_foo[\nT,\n]()'))
+ check_xpath(etree, fname, r'.//dt[@id="generic_bar"][1]',
+ chk('generic_bar[\nT,\n](\nx: list[T],\n)'))
+ check_xpath(etree, fname, r'.//dt[@id="generic_ret"][1]',
+ chk('generic_ret[\nR,\n]() → R'))
+ check_xpath(etree, fname, r'.//dt[@id="MyGenericClass"][1]',
+ chk('class MyGenericClass[\nX,\n]'))
+ check_xpath(etree, fname, r'.//dt[@id="MyList"][1]',
+ chk('class MyList[\nT,\n](list[T])'))