Merge remote-tracking branch 'upstream/master' into features
This commit is contained in:
commit
7a62619a75
20
.travis.yml
20
.travis.yml
|
@ -2,10 +2,8 @@ sudo: false
|
||||||
language: python
|
language: python
|
||||||
python:
|
python:
|
||||||
- '3.6'
|
- '3.6'
|
||||||
# command to install dependencies
|
|
||||||
install:
|
install:
|
||||||
- pip install --upgrade --pre tox
|
- pip install --upgrade --pre tox
|
||||||
# # command to run tests
|
|
||||||
env:
|
env:
|
||||||
matrix:
|
matrix:
|
||||||
# coveralls is not listed in tox's envlist, but should run in travis
|
# coveralls is not listed in tox's envlist, but should run in travis
|
||||||
|
@ -29,7 +27,7 @@ env:
|
||||||
- TOXENV=doctesting
|
- TOXENV=doctesting
|
||||||
- TOXENV=docs
|
- TOXENV=docs
|
||||||
|
|
||||||
matrix:
|
jobs:
|
||||||
include:
|
include:
|
||||||
- env: TOXENV=pypy
|
- env: TOXENV=pypy
|
||||||
python: 'pypy-5.4'
|
python: 'pypy-5.4'
|
||||||
|
@ -40,6 +38,22 @@ matrix:
|
||||||
- env: TOXENV=py37
|
- env: TOXENV=py37
|
||||||
python: 'nightly'
|
python: 'nightly'
|
||||||
|
|
||||||
|
- stage: deploy
|
||||||
|
python: '3.6'
|
||||||
|
env:
|
||||||
|
install: pip install -U setuptools setuptools_scm
|
||||||
|
script: skip
|
||||||
|
deploy:
|
||||||
|
provider: pypi
|
||||||
|
user: nicoddemus
|
||||||
|
distributions: sdist bdist_wheel
|
||||||
|
skip_upload_docs: true
|
||||||
|
password:
|
||||||
|
secure: xanTgTUu6XDQVqB/0bwJQXoDMnU5tkwZc5koz6mBkkqZhKdNOi2CLoC1XhiSZ+ah24l4V1E0GAqY5kBBcy9d7NVe4WNg4tD095LsHw+CRU6/HCVIFfyk2IZ+FPAlguesCcUiJSXOrlBF+Wj68wEvLoK7EoRFbJeiZ/f91Ww1sbtDlqXABWGHrmhPJL5Wva7o7+wG7JwJowqdZg1pbQExsCc7b53w4v2RBu3D6TJaTAzHiVsW+nUSI67vKI/uf+cR/OixsTfy37wlHgSwihYmrYLFls3V0bSpahCim3bCgMaFZx8S8xrdgJ++PzBCof2HeflFKvW+VCkoYzGEG4NrTWJoNz6ni4red9GdvfjGH3YCjAKS56h9x58zp2E5rpsb/kVq5/45xzV+dq6JRuhQ1nJWjBC6fSKAc/bfwnuFK3EBxNLkvBssLHvsNjj5XG++cB8DdS9wVGUqjpoK4puaXUWFqy4q3S9F86HEsKNgExtieA9qNx+pCIZVs6JCXZNjr0I5eVNzqJIyggNgJG6RyravsU35t9Zd9doL5g4Y7UKmAGTn1Sz24HQ4sMQgXdm2SyD8gEK5je4tlhUvfGtDvMSlstq71kIn9nRpFnqB6MFlbYSEAZmo8dGbCquoUc++6Rum208wcVbrzzVtGlXB/Ow9AbFMYeAGA0+N/K1e59c=
|
||||||
|
on:
|
||||||
|
tags: true
|
||||||
|
repo: pytest-dev/pytest
|
||||||
|
|
||||||
script: tox --recreate
|
script: tox --recreate
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
|
|
|
@ -8,6 +8,67 @@
|
||||||
|
|
||||||
.. towncrier release notes start
|
.. towncrier release notes start
|
||||||
|
|
||||||
|
Pytest 3.4.1 (2018-02-20)
|
||||||
|
=========================
|
||||||
|
|
||||||
|
Bug Fixes
|
||||||
|
---------
|
||||||
|
|
||||||
|
- Move import of ``doctest.UnexpectedException`` to top-level to avoid possible
|
||||||
|
errors when using ``--pdb``. (`#1810
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/1810>`_)
|
||||||
|
|
||||||
|
- Added printing of captured stdout/stderr before entering pdb, and improved a
|
||||||
|
test which was giving false negatives about output capturing. (`#3052
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3052>`_)
|
||||||
|
|
||||||
|
- Fix ordering of tests using parametrized fixtures which can lead to fixtures
|
||||||
|
being created more than necessary. (`#3161
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3161>`_)
|
||||||
|
|
||||||
|
- Fix bug where logging happening at hooks outside of "test run" hooks would
|
||||||
|
cause an internal error. (`#3184
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3184>`_)
|
||||||
|
|
||||||
|
- Detect arguments injected by ``unittest.mock.patch`` decorator correctly when
|
||||||
|
pypi ``mock.patch`` is installed and imported. (`#3206
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3206>`_)
|
||||||
|
|
||||||
|
- Errors shown when a ``pytest.raises()`` with ``match=`` fails are now cleaner
|
||||||
|
on what happened: When no exception was raised, the "matching '...'" part got
|
||||||
|
removed as it falsely implies that an exception was raised but it didn't
|
||||||
|
match. When a wrong exception was raised, it's now thrown (like
|
||||||
|
``pytest.raised()`` without ``match=`` would) instead of complaining about
|
||||||
|
the unmatched text. (`#3222
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3222>`_)
|
||||||
|
|
||||||
|
- Fixed output capture handling in doctests on macOS. (`#985
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/985>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Improved Documentation
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
- Add Sphinx parameter docs for ``match`` and ``message`` args to
|
||||||
|
``pytest.raises``. (`#3202
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3202>`_)
|
||||||
|
|
||||||
|
|
||||||
|
Trivial/Internal Changes
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
- pytest has changed the publication procedure and is now being published to
|
||||||
|
PyPI directly from Travis. (`#3060
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3060>`_)
|
||||||
|
|
||||||
|
- Rename ``ParameterSet._for_parameterize()`` to ``_for_parametrize()`` in
|
||||||
|
order to comply with the naming convention. (`#3166
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/3166>`_)
|
||||||
|
|
||||||
|
- Skip failing pdb/doctest test on mac. (`#985
|
||||||
|
<https://github.com/pytest-dev/pytest/issues/985>`_)
|
||||||
|
|
||||||
|
|
||||||
Pytest 3.4.0 (2018-01-30)
|
Pytest 3.4.0 (2018-01-30)
|
||||||
=========================
|
=========================
|
||||||
|
|
||||||
|
|
|
@ -22,44 +22,28 @@ taking a lot of time to make a new one.
|
||||||
|
|
||||||
Ensure your are in a clean work tree.
|
Ensure your are in a clean work tree.
|
||||||
|
|
||||||
#. Generate docs, changelog, announcements and upload a package to
|
#. Generate docs, changelog, announcements and a **local** tag::
|
||||||
your ``devpi`` staging server::
|
|
||||||
|
|
||||||
invoke generate.pre-release <VERSION> <DEVPI USER> --password <DEVPI PASSWORD>
|
invoke generate.pre-release <VERSION>
|
||||||
|
|
||||||
If ``--password`` is not given, it is assumed the user is already logged in ``devpi``.
|
|
||||||
If you don't have an account, please ask for one.
|
|
||||||
|
|
||||||
#. Open a PR for this branch targeting ``master``.
|
#. Open a PR for this branch targeting ``master``.
|
||||||
|
|
||||||
#. Test the package
|
#. After all tests pass and the PR has been approved, publish to PyPI by pushing the tag::
|
||||||
|
|
||||||
* **Manual method**
|
git push git@github.com:pytest-dev/pytest.git <VERSION>
|
||||||
|
|
||||||
Run from multiple machines::
|
Wait for the deploy to complete, then make sure it is `available on PyPI <https://pypi.org/project/pytest>`_.
|
||||||
|
|
||||||
devpi use https://devpi.net/USER/dev
|
#. Send an email announcement with the contents from::
|
||||||
devpi test pytest==VERSION
|
|
||||||
|
|
||||||
Check that tests pass for relevant combinations with::
|
doc/en/announce/release-<VERSION>.rst
|
||||||
|
|
||||||
devpi list pytest
|
To the following mailing lists:
|
||||||
|
|
||||||
* **CI servers**
|
* pytest-dev@python.org (all releases)
|
||||||
|
* python-announce-list@python.org (all releases)
|
||||||
|
* testing-in-python@lists.idyll.org (only major/minor releases)
|
||||||
|
|
||||||
Configure a repository as per-instructions on
|
And announce it on `Twitter <https://twitter.com/>`_ with the ``#pytest`` hashtag.
|
||||||
devpi-cloud-test_ to test the package on Travis_ and AppVeyor_.
|
|
||||||
All test environments should pass.
|
|
||||||
|
|
||||||
#. Publish to PyPI::
|
|
||||||
|
|
||||||
invoke generate.publish-release <VERSION> <DEVPI USER> <PYPI_NAME>
|
|
||||||
|
|
||||||
where PYPI_NAME is the name of pypi.python.org as configured in your ``~/.pypirc``
|
|
||||||
file `for devpi <http://doc.devpi.net/latest/quickstart-releaseprocess.html?highlight=pypirc#devpi-push-releasing-to-an-external-index>`_.
|
|
||||||
|
|
||||||
#. After a minor/major release, merge ``release-X.Y.Z`` into ``master`` and push (or open a PR).
|
#. After a minor/major release, merge ``release-X.Y.Z`` into ``master`` and push (or open a PR).
|
||||||
|
|
||||||
.. _devpi-cloud-test: https://github.com/obestwalter/devpi-cloud-test
|
|
||||||
.. _AppVeyor: https://www.appveyor.com/
|
|
||||||
.. _Travis: https://travis-ci.org
|
|
||||||
|
|
|
@ -2,6 +2,8 @@
|
||||||
from __future__ import absolute_import, division, print_function
|
from __future__ import absolute_import, division, print_function
|
||||||
|
|
||||||
import traceback
|
import traceback
|
||||||
|
import sys
|
||||||
|
import platform
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from _pytest._code.code import ExceptionInfo, ReprFileLocation, TerminalRepr
|
from _pytest._code.code import ExceptionInfo, ReprFileLocation, TerminalRepr
|
||||||
|
@ -103,8 +105,21 @@ class DoctestItem(pytest.Item):
|
||||||
|
|
||||||
def runtest(self):
|
def runtest(self):
|
||||||
_check_all_skipped(self.dtest)
|
_check_all_skipped(self.dtest)
|
||||||
|
self._disable_output_capturing_for_darwin()
|
||||||
self.runner.run(self.dtest)
|
self.runner.run(self.dtest)
|
||||||
|
|
||||||
|
def _disable_output_capturing_for_darwin(self):
|
||||||
|
"""
|
||||||
|
Disable output capturing. Otherwise, stdout is lost to doctest (#985)
|
||||||
|
"""
|
||||||
|
if platform.system() != 'Darwin':
|
||||||
|
return
|
||||||
|
capman = self.config.pluginmanager.getplugin("capturemanager")
|
||||||
|
if capman:
|
||||||
|
out, err = capman.suspend_global_capture(in_=True)
|
||||||
|
sys.stdout.write(out)
|
||||||
|
sys.stderr.write(err)
|
||||||
|
|
||||||
def repr_failure(self, excinfo):
|
def repr_failure(self, excinfo):
|
||||||
import doctest
|
import doctest
|
||||||
if excinfo.errisinstance((doctest.DocTestFailure,
|
if excinfo.errisinstance((doctest.DocTestFailure,
|
||||||
|
|
|
@ -571,7 +571,6 @@ def raises(expected_exception, *args, **kwargs):
|
||||||
message = kwargs.pop("message")
|
message = kwargs.pop("message")
|
||||||
if "match" in kwargs:
|
if "match" in kwargs:
|
||||||
match_expr = kwargs.pop("match")
|
match_expr = kwargs.pop("match")
|
||||||
message += " matching '{0}'".format(match_expr)
|
|
||||||
return RaisesContext(expected_exception, message, match_expr)
|
return RaisesContext(expected_exception, message, match_expr)
|
||||||
elif isinstance(args[0], str):
|
elif isinstance(args[0], str):
|
||||||
code, = args
|
code, = args
|
||||||
|
@ -618,6 +617,6 @@ class RaisesContext(object):
|
||||||
suppress_exception = issubclass(self.excinfo.type, self.expected_exception)
|
suppress_exception = issubclass(self.excinfo.type, self.expected_exception)
|
||||||
if sys.version_info[0] == 2 and suppress_exception:
|
if sys.version_info[0] == 2 and suppress_exception:
|
||||||
sys.exc_clear()
|
sys.exc_clear()
|
||||||
if self.match_expr:
|
if self.match_expr and suppress_exception:
|
||||||
self.excinfo.match(self.match_expr)
|
self.excinfo.match(self.match_expr)
|
||||||
return suppress_exception
|
return suppress_exception
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
Move import of ``doctest.UnexpectedException`` to top-level to avoid possible errors when using ``--pdb``.
|
|
|
@ -1 +0,0 @@
|
||||||
Added printing of captured stdout/stderr before entering pdb, and improved a test which was giving false negatives about output capturing.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix ordering of tests using parametrized fixtures which can lead to fixtures being created more than necessary.
|
|
|
@ -1 +0,0 @@
|
||||||
Rename ``ParameterSet._for_parameterize()`` to ``_for_parametrize()`` in order to comply with the naming convention.
|
|
|
@ -1 +0,0 @@
|
||||||
Fix bug where logging happening at hooks outside of "test run" hooks would cause an internal error.
|
|
|
@ -1 +0,0 @@
|
||||||
Add Sphinx parameter docs for ``match`` and ``message`` args to ``pytest.raises``.
|
|
|
@ -1 +0,0 @@
|
||||||
Detect arguments injected by ``unittest.mock.patch`` decorator correctly when pypi ``mock.patch`` is installed and imported.
|
|
|
@ -1 +0,0 @@
|
||||||
Skip failing pdb/doctest test on mac.
|
|
|
@ -1,10 +1,12 @@
|
||||||
This directory contains "newsfragments" which are short that contain a small **ReST**-formatted
|
This directory contains "newsfragments" which are short files that contain a small **ReST**-formatted
|
||||||
text that will be added to the next ``CHANGELOG``.
|
text that will be added to the next ``CHANGELOG``.
|
||||||
|
|
||||||
The ``CHANGELOG`` will be read by users, so this description should be aimed to pytest users
|
The ``CHANGELOG`` will be read by users, so this description should be aimed to pytest users
|
||||||
instead of describing internal changes which are only relevant to the developers.
|
instead of describing internal changes which are only relevant to the developers.
|
||||||
|
|
||||||
Make sure to use full sentences with correct case and punctuation, for example: *Fix issue with non-ascii contents in doctest text files.*
|
Make sure to use full sentences with correct case and punctuation, for example::
|
||||||
|
|
||||||
|
Fix issue with non-ascii messages from the ``warnings`` module.
|
||||||
|
|
||||||
Each file should be named like ``<ISSUE>.<TYPE>.rst``, where
|
Each file should be named like ``<ISSUE>.<TYPE>.rst``, where
|
||||||
``<ISSUE>`` is an issue number, and ``<TYPE>`` is one of:
|
``<ISSUE>`` is an issue number, and ``<TYPE>`` is one of:
|
||||||
|
|
|
@ -6,6 +6,7 @@ Release announcements
|
||||||
:maxdepth: 2
|
:maxdepth: 2
|
||||||
|
|
||||||
|
|
||||||
|
release-3.4.1
|
||||||
release-3.4.0
|
release-3.4.0
|
||||||
release-3.3.2
|
release-3.3.2
|
||||||
release-3.3.1
|
release-3.3.1
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
pytest-3.4.1
|
||||||
|
=======================================
|
||||||
|
|
||||||
|
pytest 3.4.1 has just been released to PyPI.
|
||||||
|
|
||||||
|
This is a bug-fix release, being a drop-in replacement. To upgrade::
|
||||||
|
|
||||||
|
pip install --upgrade pytest
|
||||||
|
|
||||||
|
The full changelog is available at http://doc.pytest.org/en/latest/changelog.html.
|
||||||
|
|
||||||
|
Thanks to all who contributed to this release, among them:
|
||||||
|
|
||||||
|
* Aaron
|
||||||
|
* Alan Velasco
|
||||||
|
* Andy Freeland
|
||||||
|
* Brian Maissy
|
||||||
|
* Bruno Oliveira
|
||||||
|
* Florian Bruhin
|
||||||
|
* Jason R. Coombs
|
||||||
|
* Marcin Bachry
|
||||||
|
* Pedro Algarvio
|
||||||
|
* Ronny Pfannschmidt
|
||||||
|
|
||||||
|
|
||||||
|
Happy testing,
|
||||||
|
The pytest Development Team
|
|
@ -358,7 +358,7 @@ get on the terminal - we are working on that)::
|
||||||
> int(s)
|
> int(s)
|
||||||
E ValueError: invalid literal for int() with base 10: 'qwe'
|
E ValueError: invalid literal for int() with base 10: 'qwe'
|
||||||
|
|
||||||
<0-codegen $PYTHON_PREFIX/lib/python3.5/site-packages/_pytest/python_api.py:580>:1: ValueError
|
<0-codegen $PYTHON_PREFIX/lib/python3.5/site-packages/_pytest/python_api.py:583>:1: ValueError
|
||||||
______________________ TestRaises.test_raises_doesnt _______________________
|
______________________ TestRaises.test_raises_doesnt _______________________
|
||||||
|
|
||||||
self = <failure_demo.TestRaises object at 0xdeadbeef>
|
self = <failure_demo.TestRaises object at 0xdeadbeef>
|
||||||
|
|
|
@ -385,8 +385,8 @@ Now we can profile which test functions execute the slowest::
|
||||||
test_some_are_slow.py ... [100%]
|
test_some_are_slow.py ... [100%]
|
||||||
|
|
||||||
========================= slowest 3 test durations =========================
|
========================= slowest 3 test durations =========================
|
||||||
0.58s call test_some_are_slow.py::test_funcslow2
|
0.30s call test_some_are_slow.py::test_funcslow2
|
||||||
0.41s call test_some_are_slow.py::test_funcslow1
|
0.20s call test_some_are_slow.py::test_funcslow1
|
||||||
0.10s call test_some_are_slow.py::test_funcfast
|
0.10s call test_some_are_slow.py::test_funcfast
|
||||||
========================= 3 passed in 0.12 seconds =========================
|
========================= 3 passed in 0.12 seconds =========================
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
import os
|
"""
|
||||||
|
Invoke development tasks.
|
||||||
|
"""
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from subprocess import check_output, check_call
|
from subprocess import check_output, check_call
|
||||||
|
|
||||||
|
@ -57,7 +59,7 @@ def regen(ctx):
|
||||||
|
|
||||||
@invoke.task()
|
@invoke.task()
|
||||||
def make_tag(ctx, version):
|
def make_tag(ctx, version):
|
||||||
"""Create a new (local) tag for the release, only if the repository is clean."""
|
"""Create a new, local tag for the release, only if the repository is clean."""
|
||||||
from git import Repo
|
from git import Repo
|
||||||
|
|
||||||
repo = Repo('.')
|
repo = Repo('.')
|
||||||
|
@ -74,29 +76,11 @@ def make_tag(ctx, version):
|
||||||
repo.create_tag(version)
|
repo.create_tag(version)
|
||||||
|
|
||||||
|
|
||||||
@invoke.task()
|
|
||||||
def devpi_upload(ctx, version, user, password=None):
|
|
||||||
"""Creates and uploads a package to devpi for testing."""
|
|
||||||
if password:
|
|
||||||
print("[generate.devpi_upload] devpi login {}".format(user))
|
|
||||||
check_call(['devpi', 'login', user, '--password', password])
|
|
||||||
|
|
||||||
check_call(['devpi', 'use', 'https://devpi.net/{}/dev'.format(user)])
|
|
||||||
|
|
||||||
env = os.environ.copy()
|
|
||||||
env['SETUPTOOLS_SCM_PRETEND_VERSION'] = version
|
|
||||||
check_call(['devpi', 'upload', '--formats', 'sdist,bdist_wheel'], env=env)
|
|
||||||
print("[generate.devpi_upload] package uploaded")
|
|
||||||
|
|
||||||
|
|
||||||
@invoke.task(help={
|
@invoke.task(help={
|
||||||
'version': 'version being released',
|
'version': 'version being released',
|
||||||
'user': 'name of the user on devpi to stage the generated package',
|
|
||||||
'password': 'user password on devpi to stage the generated package '
|
|
||||||
'(if not given assumed logged in)',
|
|
||||||
})
|
})
|
||||||
def pre_release(ctx, version, user, password=None):
|
def pre_release(ctx, version):
|
||||||
"""Generates new docs, release announcements and uploads a new release to devpi for testing."""
|
"""Generates new docs, release announcements and creates a local tag."""
|
||||||
announce(ctx, version)
|
announce(ctx, version)
|
||||||
regen(ctx)
|
regen(ctx)
|
||||||
changelog(ctx, version, write_out=True)
|
changelog(ctx, version, write_out=True)
|
||||||
|
@ -106,49 +90,10 @@ def pre_release(ctx, version, user, password=None):
|
||||||
|
|
||||||
make_tag(ctx, version)
|
make_tag(ctx, version)
|
||||||
|
|
||||||
devpi_upload(ctx, version=version, user=user, password=password)
|
|
||||||
|
|
||||||
print()
|
print()
|
||||||
print('[generate.pre_release] Please push your branch and open a PR.')
|
print('[generate.pre_release] Please push your branch and open a PR.')
|
||||||
|
|
||||||
|
|
||||||
@invoke.task(help={
|
|
||||||
'version': 'version being released',
|
|
||||||
'user': 'name of the user on devpi to stage the generated package',
|
|
||||||
'pypi_name': 'name of the pypi configuration section in your ~/.pypirc',
|
|
||||||
})
|
|
||||||
def publish_release(ctx, version, user, pypi_name):
|
|
||||||
"""Publishes a package previously created by the 'pre_release' command."""
|
|
||||||
from git import Repo
|
|
||||||
repo = Repo('.')
|
|
||||||
tag_names = [x.name for x in repo.tags]
|
|
||||||
if version not in tag_names:
|
|
||||||
print('Could not find tag for version {}, exiting...'.format(version))
|
|
||||||
raise invoke.Exit(code=2)
|
|
||||||
|
|
||||||
check_call(['devpi', 'use', 'https://devpi.net/{}/dev'.format(user)])
|
|
||||||
check_call(['devpi', 'push', 'pytest=={}'.format(version), 'pypi:{}'.format(pypi_name)])
|
|
||||||
check_call(['git', 'push', 'git@github.com:pytest-dev/pytest.git', version])
|
|
||||||
|
|
||||||
emails = [
|
|
||||||
'pytest-dev@python.org',
|
|
||||||
'python-announce-list@python.org'
|
|
||||||
]
|
|
||||||
if version.endswith('.0'):
|
|
||||||
emails.append('testing-in-python@lists.idyll.org')
|
|
||||||
print('Version {} has been published to PyPI!'.format(version))
|
|
||||||
print()
|
|
||||||
print('Please send an email announcement with the contents from:')
|
|
||||||
print()
|
|
||||||
print(' doc/en/announce/release-{}.rst'.format(version))
|
|
||||||
print()
|
|
||||||
print('To the following mail lists:')
|
|
||||||
print()
|
|
||||||
print(' ', ','.join(emails))
|
|
||||||
print()
|
|
||||||
print('And announce it on twitter adding the #pytest hash tag.')
|
|
||||||
|
|
||||||
|
|
||||||
@invoke.task(help={
|
@invoke.task(help={
|
||||||
'version': 'version being released',
|
'version': 'version being released',
|
||||||
'write_out': 'write changes to the actual changelog'
|
'write_out': 'write changes to the actual changelog'
|
||||||
|
@ -158,5 +103,4 @@ def changelog(ctx, version, write_out=False):
|
||||||
addopts = []
|
addopts = []
|
||||||
else:
|
else:
|
||||||
addopts = ['--draft']
|
addopts = ['--draft']
|
||||||
check_call(['towncrier', '--version', version] + addopts)
|
check_call(['towncrier', '--yes', '--version', version] + addopts)
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,4 @@
|
||||||
devpi-client
|
|
||||||
gitpython
|
gitpython
|
||||||
invoke
|
invoke
|
||||||
towncrier
|
towncrier
|
||||||
tox
|
tox
|
||||||
wheel
|
|
||||||
|
|
|
@ -132,3 +132,13 @@ class TestRaises(object):
|
||||||
with pytest.raises(AssertionError, match=expr):
|
with pytest.raises(AssertionError, match=expr):
|
||||||
with pytest.raises(ValueError, match=msg):
|
with pytest.raises(ValueError, match=msg):
|
||||||
int('asdf', base=10)
|
int('asdf', base=10)
|
||||||
|
|
||||||
|
def test_raises_match_wrong_type(self):
|
||||||
|
"""Raising an exception with the wrong type and match= given.
|
||||||
|
|
||||||
|
pytest should throw the unexpected exception - the pattern match is not
|
||||||
|
really relevant if we got a different exception.
|
||||||
|
"""
|
||||||
|
with pytest.raises(ValueError):
|
||||||
|
with pytest.raises(IndexError, match='nomatch'):
|
||||||
|
int('asdf')
|
||||||
|
|
|
@ -316,10 +316,6 @@ class TestPDB(object):
|
||||||
child.read()
|
child.read()
|
||||||
self.flush(child)
|
self.flush(child)
|
||||||
|
|
||||||
# For some reason the interaction between doctest's and pytest's output
|
|
||||||
# capturing mechanisms are messing up the stdout on mac. (See #985).
|
|
||||||
# Should be solvable, but skipping until we have a chance to investigate.
|
|
||||||
@pytest.mark.xfail("sys.platform == 'darwin'", reason='See issue #985', run=False)
|
|
||||||
def test_pdb_interaction_doctest(self, testdir):
|
def test_pdb_interaction_doctest(self, testdir):
|
||||||
p1 = testdir.makepyfile("""
|
p1 = testdir.makepyfile("""
|
||||||
import pytest
|
import pytest
|
||||||
|
|
Loading…
Reference in New Issue