Skip to content

Commit

Permalink
Fix UnboundLocalError when building changes
Browse files Browse the repository at this point in the history
Split testing of changes builder to its own test file and root.
Improve coverage a little, and add case that fails if a module
directive is included in the rst source.

Correctly handle changesets with a module declared.

Ignore coverage annotations files in git.

Fixes #6134
  • Loading branch information
bz2 committed Mar 4, 2019
1 parent be971c6 commit f07b9a3
Show file tree
Hide file tree
Showing 9 changed files with 135 additions and 4 deletions.
1 change: 1 addition & 0 deletions .gitignore
Expand Up @@ -2,6 +2,7 @@
*.egg
*.so
*.swp
*,cover

.dir-locals.el
.cache/
Expand Down
3 changes: 1 addition & 2 deletions sphinx/builders/changes.py
Expand Up @@ -85,8 +85,7 @@ def write(self, *ignored):
entry = '<b>%s</b>: <i>%s</i>.' % (descname, ttext)
apichanges.append((entry, changeset.docname, changeset.lineno))
elif descname or changeset.module:
if not changeset.module:
module = _('Builtins')
module = changeset.module or _('Builtins')
if not descname:
descname = _('Module level')
if context:
Expand Down
20 changes: 20 additions & 0 deletions tests/roots/test-changes/base.rst
@@ -0,0 +1,20 @@
Version markup
--------------

.. versionadded:: 0.6
Some funny **stuff**.

.. versionchanged:: 0.6
Even more funny stuff.

.. deprecated:: 0.6
Boring stuff.

.. versionadded:: 1.2

First paragraph of versionadded.

.. versionchanged:: 1.2
First paragraph of versionchanged.

Second paragraph of versionchanged.
24 changes: 24 additions & 0 deletions tests/roots/test-changes/c-api.rst
@@ -0,0 +1,24 @@
.. highlightlang:: c


Memory
======

.. c:function:: void* Test_Malloc(size_t n)
Allocate *n* bytes of memory.
.. versionchanged:: 0.6
Can now be replaced with a different allocator.
System
------
Access to the system allocator.
.. versionadded:: 0.6
.. c:function:: void* Test_SysMalloc(size_t n)
Allocate *n* bytes of memory using system allocator.
6 changes: 6 additions & 0 deletions tests/roots/test-changes/conf.py
@@ -0,0 +1,6 @@
# -*- coding: utf-8 -*-

project = 'Sphinx ChangesBuilder tests'
copyright = '2007-2019 by the Sphinx team, see AUTHORS'
version = '0.6'
release = '0.6alpha1'
13 changes: 13 additions & 0 deletions tests/roots/test-changes/contents.rst
@@ -0,0 +1,13 @@
Index for ChangesBuilder tests
==============================

Contents:

.. toctree::
:maxdepth: 2
:caption: Table of Contents
:name: mastertoc

base
c-api
library/utils
25 changes: 25 additions & 0 deletions tests/roots/test-changes/library/utils.rst
@@ -0,0 +1,25 @@
:mod:`utils` --- Fake utilities module for tests
================================================

.. module:: utils
:synopsis: Utility functions

--------------

The :mod:`utils` module is a pretend python module for changes testing.


Classes
-------

.. class:: Path

Class for handling paths.

.. versionadded:: 0.5

Innovative new way to handle paths.

.. deprecated:: 0.6

So, that was a bad idea it turns out.
4 changes: 2 additions & 2 deletions tests/test_build.py
Expand Up @@ -61,13 +61,13 @@ def nonascii_srcdir(request, rootdir, sphinx_test_tempdir):


# note: this test skips building docs for some builders because they have independent testcase.
# (html, epub, latex, texinfo and manpage)
# (html, changes, epub, latex, texinfo and manpage)
@pytest.mark.parametrize(
"buildername",
[
# note: no 'html' - if it's ok with dirhtml it's ok with html
'dirhtml', 'singlehtml', 'pickle', 'json', 'text', 'htmlhelp', 'qthelp',
'applehelp', 'changes', 'xml', 'pseudoxml', 'linkcheck',
'applehelp', 'xml', 'pseudoxml', 'linkcheck',
],
)
@mock.patch('sphinx.builders.linkcheck.requests.head',
Expand Down
43 changes: 43 additions & 0 deletions tests/test_build_changes.py
@@ -0,0 +1,43 @@
# -*- coding: utf-8 -*-
"""
test_build_changes
~~~~~~~~~~~~~~~~~~
Test the ChangesBuilder class.
:copyright: Copyright 2007-2019 by the Sphinx team, see AUTHORS.
:license: BSD, see LICENSE for details.
"""

import pytest


@pytest.mark.sphinx('changes', testroot='changes')
def test_build(app):
app.build()

# TODO: Use better checking of html content
htmltext = (app.outdir / 'changes.html').text()
assert 'New in version 0.6: Some funny stuff.' in htmltext
assert 'Changed in version 0.6: Even more funny stuff.' in htmltext
assert 'Deprecated since version 0.6: Boring stuff.' in htmltext

path_html = (
'<b>Path</b>: <i>deprecated:</i> Deprecated since version 0.6:'
' So, that was a bad idea it turns out.')
assert path_html in htmltext

malloc_html = (
'<b>Test_Malloc</b>: <i>changed:</i> Changed in version 0.6:'
' Can now be replaced with a different allocator.</a>')
assert malloc_html in htmltext


@pytest.mark.sphinx(
'changes', testroot='changes', srcdir='changes-none',
confoverrides={'version': '0.7', 'release': '0.7b1'})
def test_no_changes(app, status):
app.build()

assert 'no changes in version 0.7.' in status.getvalue()
assert not (app.outdir / 'changes.html').exists()

0 comments on commit f07b9a3

Please sign in to comment.