mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
* flake8-builtins ('A') * flake8-blind-except ('BLE') * flake8-copyright ('CPY') * eradicate ('ERA') * flake8-boolean-trap ('FBT') * flake8-fixme ('FIX') * flake8-implicit-str-concat ('ISC') * pep8-naming ('N') * flake8-use-pathlib ('PTH') * flake8-self ('SLF') * tryceratops ('TRY')
1105 lines
33 KiB
Python
1105 lines
33 KiB
Python
"""Test the HTML builder and check output against XPath."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import re
|
|
|
|
import pytest
|
|
|
|
from tests.test_builders.xpath_data import FIGURE_CAPTION
|
|
from tests.test_builders.xpath_util import check_xpath
|
|
|
|
|
|
@pytest.mark.sphinx('html', testroot='numfig')
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig')
|
|
def test_numfig_disabled_warn(app):
|
|
app.build()
|
|
warnings = app.warning.getvalue()
|
|
assert 'index.rst:47: WARNING: numfig is disabled. :numref: is ignored.' in warnings
|
|
assert 'index.rst:56: WARNING: invalid numfig_format: invalid' not in warnings
|
|
assert 'index.rst:57: WARNING: invalid numfig_format: Fig %s %s' not in warnings
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('fname', 'path', 'check', 'be_found'),
|
|
[
|
|
('index.html', FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
|
|
('index.html', ".//table/caption/span[@class='caption-number']", None, True),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
None,
|
|
True,
|
|
),
|
|
('index.html', './/li/p/code/span', '^fig1$', True),
|
|
('index.html', './/li/p/code/span', '^Figure%s$', True),
|
|
('index.html', './/li/p/code/span', '^table-1$', True),
|
|
('index.html', './/li/p/code/span', '^Table:%s$', True),
|
|
('index.html', './/li/p/code/span', '^CODE_1$', True),
|
|
('index.html', './/li/p/code/span', '^Code-%s$', True),
|
|
('index.html', './/li/p/a/span', '^Section 1$', True),
|
|
('index.html', './/li/p/a/span', '^Section 2.1$', True),
|
|
('index.html', './/li/p/code/span', '^Fig.{number}$', True),
|
|
('index.html', './/li/p/a/span', '^Sect.1 Foo$', True),
|
|
('foo.html', FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
|
|
('foo.html', ".//table/caption/span[@class='caption-number']", None, True),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
None,
|
|
True,
|
|
),
|
|
('bar.html', FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
|
|
('bar.html', ".//table/caption/span[@class='caption-number']", None, True),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
None,
|
|
True,
|
|
),
|
|
('baz.html', FIGURE_CAPTION + "/span[@class='caption-number']", None, True),
|
|
('baz.html', ".//table/caption/span[@class='caption-number']", None, True),
|
|
(
|
|
'baz.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
None,
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx('html', testroot='numfig')
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig')
|
|
def test_numfig_disabled(app, cached_etree_parse, fname, path, check, be_found):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / fname), fname, path, check, be_found)
|
|
|
|
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
srcdir='test_numfig_without_numbered_toctree_warn',
|
|
confoverrides={'numfig': True},
|
|
)
|
|
def test_numfig_without_numbered_toctree_warn(app):
|
|
app.build()
|
|
# remove :numbered: option
|
|
index = (app.srcdir / 'index.rst').read_text(encoding='utf8')
|
|
index = re.sub(':numbered:.*', '', index)
|
|
(app.srcdir / 'index.rst').write_text(index, encoding='utf8')
|
|
app.build()
|
|
|
|
warnings = app.warning.getvalue()
|
|
assert (
|
|
'index.rst:47: WARNING: numfig is disabled. :numref: is ignored.'
|
|
) not in warnings
|
|
assert (
|
|
'index.rst:55: WARNING: Failed to create a cross reference. Any number is not assigned: index'
|
|
) in warnings
|
|
assert 'index.rst:56: WARNING: invalid numfig_format: invalid' in warnings
|
|
assert 'index.rst:57: WARNING: invalid numfig_format: Fig %s %s' in warnings
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('fname', 'path', 'check', 'be_found'),
|
|
[
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 9 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 10 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 9 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 10 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 9 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 10 $',
|
|
True,
|
|
),
|
|
('index.html', './/li/p/a/span', '^Fig. 9$', True),
|
|
('index.html', './/li/p/a/span', '^Figure6$', True),
|
|
('index.html', './/li/p/a/span', '^Table 9$', True),
|
|
('index.html', './/li/p/a/span', '^Table:6$', True),
|
|
('index.html', './/li/p/a/span', '^Listing 9$', True),
|
|
('index.html', './/li/p/a/span', '^Code-6$', True),
|
|
('index.html', './/li/p/code/span', '^foo$', True),
|
|
('index.html', './/li/p/code/span', '^bar_a$', True),
|
|
('index.html', './/li/p/a/span', '^Fig.9 should be Fig.1$', True),
|
|
('index.html', './/li/p/code/span', '^Sect.{number}$', True),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 5 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 7 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 8 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 5 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 7 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 8 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 5 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 7 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 8 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 6 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 6 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 6 $',
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
srcdir='test_numfig_without_numbered_toctree',
|
|
confoverrides={'numfig': True},
|
|
)
|
|
def test_numfig_without_numbered_toctree(
|
|
app, cached_etree_parse, fname, path, check, be_found
|
|
):
|
|
# remove :numbered: option
|
|
index = (app.srcdir / 'index.rst').read_text(encoding='utf8')
|
|
index = re.sub(':numbered:.*', '', index)
|
|
(app.srcdir / 'index.rst').write_text(index, encoding='utf8')
|
|
|
|
if not list(app.outdir.iterdir()):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / fname), fname, path, check, be_found)
|
|
|
|
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={'numfig': True},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_on')
|
|
def test_numfig_with_numbered_toctree_warn(app):
|
|
app.build()
|
|
warnings = app.warning.getvalue()
|
|
assert (
|
|
'index.rst:47: WARNING: numfig is disabled. :numref: is ignored.'
|
|
) not in warnings
|
|
assert (
|
|
'index.rst:55: WARNING: Failed to create a cross reference. Any number is not assigned: index'
|
|
) in warnings
|
|
assert 'index.rst:56: WARNING: invalid numfig_format: invalid' in warnings
|
|
assert 'index.rst:57: WARNING: invalid numfig_format: Fig %s %s' in warnings
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('fname', 'path', 'check', 'be_found'),
|
|
[
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2 $',
|
|
True,
|
|
),
|
|
('index.html', './/li/p/a/span', '^Fig. 1$', True),
|
|
('index.html', './/li/p/a/span', '^Figure2.2$', True),
|
|
('index.html', './/li/p/a/span', '^Table 1$', True),
|
|
('index.html', './/li/p/a/span', '^Table:2.2$', True),
|
|
('index.html', './/li/p/a/span', '^Listing 1$', True),
|
|
('index.html', './/li/p/a/span', '^Code-2.2$', True),
|
|
('index.html', './/li/p/a/span', '^Section.1$', True),
|
|
('index.html', './/li/p/a/span', '^Section.2.1$', True),
|
|
('index.html', './/li/p/a/span', '^Fig.1 should be Fig.1$', True),
|
|
('index.html', './/li/p/a/span', '^Sect.1 Foo$', True),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.2 $',
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={'numfig': True},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_on')
|
|
def test_numfig_with_numbered_toctree(
|
|
app, cached_etree_parse, fname, path, check, be_found
|
|
):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / fname), fname, path, check, be_found)
|
|
|
|
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={
|
|
'numfig': True,
|
|
'numfig_format': {
|
|
'figure': 'Figure:%s',
|
|
'table': 'Tab_%s',
|
|
'code-block': 'Code-%s',
|
|
'section': 'SECTION-%s',
|
|
},
|
|
},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_format_warn')
|
|
def test_numfig_with_prefix_warn(app):
|
|
app.build()
|
|
warnings = app.warning.getvalue()
|
|
assert (
|
|
'index.rst:47: WARNING: numfig is disabled. :numref: is ignored.'
|
|
) not in warnings
|
|
assert (
|
|
'index.rst:55: WARNING: Failed to create a cross reference. Any number is not assigned: index'
|
|
) in warnings
|
|
assert 'index.rst:56: WARNING: invalid numfig_format: invalid' in warnings
|
|
assert 'index.rst:57: WARNING: invalid numfig_format: Fig %s %s' in warnings
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('fname', 'path', 'check', 'be_found'),
|
|
[
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-2 $',
|
|
True,
|
|
),
|
|
('index.html', './/li/p/a/span', '^Figure:1$', True),
|
|
('index.html', './/li/p/a/span', '^Figure2.2$', True),
|
|
('index.html', './/li/p/a/span', '^Tab_1$', True),
|
|
('index.html', './/li/p/a/span', '^Table:2.2$', True),
|
|
('index.html', './/li/p/a/span', '^Code-1$', True),
|
|
('index.html', './/li/p/a/span', '^Code-2.2$', True),
|
|
('index.html', './/li/p/a/span', '^SECTION-1$', True),
|
|
('index.html', './/li/p/a/span', '^SECTION-2.1$', True),
|
|
('index.html', './/li/p/a/span', '^Fig.1 should be Fig.1$', True),
|
|
('index.html', './/li/p/a/span', '^Sect.1 Foo$', True),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-1.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-2.4 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Figure:2.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Tab_2.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Code-2.2 $',
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={
|
|
'numfig': True,
|
|
'numfig_format': {
|
|
'figure': 'Figure:%s',
|
|
'table': 'Tab_%s',
|
|
'code-block': 'Code-%s',
|
|
'section': 'SECTION-%s',
|
|
},
|
|
},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_format_warn')
|
|
def test_numfig_with_prefix(app, cached_etree_parse, fname, path, check, be_found):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / fname), fname, path, check, be_found)
|
|
|
|
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={'numfig': True, 'numfig_secnum_depth': 2},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_depth_2')
|
|
def test_numfig_with_secnum_depth_warn(app):
|
|
app.build()
|
|
warnings = app.warning.getvalue()
|
|
assert (
|
|
'index.rst:47: WARNING: numfig is disabled. :numref: is ignored.'
|
|
) not in warnings
|
|
assert (
|
|
'index.rst:55: WARNING: Failed to create a cross reference. Any number is not assigned: index'
|
|
) in warnings
|
|
assert 'index.rst:56: WARNING: invalid numfig_format: invalid' in warnings
|
|
assert 'index.rst:57: WARNING: invalid numfig_format: Fig %s %s' in warnings
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
('fname', 'path', 'check', 'be_found'),
|
|
[
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1 $',
|
|
True,
|
|
),
|
|
(
|
|
'index.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2 $',
|
|
True,
|
|
),
|
|
('index.html', './/li/p/a/span', '^Fig. 1$', True),
|
|
('index.html', './/li/p/a/span', '^Figure2.1.2$', True),
|
|
('index.html', './/li/p/a/span', '^Table 1$', True),
|
|
('index.html', './/li/p/a/span', '^Table:2.1.2$', True),
|
|
('index.html', './/li/p/a/span', '^Listing 1$', True),
|
|
('index.html', './/li/p/a/span', '^Code-2.1.2$', True),
|
|
('index.html', './/li/p/a/span', '^Section.1$', True),
|
|
('index.html', './/li/p/a/span', '^Section.2.1$', True),
|
|
('index.html', './/li/p/a/span', '^Fig.1 should be Fig.1$', True),
|
|
('index.html', './/li/p/a/span', '^Sect.1 Foo$', True),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 1.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 1.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'foo.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
'bar.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
FIGURE_CAPTION + "/span[@class='caption-number']",
|
|
'^Fig. 2.1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//table/caption/span[@class='caption-number']",
|
|
'^Table 2.1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
'baz.html',
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.1.2 $',
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx(
|
|
'html',
|
|
testroot='numfig',
|
|
confoverrides={'numfig': True, 'numfig_secnum_depth': 2},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_depth_2')
|
|
def test_numfig_with_secnum_depth(
|
|
app, cached_etree_parse, fname, path, check, be_found
|
|
):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / fname), fname, path, check, be_found)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
'expect',
|
|
[
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 1 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 2 $', True),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2 $',
|
|
True,
|
|
),
|
|
('.//li/p/a/span', '^Fig. 1$', True),
|
|
('.//li/p/a/span', '^Figure2.2$', True),
|
|
('.//li/p/a/span', '^Table 1$', True),
|
|
('.//li/p/a/span', '^Table:2.2$', True),
|
|
('.//li/p/a/span', '^Listing 1$', True),
|
|
('.//li/p/a/span', '^Code-2.2$', True),
|
|
('.//li/p/a/span', '^Section.1$', True),
|
|
('.//li/p/a/span', '^Section.2.1$', True),
|
|
('.//li/p/a/span', '^Fig.1 should be Fig.1$', True),
|
|
('.//li/p/a/span', '^Sect.1 Foo$', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.1 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.2 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.3 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 1.4 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 1.1 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 1.2 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 1.3 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 1.4 $', True),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.1 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.2 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.3 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 1.4 $',
|
|
True,
|
|
),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.1 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.3 $', True),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.4 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 2.1 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 2.3 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 2.4 $', True),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.1 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.3 $',
|
|
True,
|
|
),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.4 $',
|
|
True,
|
|
),
|
|
(FIGURE_CAPTION + "/span[@class='caption-number']", '^Fig. 2.2 $', True),
|
|
(".//table/caption/span[@class='caption-number']", '^Table 2.2 $', True),
|
|
(
|
|
".//div[@class='code-block-caption']/span[@class='caption-number']",
|
|
'^Listing 2.2 $',
|
|
True,
|
|
),
|
|
],
|
|
)
|
|
@pytest.mark.sphinx(
|
|
'singlehtml',
|
|
testroot='numfig',
|
|
confoverrides={'numfig': True},
|
|
)
|
|
@pytest.mark.test_params(shared_result='test_build_html_numfig_on')
|
|
def test_numfig_with_singlehtml(app, cached_etree_parse, expect):
|
|
app.build()
|
|
check_xpath(cached_etree_parse(app.outdir / 'index.html'), 'index.html', *expect)
|