mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Consolidate warnings tests in `test_build_warnings
`
This commit is contained in:
parent
6fab64fb55
commit
4c9364896e
@ -1,40 +1,17 @@
|
|||||||
"""Test the HTML builder and check output against XPath."""
|
"""Test the HTML builder and check output against XPath."""
|
||||||
|
|
||||||
import os
|
|
||||||
import posixpath
|
import posixpath
|
||||||
import re
|
import re
|
||||||
import sys
|
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from sphinx.builders.html import validate_html_extra_path, validate_html_static_path
|
from sphinx.builders.html import validate_html_extra_path, validate_html_static_path
|
||||||
from sphinx.errors import ConfigError
|
from sphinx.errors import ConfigError
|
||||||
from sphinx.testing.util import strip_escseq
|
|
||||||
from sphinx.util.inventory import InventoryFile
|
from sphinx.util.inventory import InventoryFile
|
||||||
|
|
||||||
FIGURE_CAPTION = ".//figure/figcaption/p"
|
FIGURE_CAPTION = ".//figure/figcaption/p"
|
||||||
|
|
||||||
|
|
||||||
ENV_WARNINGS = """\
|
|
||||||
{root}/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:\\d+: \
|
|
||||||
WARNING: Explicit markup ends without a blank line; unexpected unindent.
|
|
||||||
{root}/index.rst:\\d+: WARNING: Encoding 'utf-8-sig' used for reading included \
|
|
||||||
file '{root}/wrongenc.inc' seems to be wrong, try giving an :encoding: option
|
|
||||||
{root}/index.rst:\\d+: WARNING: invalid single index entry ''
|
|
||||||
{root}/index.rst:\\d+: WARNING: image file not readable: foo.png
|
|
||||||
{root}/index.rst:\\d+: WARNING: download file not readable: {root}/nonexisting.png
|
|
||||||
{root}/undecodable.rst:\\d+: WARNING: undecodable source characters, replacing \
|
|
||||||
with "\\?": b?'here: >>>(\\\\|/)xbb<<<((\\\\|/)r)?'
|
|
||||||
"""
|
|
||||||
|
|
||||||
HTML_WARNINGS = ENV_WARNINGS + """\
|
|
||||||
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
|
||||||
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
|
||||||
{root}/index.rst:\\d+: WARNING: a suitable image for html builder not found: foo.\\*
|
|
||||||
{root}/index.rst:\\d+: WARNING: Lexing literal_block ".*" as "c" resulted in an error at token: ".*". Retrying in relaxed mode.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def check_xpath(etree, fname, path, check, be_found=True):
|
def check_xpath(etree, fname, path, check, be_found=True):
|
||||||
nodes = list(etree.findall(path))
|
nodes = list(etree.findall(path))
|
||||||
if check is None:
|
if check is None:
|
||||||
@ -71,19 +48,6 @@ def check_xpath(etree, fname, path, check, be_found=True):
|
|||||||
raise AssertionError(msg)
|
raise AssertionError(msg)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', testroot='warnings', freshenv=True)
|
|
||||||
def test_html_warnings(app, warning):
|
|
||||||
app.build(force_all=True)
|
|
||||||
warnings = strip_escseq(re.sub(re.escape(os.sep) + '{1,2}', '/', warning.getvalue()))
|
|
||||||
warnings_exp = HTML_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
|
||||||
assert re.match(warnings_exp + '$', warnings), (
|
|
||||||
"Warnings don't match:\n"
|
|
||||||
+ f'--- Expected (regex):\n{warnings_exp}\n'
|
|
||||||
+ f'--- Got:\n{warnings}'
|
|
||||||
)
|
|
||||||
sys.modules.pop('autodoc_fodder', None)
|
|
||||||
|
|
||||||
|
|
||||||
def test_html4_error(make_app, tmp_path):
|
def test_html4_error(make_app, tmp_path):
|
||||||
(tmp_path / 'conf.py').write_text('', encoding='utf-8')
|
(tmp_path / 'conf.py').write_text('', encoding='utf-8')
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
|
@ -3,7 +3,6 @@
|
|||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
|
||||||
from itertools import chain, product
|
from itertools import chain, product
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from shutil import copyfile
|
from shutil import copyfile
|
||||||
@ -16,12 +15,9 @@ from sphinx.config import Config
|
|||||||
from sphinx.errors import SphinxError
|
from sphinx.errors import SphinxError
|
||||||
from sphinx.ext.intersphinx import load_mappings, normalize_intersphinx_mapping
|
from sphinx.ext.intersphinx import load_mappings, normalize_intersphinx_mapping
|
||||||
from sphinx.ext.intersphinx import setup as intersphinx_setup
|
from sphinx.ext.intersphinx import setup as intersphinx_setup
|
||||||
from sphinx.testing.util import strip_escseq
|
|
||||||
from sphinx.util.osutil import ensuredir
|
from sphinx.util.osutil import ensuredir
|
||||||
from sphinx.writers.latex import LaTeXTranslator
|
from sphinx.writers.latex import LaTeXTranslator
|
||||||
|
|
||||||
from tests.test_builders.test_build_html import ENV_WARNINGS
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
from contextlib import chdir
|
from contextlib import chdir
|
||||||
except ImportError:
|
except ImportError:
|
||||||
@ -34,14 +30,6 @@ STYLEFILES = ['article.cls', 'fancyhdr.sty', 'titlesec.sty', 'amsmath.sty',
|
|||||||
'fncychap.sty', 'geometry.sty', 'kvoptions.sty', 'hyperref.sty',
|
'fncychap.sty', 'geometry.sty', 'kvoptions.sty', 'hyperref.sty',
|
||||||
'booktabs.sty']
|
'booktabs.sty']
|
||||||
|
|
||||||
LATEX_WARNINGS = ENV_WARNINGS + """\
|
|
||||||
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
|
||||||
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
|
||||||
{root}/index.rst:\\d+: WARNING: a suitable image for latex builder not found: foo.\\*
|
|
||||||
{root}/index.rst:\\d+: WARNING: Lexing literal_block ".*" as "c" resulted in an error at token: ".*". Retrying in relaxed mode.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
# only run latex if all needed packages are there
|
# only run latex if all needed packages are there
|
||||||
def kpsetest(*filenames):
|
def kpsetest(*filenames):
|
||||||
try:
|
try:
|
||||||
@ -174,19 +162,6 @@ def test_writer(app, status, warning):
|
|||||||
'\n\n\\end{sphinxseealso}\n\n' in result)
|
'\n\n\\end{sphinxseealso}\n\n' in result)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('latex', testroot='warnings', freshenv=True)
|
|
||||||
def test_latex_warnings(app, status, warning):
|
|
||||||
app.build(force_all=True)
|
|
||||||
warnings = strip_escseq(re.sub(re.escape(os.sep) + '{1,2}', '/', warning.getvalue()))
|
|
||||||
warnings_exp = LATEX_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
|
||||||
assert re.match(warnings_exp + '$', warnings), (
|
|
||||||
"Warnings don't match:\n"
|
|
||||||
+ f'--- Expected (regex):\n{warnings_exp}\n'
|
|
||||||
+ f'--- Got:\n{warnings}'
|
|
||||||
)
|
|
||||||
sys.modules.pop('autodoc_fodder', None)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('latex', testroot='basic')
|
@pytest.mark.sphinx('latex', testroot='basic')
|
||||||
def test_latex_basic(app, status, warning):
|
def test_latex_basic(app, status, warning):
|
||||||
app.build(force_all=True)
|
app.build(force_all=True)
|
||||||
|
@ -1,9 +1,7 @@
|
|||||||
"""Test the build process with Texinfo builder with the test root."""
|
"""Test the build process with Texinfo builder with the test root."""
|
||||||
|
|
||||||
import os
|
|
||||||
import re
|
import re
|
||||||
import subprocess
|
import subprocess
|
||||||
import sys
|
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import CalledProcessError
|
from subprocess import CalledProcessError
|
||||||
from unittest.mock import Mock
|
from unittest.mock import Mock
|
||||||
@ -12,33 +10,9 @@ import pytest
|
|||||||
|
|
||||||
from sphinx.builders.texinfo import default_texinfo_documents
|
from sphinx.builders.texinfo import default_texinfo_documents
|
||||||
from sphinx.config import Config
|
from sphinx.config import Config
|
||||||
from sphinx.testing.util import strip_escseq
|
|
||||||
from sphinx.util.docutils import new_document
|
from sphinx.util.docutils import new_document
|
||||||
from sphinx.writers.texinfo import TexinfoTranslator
|
from sphinx.writers.texinfo import TexinfoTranslator
|
||||||
|
|
||||||
from tests.test_builders.test_build_html import ENV_WARNINGS
|
|
||||||
|
|
||||||
TEXINFO_WARNINGS = ENV_WARNINGS + """\
|
|
||||||
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
|
||||||
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
|
||||||
{root}/index.rst:\\d+: WARNING: a suitable image for texinfo builder not found: foo.\\*
|
|
||||||
{root}/index.rst:\\d+: WARNING: a suitable image for texinfo builder not found: \
|
|
||||||
\\['application/pdf', 'image/svg\\+xml'\\] \\(svgimg.\\*\\)
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('texinfo', testroot='warnings', freshenv=True)
|
|
||||||
def test_texinfo_warnings(app, status, warning):
|
|
||||||
app.build(force_all=True)
|
|
||||||
warnings = strip_escseq(re.sub(re.escape(os.sep) + '{1,2}', '/', warning.getvalue()))
|
|
||||||
warnings_exp = TEXINFO_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
|
||||||
assert re.match(warnings_exp + '$', warnings), (
|
|
||||||
"Warnings don't match:\n"
|
|
||||||
+ f'--- Expected (regex):\n{warnings_exp}\n'
|
|
||||||
+ f'--- Got:\n{warnings}'
|
|
||||||
)
|
|
||||||
sys.modules.pop('autodoc_fodder', None)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('texinfo')
|
@pytest.mark.sphinx('texinfo')
|
||||||
def test_texinfo(app, status, warning):
|
def test_texinfo(app, status, warning):
|
||||||
|
72
tests/test_builders/test_build_warnings.py
Normal file
72
tests/test_builders/test_build_warnings.py
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
import os
|
||||||
|
import re
|
||||||
|
import sys
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
|
||||||
|
from sphinx.testing.util import strip_escseq
|
||||||
|
|
||||||
|
ENV_WARNINGS = """\
|
||||||
|
{root}/autodoc_fodder.py:docstring of autodoc_fodder.MarkupError:\\d+: \
|
||||||
|
WARNING: Explicit markup ends without a blank line; unexpected unindent.
|
||||||
|
{root}/index.rst:\\d+: WARNING: Encoding 'utf-8-sig' used for reading included \
|
||||||
|
file '{root}/wrongenc.inc' seems to be wrong, try giving an :encoding: option
|
||||||
|
{root}/index.rst:\\d+: WARNING: invalid single index entry ''
|
||||||
|
{root}/index.rst:\\d+: WARNING: image file not readable: foo.png
|
||||||
|
{root}/index.rst:\\d+: WARNING: download file not readable: {root}/nonexisting.png
|
||||||
|
{root}/undecodable.rst:\\d+: WARNING: undecodable source characters, replacing \
|
||||||
|
with "\\?": b?'here: >>>(\\\\|/)xbb<<<((\\\\|/)r)?'
|
||||||
|
"""
|
||||||
|
|
||||||
|
HTML_WARNINGS = ENV_WARNINGS + """\
|
||||||
|
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
||||||
|
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
||||||
|
{root}/index.rst:\\d+: WARNING: a suitable image for html builder not found: foo.\\*
|
||||||
|
{root}/index.rst:\\d+: WARNING: Lexing literal_block ".*" as "c" resulted in an error at token: ".*". Retrying in relaxed mode.
|
||||||
|
"""
|
||||||
|
|
||||||
|
LATEX_WARNINGS = ENV_WARNINGS + """\
|
||||||
|
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
||||||
|
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
||||||
|
{root}/index.rst:\\d+: WARNING: a suitable image for latex builder not found: foo.\\*
|
||||||
|
{root}/index.rst:\\d+: WARNING: Lexing literal_block ".*" as "c" resulted in an error at token: ".*". Retrying in relaxed mode.
|
||||||
|
"""
|
||||||
|
|
||||||
|
TEXINFO_WARNINGS = ENV_WARNINGS + """\
|
||||||
|
{root}/index.rst:\\d+: WARNING: unknown option: '&option'
|
||||||
|
{root}/index.rst:\\d+: WARNING: citation not found: missing
|
||||||
|
{root}/index.rst:\\d+: WARNING: a suitable image for texinfo builder not found: foo.\\*
|
||||||
|
{root}/index.rst:\\d+: WARNING: a suitable image for texinfo builder not found: \
|
||||||
|
\\['application/pdf', 'image/svg\\+xml'\\] \\(svgimg.\\*\\)
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def _check_warnings(expected_warnings: str, warning: str) -> None:
|
||||||
|
warnings = strip_escseq(re.sub(re.escape(os.sep) + '{1,2}', '/', warning))
|
||||||
|
assert re.match(f'{expected_warnings}$', warnings), (
|
||||||
|
"Warnings don't match:\n"
|
||||||
|
+ f'--- Expected (regex):\n{expected_warnings}\n'
|
||||||
|
+ f'--- Got:\n{warnings}'
|
||||||
|
)
|
||||||
|
sys.modules.pop('autodoc_fodder', None)
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('html', testroot='warnings', freshenv=True)
|
||||||
|
def test_html_warnings(app, warning):
|
||||||
|
app.build(force_all=True)
|
||||||
|
warnings_exp = HTML_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
||||||
|
_check_warnings(warnings_exp, warning.getvalue())
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('latex', testroot='warnings', freshenv=True)
|
||||||
|
def test_latex_warnings(app, warning):
|
||||||
|
app.build(force_all=True)
|
||||||
|
warnings_exp = LATEX_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
||||||
|
_check_warnings(warnings_exp, warning.getvalue())
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('texinfo', testroot='warnings', freshenv=True)
|
||||||
|
def test_texinfo_warnings(app, warning):
|
||||||
|
app.build(force_all=True)
|
||||||
|
warnings_exp = TEXINFO_WARNINGS.format(root=re.escape(app.srcdir.as_posix()))
|
||||||
|
_check_warnings(warnings_exp, warning.getvalue())
|
Loading…
Reference in New Issue
Block a user