Skip to content

Commit

Permalink
Merge pull request #6614 from blueyed/release-5.3.5
Browse files Browse the repository at this point in the history
Preparing release version 5.3.5
  • Loading branch information
blueyed committed Jan 29, 2020
2 parents a6d5513 + fd1a51a commit 1b3eb41
Show file tree
Hide file tree
Showing 15 changed files with 67 additions and 34 deletions.
1 change: 1 addition & 0 deletions doc/en/announce/index.rst
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Release announcements
:maxdepth: 2


release-5.3.5
release-5.3.4
release-5.3.3
release-5.3.2
Expand Down
19 changes: 19 additions & 0 deletions doc/en/announce/release-5.3.5.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
pytest-5.3.5
=======================================

pytest 5.3.5 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 https://docs.pytest.org/en/latest/changelog.html.

Thanks to all who contributed to this release, among them:

* Daniel Hahler
* Ran Benita


Happy testing,
The pytest Development Team
9 changes: 9 additions & 0 deletions doc/en/changelog.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,15 @@ with advance notice in the **Deprecations** section of releases.

.. towncrier release notes start
pytest 5.3.5 (2020-01-29)
=========================

Bug Fixes
---------

- `#6517 <https://github.com/pytest-dev/pytest/issues/6517>`_: Fix regression in pytest 5.3.4 causing an INTERNALERROR due to a wrong assertion.


pytest 5.3.4 (2020-01-20)
=========================

Expand Down
7 changes: 2 additions & 5 deletions doc/en/example/parametrize.rst
Original file line number Diff line number Diff line change
Expand Up @@ -475,11 +475,8 @@ Running it results in some skips if we don't have all the python interpreters in
.. code-block:: pytest
. $ pytest -rs -q multipython.py
ssssssssssss...ssssssssssss [100%]
========================= short test summary info ==========================
SKIPPED [12] $REGENDOC_TMPDIR/CWD/multipython.py:29: 'python3.5' not found
SKIPPED [12] $REGENDOC_TMPDIR/CWD/multipython.py:29: 'python3.7' not found
3 passed, 24 skipped in 0.12s
........................... [100%]
27 passed in 0.12s
Indirect parametrization of optional implementations/imports
--------------------------------------------------------------------
Expand Down
4 changes: 2 additions & 2 deletions doc/en/example/reportingdemo.rst
Original file line number Diff line number Diff line change
Expand Up @@ -436,7 +436,7 @@ Here is a nice run of several failures and how ``pytest`` presents things:
items = [1, 2, 3]
print("items is {!r}".format(items))
> a, b = items.pop()
E TypeError: 'int' object is not iterable
E TypeError: cannot unpack non-iterable int object
failure_demo.py:181: TypeError
--------------------------- Captured stdout call ---------------------------
Expand Down Expand Up @@ -516,7 +516,7 @@ Here is a nice run of several failures and how ``pytest`` presents things:
def test_z2_type_error(self):
items = 3
> a, b = items
E TypeError: 'int' object is not iterable
E TypeError: cannot unpack non-iterable int object
failure_demo.py:222: TypeError
______________________ TestMoreErrors.test_startswith ______________________
Expand Down
2 changes: 1 addition & 1 deletion doc/en/example/simple.rst
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,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.11s call test_some_are_slow.py::test_funcfast
0.10s call test_some_are_slow.py::test_funcfast
============================ 3 passed in 0.12s =============================
incremental testing - test steps
Expand Down
2 changes: 1 addition & 1 deletion doc/en/getting-started.rst
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Install ``pytest``
.. code-block:: bash
$ pytest --version
This is pytest version 5.x.y, imported from $PYTHON_PREFIX/lib/python3.6/site-packages/pytest/__init__.py
This is pytest version 5.x.y, imported from $PYTHON_PREFIX/lib/python3.8/site-packages/pytest/__init__.py
.. _`simpletest`:

Expand Down
8 changes: 4 additions & 4 deletions src/_pytest/config/argparsing.py
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,8 @@ def parse(self, args, namespace=None):

self.optparser = self._getparser()
try_argcomplete(self.optparser)
strargs = [str(x) if isinstance(x, py.path.local) else x for x in args]
return self.optparser.parse_args(strargs, namespace=namespace)
args = [str(x) if isinstance(x, py.path.local) else x for x in args]
return self.optparser.parse_args(args, namespace=namespace)

def _getparser(self) -> "MyOptionParser":
from _pytest._argcomplete import filescompleter
Expand Down Expand Up @@ -124,8 +124,8 @@ def parse_known_and_unknown_args(
the remaining arguments unknown at this point.
"""
optparser = self._getparser()
strargs = [str(x) if isinstance(x, py.path.local) else x for x in args]
return optparser.parse_known_args(strargs, namespace=namespace)
args = [str(x) if isinstance(x, py.path.local) else x for x in args]
return optparser.parse_known_args(args, namespace=namespace)

def addini(self, name, help, type=None, default=None):
""" register an ini-file option.
Expand Down
7 changes: 2 additions & 5 deletions src/_pytest/config/findpaths.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,6 @@
import os
from typing import Any
from typing import Iterable
from typing import List
from typing import Optional
from typing import Tuple

import py

Expand Down Expand Up @@ -63,7 +60,7 @@ def getcfg(args, config=None):
return None, None, None


def get_common_ancestor(paths: Iterable[py.path.local]) -> py.path.local:
def get_common_ancestor(paths):
common_ancestor = None
for path in paths:
if not path.exists():
Expand Down Expand Up @@ -116,7 +113,7 @@ def determine_setup(
args: List[str],
rootdir_cmd_arg: Optional[str] = None,
config: Optional["Config"] = None,
) -> Tuple[py.path.local, Optional[str], Any]:
):
dirs = get_dirs_from_args(args)
if inifile:
iniconfig = py.iniconfig.IniConfig(inifile)
Expand Down
2 changes: 1 addition & 1 deletion src/_pytest/doctest.py
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,7 @@ def repr_failure(self, excinfo):
else:
return super().repr_failure(excinfo)

