mirror of
https://github.com/sphinx-doc/sphinx.git
synced 2025-02-25 18:55:22 -06:00
Merge branch 'stable'
This commit is contained in:
commit
5bc5b8f013
5
tests/roots/test-builder-gettext-dont-rebuild-mo/bom.rst
Normal file
5
tests/roots/test-builder-gettext-dont-rebuild-mo/bom.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
File with UTF-8 BOM
|
||||||
|
===================
|
||||||
|
|
||||||
|
This file has a UTF-8 "BOM".
|
||||||
|
|
7
tests/roots/test-builder-gettext-dont-rebuild-mo/conf.py
Normal file
7
tests/roots/test-builder-gettext-dont-rebuild-mo/conf.py
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
|
master_doc = 'index'
|
||||||
|
|
||||||
|
latex_documents = [
|
||||||
|
(master_doc, 'test.tex', 'The basic Sphinx documentation for testing', 'Sphinx', 'report')
|
||||||
|
]
|
@ -0,0 +1,6 @@
|
|||||||
|
The basic Sphinx documentation for testing
|
||||||
|
==========================================
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
|
||||||
|
bom
|
@ -1 +0,0 @@
|
|||||||
This whole directory is there to test html_static_path.
|
|
@ -1 +0,0 @@
|
|||||||
/* This file should be excluded from being copied over */
|
|
@ -1 +0,0 @@
|
|||||||
/* Stub file */
|
|
@ -29,16 +29,11 @@ numfig = True
|
|||||||
|
|
||||||
rst_epilog = '.. |subst| replace:: global substitution'
|
rst_epilog = '.. |subst| replace:: global substitution'
|
||||||
|
|
||||||
html_theme = 'testtheme'
|
|
||||||
html_theme_path = ['.']
|
|
||||||
html_theme_options = {'testopt': 'testoverride'}
|
|
||||||
html_sidebars = {'**': ['localtoc.html', 'relations.html', 'sourcelink.html',
|
html_sidebars = {'**': ['localtoc.html', 'relations.html', 'sourcelink.html',
|
||||||
'customsb.html', 'searchbox.html'],
|
'customsb.html', 'searchbox.html'],
|
||||||
'contents': ['contentssb.html', 'localtoc.html',
|
'contents': ['contentssb.html', 'localtoc.html',
|
||||||
'globaltoc.html']}
|
'globaltoc.html']}
|
||||||
html_style = 'default.css'
|
html_style = 'default.css'
|
||||||
html_static_path = ['_static', 'templated.css_t']
|
|
||||||
html_extra_path = ['robots.txt']
|
|
||||||
html_last_updated_fmt = '%b %d, %Y'
|
html_last_updated_fmt = '%b %d, %Y'
|
||||||
html_context = {'hckey': 'hcval', 'hckey_co': 'wrong_hcval_co'}
|
html_context = {'hckey': 'hcval', 'hckey_co': 'wrong_hcval_co'}
|
||||||
|
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
User-agent: *
|
|
||||||
Disallow: /cgi-bin/
|
|
@ -1,9 +0,0 @@
|
|||||||
#, fuzzy
|
|
||||||
msgid ""
|
|
||||||
msgstr ""
|
|
||||||
"MIME-Version: 1.0\n"
|
|
||||||
"Content-Type: text/plain; charset=UTF-8\n"
|
|
||||||
"Content-Transfer-Encoding: 8bit\n"
|
|
||||||
|
|
||||||
msgid "Including in subdir"
|
|
||||||
msgstr "translation"
|
|
@ -1,2 +0,0 @@
|
|||||||
/* Stub file, templated */
|
|
||||||
{{ sphinx_version }}
|
|
Before Width: | Height: | Size: 120 B After Width: | Height: | Size: 120 B |
@ -59,13 +59,14 @@ def nonascii_srcdir(request, rootdir, sphinx_test_tempdir):
|
|||||||
return srcdir
|
return srcdir
|
||||||
|
|
||||||
|
|
||||||
|
# note: this test skips building docs for some builders because they have independent testcase.
|
||||||
|
# (html, latex, texinfo and manpage)
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
"buildername",
|
"buildername",
|
||||||
[
|
[
|
||||||
# note: no 'html' - if it's ok with dirhtml it's ok with html
|
# note: no 'html' - if it's ok with dirhtml it's ok with html
|
||||||
'dirhtml', 'singlehtml', 'latex', 'texinfo', 'pickle', 'json', 'text',
|
'dirhtml', 'singlehtml', 'pickle', 'json', 'text', 'htmlhelp', 'qthelp',
|
||||||
'htmlhelp', 'qthelp', 'epub', 'applehelp', 'changes', 'xml',
|
'epub', 'applehelp', 'changes', 'xml', 'pseudoxml', 'linkcheck',
|
||||||
'pseudoxml', 'man', 'linkcheck',
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
@mock.patch('sphinx.builders.linkcheck.requests.head',
|
@mock.patch('sphinx.builders.linkcheck.requests.head',
|
||||||
|
@ -126,24 +126,6 @@ def check_xpath(etree, fname, path, check, be_found=True):
|
|||||||
[node.text for node in nodes]))
|
[node.text for node in nodes]))
|
||||||
|
|
||||||
|
|
||||||
def check_static_entries(outdir):
|
|
||||||
staticdir = outdir / '_static'
|
|
||||||
assert staticdir.isdir()
|
|
||||||
# a file from a directory entry in html_static_path
|
|
||||||
assert (staticdir / 'README').isfile()
|
|
||||||
# a directory from a directory entry in html_static_path
|
|
||||||
assert (staticdir / 'subdir' / 'foo.css').isfile()
|
|
||||||
# a file from a file entry in html_static_path
|
|
||||||
assert (staticdir / 'templated.css').isfile()
|
|
||||||
assert (staticdir / 'templated.css').text().splitlines()[1] == __display_version__
|
|
||||||
# a file from _static, but matches exclude_patterns
|
|
||||||
assert not (staticdir / 'excluded.css').exists()
|
|
||||||
|
|
||||||
|
|
||||||
def check_extra_entries(outdir):
|
|
||||||
assert (outdir / 'robots.txt').isfile()
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', testroot='warnings')
|
@pytest.mark.sphinx('html', testroot='warnings')
|
||||||
def test_html_warnings(app, warning):
|
def test_html_warnings(app, warning):
|
||||||
app.build()
|
app.build()
|
||||||
@ -156,15 +138,6 @@ def test_html_warnings(app, warning):
|
|||||||
'--- Got:\n' + html_warnings
|
'--- Got:\n' + html_warnings
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', tags=['testtag'], confoverrides={
|
|
||||||
'html_context.hckey_co': 'hcval_co'})
|
|
||||||
@pytest.mark.test_params(shared_result='test_build_html_output')
|
|
||||||
def test_static_output(app):
|
|
||||||
app.build()
|
|
||||||
check_static_entries(app.builder.outdir)
|
|
||||||
check_extra_entries(app.builder.outdir)
|
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize("fname,expect", flat_dict({
|
@pytest.mark.parametrize("fname,expect", flat_dict({
|
||||||
'images.html': [
|
'images.html': [
|
||||||
(".//img[@src='_images/img.png']", ''),
|
(".//img[@src='_images/img.png']", ''),
|
||||||
@ -377,7 +350,6 @@ def test_static_output(app):
|
|||||||
'contents.html': [
|
'contents.html': [
|
||||||
(".//meta[@name='hc'][@content='hcval']", ''),
|
(".//meta[@name='hc'][@content='hcval']", ''),
|
||||||
(".//meta[@name='hc_co'][@content='hcval_co']", ''),
|
(".//meta[@name='hc_co'][@content='hcval_co']", ''),
|
||||||
(".//meta[@name='testopt'][@content='testoverride']", ''),
|
|
||||||
(".//td[@class='label']", r'\[Ref1\]'),
|
(".//td[@class='label']", r'\[Ref1\]'),
|
||||||
(".//td[@class='label']", ''),
|
(".//td[@class='label']", ''),
|
||||||
(".//li[@class='toctree-l1']/a", 'Testing various markup'),
|
(".//li[@class='toctree-l1']/a", 'Testing various markup'),
|
||||||
@ -410,9 +382,6 @@ def test_static_output(app):
|
|||||||
(".//a[@href='http://bugs.python.org/issue1000']", "issue 1000"),
|
(".//a[@href='http://bugs.python.org/issue1000']", "issue 1000"),
|
||||||
(".//a[@href='http://bugs.python.org/issue1042']", "explicit caption"),
|
(".//a[@href='http://bugs.python.org/issue1042']", "explicit caption"),
|
||||||
],
|
],
|
||||||
'_static/statictmpl.html': [
|
|
||||||
(".//project", 'Sphinx <Tests>'),
|
|
||||||
],
|
|
||||||
'genindex.html': [
|
'genindex.html': [
|
||||||
# index entries
|
# index entries
|
||||||
(".//a/strong", "Main"),
|
(".//a/strong", "Main"),
|
||||||
@ -1145,16 +1114,28 @@ def test_html_assets(app):
|
|||||||
assert not (app.outdir / 'subdir' / '.htpasswd').exists()
|
assert not (app.outdir / 'subdir' / '.htpasswd').exists()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', confoverrides={'html_sourcelink_suffix': ''})
|
@pytest.mark.sphinx('html', testroot='basic', confoverrides={'html_copy_source': False})
|
||||||
|
def test_html_copy_source(app):
|
||||||
|
app.builder.build_all()
|
||||||
|
assert not (app.outdir / '_sources' / 'index.rst.txt').exists()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('html', testroot='basic', confoverrides={'html_sourcelink_suffix': '.txt'})
|
||||||
def test_html_sourcelink_suffix(app):
|
def test_html_sourcelink_suffix(app):
|
||||||
app.builder.build_all()
|
app.builder.build_all()
|
||||||
content_otherext = (app.outdir / 'otherext.html').text()
|
assert (app.outdir / '_sources' / 'index.rst.txt').exists()
|
||||||
content_images = (app.outdir / 'images.html').text()
|
|
||||||
|
|
||||||
assert '<a href="_sources/otherext.foo"' in content_otherext
|
|
||||||
assert '<a href="_sources/images.txt"' in content_images
|
@pytest.mark.sphinx('html', testroot='basic', confoverrides={'html_sourcelink_suffix': '.rst'})
|
||||||
assert (app.outdir / '_sources' / 'otherext.foo').exists()
|
def test_html_sourcelink_suffix_same(app):
|
||||||
assert (app.outdir / '_sources' / 'images.txt').exists()
|
app.builder.build_all()
|
||||||
|
assert (app.outdir / '_sources' / 'index.rst').exists()
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx('html', testroot='basic', confoverrides={'html_sourcelink_suffix': ''})
|
||||||
|
def test_html_sourcelink_suffix_empty(app):
|
||||||
|
app.builder.build_all()
|
||||||
|
assert (app.outdir / '_sources' / 'index.rst').exists()
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx('html', testroot='html_entity')
|
@pytest.mark.sphinx('html', testroot='html_entity')
|
||||||
|
@ -251,7 +251,6 @@ def cached_etree_parse():
|
|||||||
'contents.html': [
|
'contents.html': [
|
||||||
(".//meta[@name='hc'][@content='hcval']", ''),
|
(".//meta[@name='hc'][@content='hcval']", ''),
|
||||||
(".//meta[@name='hc_co'][@content='hcval_co']", ''),
|
(".//meta[@name='hc_co'][@content='hcval_co']", ''),
|
||||||
(".//meta[@name='testopt'][@content='testoverride']", ''),
|
|
||||||
(".//dt[@class='label']/span[@class='brackets']", r'Ref1'),
|
(".//dt[@class='label']/span[@class='brackets']", r'Ref1'),
|
||||||
(".//dt[@class='label']", ''),
|
(".//dt[@class='label']", ''),
|
||||||
(".//li[@class='toctree-l1']/a", 'Testing various markup'),
|
(".//li[@class='toctree-l1']/a", 'Testing various markup'),
|
||||||
@ -284,9 +283,6 @@ def cached_etree_parse():
|
|||||||
(".//a[@href='http://bugs.python.org/issue1000']", "issue 1000"),
|
(".//a[@href='http://bugs.python.org/issue1000']", "issue 1000"),
|
||||||
(".//a[@href='http://bugs.python.org/issue1042']", "explicit caption"),
|
(".//a[@href='http://bugs.python.org/issue1042']", "explicit caption"),
|
||||||
],
|
],
|
||||||
'_static/statictmpl.html': [
|
|
||||||
(".//project", 'Sphinx <Tests>'),
|
|
||||||
],
|
|
||||||
'genindex.html': [
|
'genindex.html': [
|
||||||
# index entries
|
# index entries
|
||||||
(".//a/strong", "Main"),
|
(".//a/strong", "Main"),
|
||||||
|
@ -520,7 +520,7 @@ def test_gettext_buildr_ignores_only_directive(app):
|
|||||||
|
|
||||||
@sphinx_intl
|
@sphinx_intl
|
||||||
# use individual shared_result directory to avoid "incompatible doctree" error
|
# use individual shared_result directory to avoid "incompatible doctree" error
|
||||||
@pytest.mark.test_params(shared_result='test_gettext_dont_rebuild_mo')
|
@pytest.mark.sphinx(testroot='builder-gettext-dont-rebuild-mo')
|
||||||
def test_gettext_dont_rebuild_mo(make_app, app_params, build_mo):
|
def test_gettext_dont_rebuild_mo(make_app, app_params, build_mo):
|
||||||
# --- don't rebuild by .mo mtime
|
# --- don't rebuild by .mo mtime
|
||||||
def get_number_of_update_targets(app_):
|
def get_number_of_update_targets(app_):
|
||||||
@ -533,7 +533,7 @@ def test_gettext_dont_rebuild_mo(make_app, app_params, build_mo):
|
|||||||
app0 = make_app('dummy', *args, **kwargs)
|
app0 = make_app('dummy', *args, **kwargs)
|
||||||
build_mo(app0.srcdir)
|
build_mo(app0.srcdir)
|
||||||
app0.build()
|
app0.build()
|
||||||
assert (app0.srcdir / 'bom.mo')
|
assert (app0.srcdir / 'xx' / 'LC_MESSAGES' / 'bom.mo').exists()
|
||||||
# Since it is after the build, the number of documents to be updated is 0
|
# Since it is after the build, the number of documents to be updated is 0
|
||||||
assert get_number_of_update_targets(app0) == 0
|
assert get_number_of_update_targets(app0) == 0
|
||||||
# When rewriting the timestamp of mo file, the number of documents to be
|
# When rewriting the timestamp of mo file, the number of documents to be
|
||||||
|
@ -17,6 +17,7 @@ from sphinx.theming import ThemeError
|
|||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx(
|
@pytest.mark.sphinx(
|
||||||
|
testroot='theming',
|
||||||
confoverrides={'html_theme': 'ziptheme',
|
confoverrides={'html_theme': 'ziptheme',
|
||||||
'html_theme_options.testopt': 'foo'})
|
'html_theme_options.testopt': 'foo'})
|
||||||
def test_theme_api(app, status, warning):
|
def test_theme_api(app, status, warning):
|
||||||
@ -25,10 +26,11 @@ def test_theme_api(app, status, warning):
|
|||||||
# test Theme class API
|
# test Theme class API
|
||||||
assert set(app.html_themes.keys()) == \
|
assert set(app.html_themes.keys()) == \
|
||||||
set(['basic', 'default', 'scrolls', 'agogo', 'sphinxdoc', 'haiku',
|
set(['basic', 'default', 'scrolls', 'agogo', 'sphinxdoc', 'haiku',
|
||||||
'traditional', 'testtheme', 'ziptheme', 'epub', 'nature',
|
'traditional', 'epub', 'nature', 'pyramid', 'bizstyle', 'classic', 'nonav',
|
||||||
'pyramid', 'bizstyle', 'classic', 'nonav'])
|
'test-theme', 'ziptheme', 'staticfiles', 'parent', 'child'])
|
||||||
assert app.html_themes['testtheme'] == app.srcdir / 'testtheme'
|
assert app.html_themes['test-theme'] == app.srcdir / 'test_theme' / 'test-theme'
|
||||||
assert app.html_themes['ziptheme'] == app.srcdir / 'ziptheme.zip'
|
assert app.html_themes['ziptheme'] == app.srcdir / 'ziptheme.zip'
|
||||||
|
assert app.html_themes['staticfiles'] == app.srcdir / 'test_theme' / 'staticfiles'
|
||||||
|
|
||||||
# test Theme instance API
|
# test Theme instance API
|
||||||
theme = app.builder.theme
|
theme = app.builder.theme
|
||||||
@ -97,6 +99,21 @@ def test_nested_zipped_theme(app, status, warning):
|
|||||||
app.build() # => not raises TemplateNotFound
|
app.build() # => not raises TemplateNotFound
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.mark.sphinx(testroot='theming',
|
||||||
|
confoverrides={'html_theme': 'staticfiles'})
|
||||||
|
def test_staticfiles(app, status, warning):
|
||||||
|
app.build()
|
||||||
|
assert (app.outdir / '_static' / 'staticimg.png').exists()
|
||||||
|
assert (app.outdir / '_static' / 'statictmpl.html').exists()
|
||||||
|
assert (app.outdir / '_static' / 'statictmpl.html').text() == (
|
||||||
|
'<!-- testing static templates -->\n'
|
||||||
|
'<html><project>Python</project></html>'
|
||||||
|
)
|
||||||
|
|
||||||
|
result = (app.outdir / 'index.html').text()
|
||||||
|
assert '<meta name="testopt" content="optdefault" />' in result
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.sphinx(testroot='theming')
|
@pytest.mark.sphinx(testroot='theming')
|
||||||
def test_theme_sidebars(app, status, warning):
|
def test_theme_sidebars(app, status, warning):
|
||||||
app.build()
|
app.build()
|
||||||
|
Loading…
Reference in New Issue
Block a user