diff options
Diffstat (limited to 'tests/test_apidoc.py')
-rw-r--r-- | tests/test_apidoc.py | 192 |
1 files changed, 84 insertions, 108 deletions
diff --git a/tests/test_apidoc.py b/tests/test_apidoc.py index ff6a147ca..d44868aeb 100644 --- a/tests/test_apidoc.py +++ b/tests/test_apidoc.py @@ -11,45 +11,60 @@ from __future__ import print_function -import sys -from six import PY2 +from collections import namedtuple -from sphinx import apidoc +import pytest -from util import with_tempdir, with_app, rootdir +from sphinx.apidoc import main as apidoc_main +from util import rootdir, remove_unicode_literals -@with_tempdir -def test_simple(tempdir): - codedir = rootdir / 'root' + +@pytest.fixture() +def apidoc(tempdir, apidoc_params): + _, kwargs = apidoc_params + coderoot = kwargs.get('coderoot', (rootdir / 'root')) outdir = tempdir / 'out' - args = ['sphinx-apidoc', '-o', outdir, '-F', codedir] - apidoc.main(args) + args = ['sphinx-apidoc', '-o', outdir, '-F', coderoot] + kwargs.get('options', []) + apidoc_main(args) + return namedtuple('apidoc', 'coderoot,outdir')(coderoot, outdir) + + +@pytest.fixture +def apidoc_params(request): + markers = request.node.get_marker("apidoc") + pargs = {} + kwargs = {} + + if markers is not None: + for info in reversed(list(markers)): + for i, a in enumerate(info.args): + pargs[i] = a + kwargs.update(info.kwargs) + args = [pargs[i] for i in sorted(pargs.keys())] + return args, kwargs + + +@pytest.mark.apidoc(coderoot=(rootdir / 'root')) +def test_simple(make_app, apidoc): + outdir = apidoc.outdir assert (outdir / 'conf.py').isfile() assert (outdir / 'autodoc_fodder.rst').isfile() assert (outdir / 'index.rst').isfile() - @with_app('text', srcdir=outdir) - def assert_build(app, status, warning): - app.build() - print(status.getvalue()) - print(warning.getvalue()) - - sys.path.append(codedir) - try: - assert_build() - finally: - sys.path.remove(codedir) - + app = make_app('text', srcdir=outdir) + app.build() + print(app._status.getvalue()) + print(app._warning.getvalue()) -@with_tempdir -def test_pep_0420_enabled(tempdir): - codedir = rootdir / 'root' / 'pep_0420' - outdir = tempdir / 'out' - args = ['sphinx-apidoc', '-o', outdir, '-F', codedir, "--implicit-namespaces"] - apidoc.main(args) +@pytest.mark.apidoc( + coderoot=(rootdir / 'root' / 'pep_0420'), + options=["--implicit-namespaces"], +) +def test_pep_0420_enabled(make_app, apidoc): + outdir = apidoc.outdir assert (outdir / 'conf.py').isfile() assert (outdir / 'a.b.c.rst').isfile() assert (outdir / 'a.b.x.rst').isfile() @@ -66,49 +81,28 @@ def test_pep_0420_enabled(tempdir): assert "automodule:: a.b.x.y\n" in rst assert "automodule:: a.b.x\n" not in rst - @with_app('text', srcdir=outdir) - def assert_build(app, status, warning): - app.build() - print(status.getvalue()) - print(warning.getvalue()) - - sys.path.append(codedir) - try: - assert_build() - finally: - sys.path.remove(codedir) + app = make_app('text', srcdir=outdir) + app.build() + print(app._status.getvalue()) + print(app._warning.getvalue()) -@with_tempdir -def test_pep_0420_disabled(tempdir): - codedir = rootdir / 'root' / 'pep_0420' - outdir = tempdir / 'out' - args = ['sphinx-apidoc', '-o', outdir, '-F', codedir] - apidoc.main(args) - +@pytest.mark.apidoc(coderoot=(rootdir / 'root' / 'pep_0420')) +def test_pep_0420_disabled(make_app, apidoc): + outdir = apidoc.outdir assert (outdir / 'conf.py').isfile() assert not (outdir / 'a.b.c.rst').exists() assert not (outdir / 'a.b.x.rst').exists() - @with_app('text', srcdir=outdir) - def assert_build(app, status, warning): - app.build() - print(status.getvalue()) - print(warning.getvalue()) - - sys.path.append(codedir) - try: - assert_build() - finally: - sys.path.remove(codedir) - -@with_tempdir -def test_pep_0420_disabled_top_level_verify(tempdir): - codedir = rootdir / 'root' / 'pep_0420' / 'a' / 'b' - outdir = tempdir / 'out' - args = ['sphinx-apidoc', '-o', outdir, '-F', codedir] - apidoc.main(args) + app = make_app('text', srcdir=outdir) + app.build() + print(app._status.getvalue()) + print(app._warning.getvalue()) + +@pytest.mark.apidoc(coderoot=(rootdir / 'root' / 'pep_0420' / 'a' / 'b')) +def test_pep_0420_disabled_top_level_verify(make_app, apidoc): + outdir = apidoc.outdir assert (outdir / 'conf.py').isfile() assert (outdir / 'c.rst').isfile() assert not (outdir / 'x.rst').exists() @@ -119,53 +113,35 @@ def test_pep_0420_disabled_top_level_verify(tempdir): assert "automodule:: c.d\n" in rst assert "automodule:: c\n" in rst - @with_app('text', srcdir=outdir) - def assert_build(app, status, warning): - app.build() - print(status.getvalue()) - print(warning.getvalue()) - - sys.path.append(codedir) - try: - assert_build() - finally: - sys.path.remove(codedir) - -@with_tempdir -def test_multibyte_parameters(tempdir): - codedir = rootdir / 'root' - outdir = tempdir / 'out' - args = ['sphinx-apidoc', '-o', outdir, '-F', codedir, - '--doc-project', u'プロジェクト名'.encode('utf-8'), - '--doc-author', u'著者名'.encode('utf-8'), - '--doc-version', u'バージョン'.encode('utf-8'), - '--doc-release', u'リリース'.encode('utf-8')] - apidoc.main(args) - + app = make_app('text', srcdir=outdir) + app.build() + print(app._status.getvalue()) + print(app._warning.getvalue()) + + +@pytest.mark.apidoc( + coderoot=(rootdir / 'root'), + options=[ + '--doc-project', u'プロジェクト名'.encode('utf-8'), + '--doc-author', u'著者名'.encode('utf-8'), + '--doc-version', u'バージョン'.encode('utf-8'), + '--doc-release', u'リリース'.encode('utf-8'), + ], +) +def test_multibyte_parameters(make_app, apidoc): + outdir = apidoc.outdir assert (outdir / 'conf.py').isfile() assert (outdir / 'autodoc_fodder.rst').isfile() assert (outdir / 'index.rst').isfile() conf_py = (outdir / 'conf.py').text() - if PY2: - assert u"project = u'プロジェクト名'" in conf_py - assert u"author = u'著者名'" in conf_py - assert u"version = u'バージョン'" in conf_py - assert u"release = u'リリース'" in conf_py - else: - assert u"project = 'プロジェクト名'" in conf_py - assert u"author = '著者名'" in conf_py - assert u"version = 'バージョン'" in conf_py - assert u"release = 'リリース'" in conf_py - - @with_app('text', srcdir=outdir) - def assert_build(app, status, warning): - app.build() - print(status.getvalue()) - print(warning.getvalue()) - - sys.path.append(codedir) - try: - assert_build() - finally: - sys.path.remove(codedir) + conf_py_ = remove_unicode_literals(conf_py) + assert u"project = 'プロジェクト名'" in conf_py_ + assert u"author = '著者名'" in conf_py_ + assert u"version = 'バージョン'" in conf_py_ + assert u"release = 'リリース'" in conf_py_ + + app = make_app('text', srcdir=outdir) + app.build() + print(app._status.getvalue()) + print(app._warning.getvalue()) |