def reportinfo(self) -> Tuple[py.path.local, int, str]:
def reportinfo(self) -> Tuple[str, int, str]:
return self.fspath, self.dtest.lineno, "[doctest] %s" % self.name


Expand Down
11 changes: 4 additions & 7 deletions src/_pytest/fixtures.py
Original file line number Diff line number Diff line change
Expand Up @@ -351,7 +351,7 @@ def __init__(self, pyfuncitem):
self.fixturename = None
#: Scope string, one of "function", "class", "module", "session"
self.scope = "function"
self._fixture_defs = {} # type: Dict[str, FixtureDef]
self._fixture_defs = {} # argname -> FixtureDef
fixtureinfo = pyfuncitem._fixtureinfo
self._arg2fixturedefs = fixtureinfo.name2fixturedefs.copy()
self._arg2index = {}
Expand Down Expand Up @@ -426,8 +426,7 @@ def module(self):
@scopeproperty()
def fspath(self) -> py.path.local:
""" the file system path of the test module which collected this test. """
# TODO: Remove ignore once _pyfuncitem is properly typed.
return self._pyfuncitem.fspath # type: ignore
return self._pyfuncitem.fspath

@property
def keywords(self):
Expand Down Expand Up @@ -550,9 +549,7 @@ def _compute_fixture_value(self, fixturedef):
source_lineno = frameinfo.lineno
source_path = py.path.local(source_path)
if source_path.relto(funcitem.config.rootdir):
source_path_str = source_path.relto(funcitem.config.rootdir)
else:
source_path_str = str(source_path)
source_path = source_path.relto(funcitem.config.rootdir)
msg = (
"The requested fixture has no parameter defined for test:\n"
" {}\n\n"
Expand All @@ -561,7 +558,7 @@ def _compute_fixture_value(self, fixturedef):
funcitem.nodeid,
fixturedef.argname,
getlocation(fixturedef.func, funcitem.config.rootdir),
source_path_str,
source_path,
source_lineno,
)
)
Expand Down
8 changes: 4 additions & 4 deletions src/_pytest/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -367,9 +367,9 @@ class Failed(Exception):

@attr.s
class _bestrelpath_cache(dict):
path = attr.ib(type=py.path.local)
path = attr.ib()

def __missing__(self, path: py.path.local) -> str:
def __missing__(self, path: str) -> str:
r = self.path.bestrelpath(path) # type: str
self[path] = r
return r
Expand Down Expand Up @@ -399,7 +399,7 @@ def __init__(self, config):
self._node_cache = {}
self._bestrelpathcache = _bestrelpath_cache(
config.rootdir
) # type: Dict[py.path.local, str]
) # type: Dict[str, str]
# Dirnames of pkgs with dunder-init files.
self._pkg_roots = {}

Expand All @@ -414,7 +414,7 @@ def __repr__(self):
self.testscollected,
)

def _node_location_to_relpath(self, node_path: py.path.local) -> str:
def _node_location_to_relpath(self, node_path: str) -> str:
# bestrelpath is a quite slow function
return self._bestrelpathcache[node_path]

Expand Down
1 change: 0 additions & 1 deletion src/_pytest/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -462,7 +462,6 @@ def reportinfo(self) -> Tuple[Union[py.path.local, str], Optional[int], str]:
@cached_property
def location(self) -> Tuple[str, Optional[int], str]:
location = self.reportinfo()
assert isinstance(location[0], py.path.local), location[0]
fspath = self.session._node_location_to_relpath(location[0])
assert type(location[2]) is str
return (fspath, location[1], location[2])
6 changes: 3 additions & 3 deletions testing/python/collect.py
Original file line number Diff line number Diff line change
Expand Up @@ -1018,18 +1018,18 @@ class TestReportInfo:
def test_itemreport_reportinfo(self, testdir):
testdir.makeconftest(
"""
import pytest, py
import pytest
class MyFunction(pytest.Function):
def reportinfo(self):
return py.path.local("foo"), 42, "custom"
return "ABCDE", 42, "custom"
def pytest_pycollect_makeitem(collector, name, obj):
if name == "test_func":
return MyFunction(name, parent=collector)
"""
)
item = testdir.getitem("def test_func(): pass")
item.config.pluginmanager.getplugin("runner")
assert item.location == ("foo", 42, "custom")
assert item.location == ("ABCDE", 42, "custom")

def test_func_reportinfo(self, testdir):
item = testdir.getitem("def test_func(): pass")
Expand Down
14 changes: 14 additions & 0 deletions testing/test_nose.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,3 +375,17 @@ def test_io(self):
)
result = testdir.runpytest()
result.stdout.fnmatch_lines(["* 1 skipped *"])


def test_issue_6517(testdir):
testdir.makepyfile(
"""
from nose.tools import raises
@raises(RuntimeError)
def test_fail_without_tcp():
raise RuntimeError
"""
)
result = testdir.runpytest()
result.stdout.fnmatch_lines(["* 1 passed *"])

0 comments on commit 1b3eb41

Please sign in to comment.