diff --git a/AUTHORS b/AUTHORS index 397b896a2..fff3207a3 100644 --- a/AUTHORS +++ b/AUTHORS @@ -146,6 +146,7 @@ Michael Seifert Michal Wajszczuk Mihai Capotă Mike Lundy +Miro Hrončok Nathaniel Waisbrot Ned Batchelder Neven Mundar diff --git a/CHANGELOG.rst b/CHANGELOG.rst index fb00b0d0e..891b75a51 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -8,6 +8,92 @@ .. towncrier release notes start +Pytest 3.6.0 (2018-05-23) +========================= + +Features +-------- + +- Revamp the internals of the ``pytest.mark`` implementation with correct per + node handling which fixes a number of long standing bugs caused by the old + design. This introduces new ``Node.iter_markers(name)`` and + ``Node.get_closest_mark(name)`` APIs. Users are **strongly encouraged** to + read the `reasons for the revamp in the docs + `_, + or jump over to details about `updating existing code to use the new APIs + `_. (`#3317 + `_) + +- Now when ``@pytest.fixture`` is applied more than once to the same function a + ``ValueError`` is raised. This buggy behavior would cause surprising problems + and if was working for a test suite it was mostly by accident. (`#2334 + `_) + +- Support for Python 3.7's builtin ``breakpoint()`` method, see `Using the + builtin breakpoint function + `_ for + details. (`#3180 `_) + +- ``monkeypatch`` now supports a ``context()`` function which acts as a context + manager which undoes all patching done within the ``with`` block. (`#3290 + `_) + +- The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger, + instead of stopping the test session. On python 2.7, hitting CTRL+C again + exits the debugger. On python 3.2 and higher, use CTRL+D. (`#3299 + `_) + +- pytest not longer changes the log level of the root logger when the + ``log-level`` parameter has greater numeric value than that of the level of + the root logger, which makes it play better with custom logging configuration + in user code. (`#3307 `_) + + +Bug Fixes +--------- + +- A rare race-condition which might result in corrupted ``.pyc`` files on + Windows has been hopefully solved. (`#3008 + `_) + +- Also use iter_marker for discovering the marks applying for marker + expressions from the cli to avoid the bad data from the legacy mark storage. + (`#3441 `_) + +- When showing diffs of failed assertions where the contents contain only + whitespace, escape them using ``repr()`` first to make it easy to spot the + differences. (`#3443 `_) + + +Improved Documentation +---------------------- + +- Change documentation copyright year to a range which auto-updates itself each + time it is published. (`#3303 + `_) + + +Trivial/Internal Changes +------------------------ + +- ``pytest`` now depends on the `python-atomicwrites + `_ library. (`#3008 + `_) + +- Update all pypi.python.org URLs to pypi.org. (`#3431 + `_) + +- Detect `pytest_` prefixed hooks using the internal plugin manager since + ``pluggy`` is deprecating the ``implprefix`` argument to ``PluginManager``. + (`#3487 `_) + +- Import ``Mapping`` and ``Sequence`` from ``_pytest.compat`` instead of + directly from ``collections`` in ``python_api.py::approx``. Add ``Mapping`` + to ``_pytest.compat``, import it from ``collections`` on python 2, but from + ``collections.abc`` on Python 3 to avoid a ``DeprecationWarning`` on Python + 3.7 or newer. (`#3497 `_) + + Pytest 3.5.1 (2018-04-23) ========================= diff --git a/_pytest/compat.py b/_pytest/compat.py index e5c8c3940..abad4f3c5 100644 --- a/_pytest/compat.py +++ b/_pytest/compat.py @@ -40,11 +40,11 @@ MODULE_NOT_FOUND_ERROR = 'ModuleNotFoundError' if PY36 else 'ImportError' if _PY3: from collections.abc import MutableMapping as MappingMixin # noqa - from collections.abc import Sequence # noqa + from collections.abc import Mapping, Sequence # noqa else: # those raise DeprecationWarnings in Python >=3.7 from collections import MutableMapping as MappingMixin # noqa - from collections import Sequence # noqa + from collections import Mapping, Sequence # noqa def _format_args(func): diff --git a/_pytest/config.py b/_pytest/config.py index eb9c2a1f2..86632ed64 100644 --- a/_pytest/config.py +++ b/_pytest/config.py @@ -177,7 +177,7 @@ class PytestPluginManager(PluginManager): """ def __init__(self): - super(PytestPluginManager, self).__init__("pytest", implprefix="pytest_") + super(PytestPluginManager, self).__init__("pytest") self._conftest_plugins = set() # state related to local conftest plugins @@ -231,6 +231,11 @@ class PytestPluginManager(PluginManager): method = getattr(plugin, name) opts = super(PytestPluginManager, self).parse_hookimpl_opts(plugin, name) + + # collect unmarked hooks as long as they have the `pytest_' prefix + if opts is None and name.startswith("pytest_"): + opts = {} + if opts is not None: for name in ("tryfirst", "trylast", "optionalhook", "hookwrapper"): opts.setdefault(name, hasattr(method, name)) diff --git a/_pytest/python_api.py b/_pytest/python_api.py index 8e09a4a6f..838a4a50c 100644 --- a/_pytest/python_api.py +++ b/_pytest/python_api.py @@ -426,7 +426,7 @@ def approx(expected, rel=None, abs=None, nan_ok=False): __ https://docs.python.org/3/reference/datamodel.html#object.__ge__ """ - from collections import Mapping, Sequence + from _pytest.compat import Mapping, Sequence from _pytest.compat import STRING_TYPES as String from decimal import Decimal diff --git a/changelog/2334.feature b/changelog/2334.feature deleted file mode 100644 index 5af168526..000000000 --- a/changelog/2334.feature +++ /dev/null @@ -1 +0,0 @@ -Now when ``@pytest.fixture`` is applied more than once to the same function a ``ValueError`` is raised. This buggy behavior would cause surprising problems and if was working for a test suite it was mostly by accident. diff --git a/changelog/3008.bugfix.rst b/changelog/3008.bugfix.rst deleted file mode 100644 index 780c54773..000000000 --- a/changelog/3008.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -A rare race-condition which might result in corrupted ``.pyc`` files on Windows has been hopefully solved. diff --git a/changelog/3008.trivial.rst b/changelog/3008.trivial.rst deleted file mode 100644 index 74231da09..000000000 --- a/changelog/3008.trivial.rst +++ /dev/null @@ -1 +0,0 @@ -``pytest`` now depends on the `python-atomicwrites `_ library. diff --git a/changelog/3180.feature.rst b/changelog/3180.feature.rst deleted file mode 100644 index 31db646f4..000000000 --- a/changelog/3180.feature.rst +++ /dev/null @@ -1 +0,0 @@ -Support for Python 3.7's builtin ``breakpoint()`` method, see `Using the builtin breakpoint function `_ for details. diff --git a/changelog/3290.feature b/changelog/3290.feature deleted file mode 100644 index a40afcb1a..000000000 --- a/changelog/3290.feature +++ /dev/null @@ -1,2 +0,0 @@ -``monkeypatch`` now supports a ``context()`` function which acts as a context manager which undoes all patching done -within the ``with`` block. diff --git a/changelog/3299.feature.rst b/changelog/3299.feature.rst deleted file mode 100644 index 5fe591e44..000000000 --- a/changelog/3299.feature.rst +++ /dev/null @@ -1,2 +0,0 @@ -The ``--pdb`` option now causes KeyboardInterrupt to enter the debugger, instead of stopping the test session. -On python 2.7, hitting CTRL+C again exits the debugger. On python 3.2 and higher, use CTRL+D. \ No newline at end of file diff --git a/changelog/3303.doc.rst b/changelog/3303.doc.rst deleted file mode 100644 index 0af91ffb0..000000000 --- a/changelog/3303.doc.rst +++ /dev/null @@ -1 +0,0 @@ -Change documentation copyright year to a range which auto-updates itself each time it is published. diff --git a/changelog/3307.feature.rst b/changelog/3307.feature.rst deleted file mode 100644 index dde449066..000000000 --- a/changelog/3307.feature.rst +++ /dev/null @@ -1,3 +0,0 @@ -pytest not longer changes the log level of the root logger when the -``log-level`` parameter has greater numeric value than that of the level of -the root logger, which makes it play better with custom logging configuration in user code. diff --git a/changelog/3317.feature b/changelog/3317.feature deleted file mode 100644 index 84bf679f7..000000000 --- a/changelog/3317.feature +++ /dev/null @@ -1,4 +0,0 @@ -Revamp the internals of the ``pytest.mark`` implementation with correct per node handling which fixes a number of -long standing bugs caused by the old design. This introduces new ``Node.iter_markers(name)`` and ``Node.get_closest_mark(name)`` APIs. -Users are **strongly encouraged** to read the `reasons for the revamp in the docs `_, -or jump over to details about `updating existing code to use the new APIs `_. diff --git a/changelog/3431.trivial.rst b/changelog/3431.trivial.rst deleted file mode 100644 index 08bc64e8e..000000000 --- a/changelog/3431.trivial.rst +++ /dev/null @@ -1 +0,0 @@ -Update all pypi.python.org URLs to pypi.org. diff --git a/changelog/3441.bugfix b/changelog/3441.bugfix deleted file mode 100644 index 6afeeab62..000000000 --- a/changelog/3441.bugfix +++ /dev/null @@ -1 +0,0 @@ -Also use iter_marker for discovering the marks applying for marker expressions from the cli to avoid the bad data from the legacy mark storage. \ No newline at end of file diff --git a/changelog/3443.bugfix.rst b/changelog/3443.bugfix.rst deleted file mode 100644 index e8bdcdf1d..000000000 --- a/changelog/3443.bugfix.rst +++ /dev/null @@ -1 +0,0 @@ -When showing diffs of failed assertions where the contents contain only whitespace, escape them using ``repr()`` first to make it easy to spot the differences. diff --git a/doc/en/announce/index.rst b/doc/en/announce/index.rst index f802c9e4c..98b9de572 100644 --- a/doc/en/announce/index.rst +++ b/doc/en/announce/index.rst @@ -6,6 +6,7 @@ Release announcements :maxdepth: 2 + release-3.6.0 release-3.5.1 release-3.5.0 release-3.4.2 diff --git a/doc/en/announce/release-3.6.0.rst b/doc/en/announce/release-3.6.0.rst new file mode 100644 index 000000000..37361cf4a --- /dev/null +++ b/doc/en/announce/release-3.6.0.rst @@ -0,0 +1,41 @@ +pytest-3.6.0 +======================================= + +The pytest team is proud to announce the 3.6.0 release! + +pytest is a mature Python testing tool with more than a 1600 tests +against itself, passing on many different interpreters and platforms. + +This release contains a number of bugs fixes and improvements, so users are encouraged +to take a look at the CHANGELOG: + + http://doc.pytest.org/en/latest/changelog.html + +For complete documentation, please visit: + + http://docs.pytest.org + +As usual, you can upgrade from pypi via: + + pip install -U pytest + +Thanks to all who contributed to this release, among them: + +* Anthony Shaw +* ApaDoctor +* Brian Maissy +* Bruno Oliveira +* Jon Dufresne +* Katerina Koukiou +* Miro Hrončok +* Rachel Kogan +* Ronny Pfannschmidt +* Tim Hughes +* Tyler Goodlet +* Ville Skyttä +* aviral1701 +* feuillemorte + + +Happy testing, +The Pytest Development Team diff --git a/doc/en/example/simple.rst b/doc/en/example/simple.rst index 634e01d5d..90d1bd4ad 100644 --- a/doc/en/example/simple.rst +++ b/doc/en/example/simple.rst @@ -389,7 +389,7 @@ Now we can profile which test functions execute the slowest:: ========================= slowest 3 test durations ========================= 0.30s call test_some_are_slow.py::test_funcslow2 0.20s call test_some_are_slow.py::test_funcslow1 - 0.10s call test_some_are_slow.py::test_funcfast + 0.11s call test_some_are_slow.py::test_funcfast ========================= 3 passed in 0.12 seconds ========================= incremental testing - test steps diff --git a/doc/en/logging.rst b/doc/en/logging.rst index 44cfaaa28..b2d98f547 100644 --- a/doc/en/logging.rst +++ b/doc/en/logging.rst @@ -123,7 +123,7 @@ You can call ``caplog.clear()`` to reset the captured log records in a test:: assert ['Foo'] == [rec.message for rec in caplog.records] -The ``caplop.records`` attribute contains records from the current stage only, so +The ``caplog.records`` attribute contains records from the current stage only, so inside the ``setup`` phase it contains only setup logs, same with the ``call`` and ``teardown`` phases. diff --git a/tasks/requirements.txt b/tasks/requirements.txt index 7f41521e6..db54e76e8 100644 --- a/tasks/requirements.txt +++ b/tasks/requirements.txt @@ -1,4 +1,6 @@ +-e . gitpython invoke towncrier tox +wheel