# -*- coding: utf-8 -*- """ test_build_qthelp ~~~~~~~~~~~~~~~~~ Test the Qt Help builder and check its output. We don't need to test the HTML itself; that's already handled by :file:`test_build_html.py`. :copyright: Copyright 2007-2018 by the Sphinx team, see AUTHORS. :license: BSD, see LICENSE for details. """ import pytest from sphinx.testing.util import etree_parse @pytest.mark.sphinx('qthelp', testroot='basic') def test_qthelp_basic(app, status, warning): app.builder.build_all() qhp = (app.outdir / 'Python.qhp').text() assert '' in qhp assert 'Python' in qhp assert '' in qhp assert '
' in qhp assert 'genindex.html' in qhp assert 'index.html' in qhp assert '_static/basic.css' in qhp assert '_static/down.png' in qhp qhcp = (app.outdir / 'Python.qhcp').text() assert 'Python documentation' in qhcp assert 'qthelp://org.sphinx.python/doc/index.html' in qhcp assert 'qthelp://org.sphinx.python/doc/index.html' in qhcp assert 'Python.qhp' in qhcp assert 'Python.qch' in qhcp assert 'Python.qch' in qhcp @pytest.mark.sphinx('qthelp', testroot='need-escaped') def test_qthelp_escaped(app, status, warning): app.builder.build_all() et = etree_parse(app.outdir / 'needbescapedbproject.qhp') customFilter = et.find('.//customFilter') assert len(customFilter) == 2 assert customFilter.attrib == {'name': 'need "escaped" project '} assert customFilter[0].text == 'needbescapedbproject' assert customFilter[1].text is None toc = et.find('.//toc') assert len(toc) == 1 assert toc[0].attrib == {'title': 'need "escaped" project documentation', 'ref': 'index.html'} assert len(toc[0]) == 4 assert toc[0][0].attrib == {'title': '', 'ref': 'foo.html'} assert toc[0][0][0].attrib == {'title': 'quux', 'ref': 'quux.html'} assert toc[0][0][1].attrib == {'title': 'foo "1"', 'ref': 'foo.html#foo-1'} assert toc[0][0][1][0].attrib == {'title': 'foo.1-1', 'ref': 'foo.html#foo-1-1'} assert toc[0][0][2].attrib == {'title': 'foo.2', 'ref': 'foo.html#foo-2'} assert toc[0][1].attrib == {'title': 'bar', 'ref': 'bar.html'} assert toc[0][2].attrib == {'title': 'http://sphinx-doc.org/', 'ref': 'http://sphinx-doc.org/'} assert toc[0][3].attrib == {'title': 'baz', 'ref': 'baz.html'} keywords = et.find('.//keywords') assert len(keywords) == 2 assert keywords[0].attrib == {'name': '', 'ref': 'index.html#index-0'} assert keywords[1].attrib == {'name': '"subsection"', 'ref': 'index.html#index-0'} @pytest.mark.sphinx('qthelp', testroot='basic') def test_qthelp_namespace(app, status, warning): # default namespace app.builder.build_all() qhp = (app.outdir / 'Python.qhp').text() assert 'org.sphinx.python' in qhp qhcp = (app.outdir / 'Python.qhcp').text() assert 'qthelp://org.sphinx.python/doc/index.html' in qhcp assert 'qthelp://org.sphinx.python/doc/index.html' in qhcp # give a namespace app.config.qthelp_namespace = 'org.sphinx-doc.sphinx' app.builder.build_all() qhp = (app.outdir / 'Python.qhp').text() assert 'org.sphinx-doc.sphinx' in qhp qhcp = (app.outdir / 'Python.qhcp').text() assert 'qthelp://org.sphinx-doc.sphinx/doc/index.html' in qhcp assert 'qthelp://org.sphinx-doc.sphinx/doc/index.html' in qhcp @pytest.mark.sphinx('qthelp', testroot='basic') def test_qthelp_title(app, status, warning): # default title app.builder.build_all() qhp = (app.outdir / 'Python.qhp').text() assert '
' in qhp qhcp = (app.outdir / 'Python.qhcp').text() assert 'Python documentation' in qhcp # give a title app.config.html_title = 'Sphinx "full" title' app.config.html_short_title = 'Sphinx "short" title' app.builder.build_all() qhp = (app.outdir / 'Python.qhp').text() assert ('
' in qhp) qhcp = (app.outdir / 'Python.qhcp').text() assert 'Sphinx <b>"short"</b> title' in qhcp