diff --git a/CHANGELOG.rst b/CHANGELOG.rst
index faaa6537498..aba7fa3eac6 100644
--- a/CHANGELOG.rst
+++ b/CHANGELOG.rst
@@ -146,13 +146,30 @@
* Add proposal to docs for a new feature that enables users to combine multiple
fixtures into one. Thanks to `@hpk42`_ and `@hackebrot`_.
+* Rename ``getfuncargvalue`` to ``getfixturevalue``. ``getfuncargvalue`` is
+ deprecated but still present. Thanks to `@RedBeardCode`_ and `@tomviner`_
+ for PR (`#1626`_).
+
+* Always include full assertion explanation. The previous behaviour was hiding
+ sub-expressions that happened to be False, assuming this was redundant information.
+ Thanks `@bagerard`_ for reporting (`#1503`_). Thanks to `@davehunt`_ and
+ `@tomviner`_ for PR.
+
+* Renamed the pytest ``pdb`` module (plugin) into ``debugging``.
+
*
+* ImportErrors in plugins now are a fatal error instead of issuing a
+ pytest warning (`#1479`_). Thanks to `@The-Compiler`_ for the PR.
+
.. _#1580: https://github.com/pytest-dev/pytest/pull/1580
.. _#1605: https://github.com/pytest-dev/pytest/issues/1605
.. _#1597: https://github.com/pytest-dev/pytest/pull/1597
.. _#460: https://github.com/pytest-dev/pytest/pull/460
.. _#1553: https://github.com/pytest-dev/pytest/issues/1553
+.. _#1626: https://github.com/pytest-dev/pytest/pull/1626
+.. _#1503: https://github.com/pytest-dev/pytest/issues/1503
+.. _#1479: https://github.com/pytest-dev/pytest/issues/1479
.. _@graingert: https://github.com/graingert
.. _@taschini: https://github.com/taschini
@@ -166,6 +183,9 @@
``--continue-on-collection-errors`` option to restore previous behaviour.
Thanks `@olegpidsadnyi`_ and `@omarkohl`_ for the complete PR (`#1628`_).
+.. _@bagerard: https://github.com/bagerard
+.. _@davehunt: https://github.com/davehunt
+
*
diff --git a/_pytest/assertion/util.py b/_pytest/assertion/util.py
index 8bf425caf48..2481cf34ccd 100644
--- a/_pytest/assertion/util.py
+++ b/_pytest/assertion/util.py
@@ -38,44 +38,11 @@ def format_explanation(explanation):
displaying diffs.
"""
explanation = ecu(explanation)
- explanation = _collapse_false(explanation)
lines = _split_explanation(explanation)
result = _format_lines(lines)
return u('\n').join(result)
-def _collapse_false(explanation):
- """Collapse expansions of False
-
- So this strips out any "assert False\n{where False = ...\n}"
- blocks.
- """
- where = 0
- while True:
- start = where = explanation.find("False\n{False = ", where)
- if where == -1:
- break
- level = 0
- prev_c = explanation[start]
- for i, c in enumerate(explanation[start:]):
- if prev_c + c == "\n{":
- level += 1
- elif prev_c + c == "\n}":
- level -= 1
- if not level:
- break
- prev_c = c
- else:
- raise AssertionError("unbalanced braces: %r" % (explanation,))
- end = start + i
- where = end
- if explanation[end - 1] == '\n':
- explanation = (explanation[:start] + explanation[start+15:end-1] +
- explanation[end+1:])
- where -= 17
- return explanation
-
-
def _split_explanation(explanation):
"""Return a list of individual lines in the explanation
diff --git a/_pytest/config.py b/_pytest/config.py
index 72613d41f63..a2ff1eeab45 100644
--- a/_pytest/config.py
+++ b/_pytest/config.py
@@ -63,7 +63,7 @@ class UsageError(Exception):
_preinit = []
default_plugins = (
- "mark main terminal runner python pdb unittest capture skipping "
+ "mark main terminal runner python debugging unittest capture skipping "
"tmpdir monkeypatch recwarn pastebin helpconfig nose assertion genscript "
"junitxml resultlog doctest cacheprovider setuponly setupplan").split()
@@ -655,20 +655,17 @@ def _set_opt_strings(self, opts):
self._long_opts.append(opt)
def __repr__(self):
- retval = 'Argument('
+ args = []
if self._short_opts:
- retval += '_short_opts: ' + repr(self._short_opts) + ', '
+ args += ['_short_opts: ' + repr(self._short_opts)]
if self._long_opts:
- retval += '_long_opts: ' + repr(self._long_opts) + ', '
- retval += 'dest: ' + repr(self.dest) + ', '
+ args += ['_long_opts: ' + repr(self._long_opts)]
+ args += ['dest: ' + repr(self.dest)]
if hasattr(self, 'type'):
- retval += 'type: ' + repr(self.type) + ', '
+ args += ['type: ' + repr(self.type)]
if hasattr(self, 'default'):
- retval += 'default: ' + repr(self.default) + ', '
- if retval[-2:] == ', ': # always long enough to test ("Argument(" )
- retval = retval[:-2]
- retval += ')'
- return retval
+ args += ['default: ' + repr(self.default)]
+ return 'Argument({0})'.format(', '.join(args))
class OptionGroup:
@@ -927,10 +924,7 @@ def _preparse(self, args, addopts=True):
args[:] = self.getini("addopts") + args
self._checkversion()
self.pluginmanager.consider_preparse(args)
- try:
- self.pluginmanager.load_setuptools_entrypoints("pytest11")
- except ImportError as e:
- self.warn("I2", "could not load setuptools entry import: %s" % (e,))
+ self.pluginmanager.load_setuptools_entrypoints("pytest11")
self.pluginmanager.consider_env()
self.known_args_namespace = ns = self._parser.parse_known_args(args, namespace=self.option.copy())
if self.known_args_namespace.confcutdir is None and self.inifile:
diff --git a/_pytest/pdb.py b/_pytest/debugging.py
similarity index 100%
rename from _pytest/pdb.py
rename to _pytest/debugging.py
diff --git a/_pytest/doctest.py b/_pytest/doctest.py
index 4411158ab49..3702f8cbe15 100644
--- a/_pytest/doctest.py
+++ b/_pytest/doctest.py
@@ -70,8 +70,8 @@ def __init__(self, name, parent, runner=None, dtest=None):
def setup(self):
if self.dtest is not None:
self.fixture_request = _setup_fixtures(self)
- globs = dict(getfixture=self.fixture_request.getfuncargvalue)
- for name, value in self.fixture_request.getfuncargvalue('doctest_namespace').items():
+ globs = dict(getfixture=self.fixture_request.getfixturevalue)
+ for name, value in self.fixture_request.getfixturevalue('doctest_namespace').items():
globs[name] = value
self.dtest.globs.update(globs)
diff --git a/_pytest/python.py b/_pytest/python.py
index a0624839bfc..62e598abf38 100644
--- a/_pytest/python.py
+++ b/_pytest/python.py
@@ -8,6 +8,7 @@
import sys
import math
import collections
+import warnings
import py
import pytest
@@ -1855,7 +1856,7 @@ def _getnextfixturedef(self, argname):
fixturedefs = self._arg2fixturedefs.get(argname, None)
if fixturedefs is None:
# we arrive here because of a a dynamic call to
- # getfuncargvalue(argname) usage which was naturally
+ # getfixturevalue(argname) usage which was naturally
# not known at parsing/collection time
fixturedefs = self._fixturemanager.getfixturedefs(
argname, self._pyfuncitem.parent.nodeid)
@@ -1950,7 +1951,7 @@ def _fillfixtures(self):
fixturenames = getattr(item, "fixturenames", self.fixturenames)
for argname in fixturenames:
if argname not in item.funcargs:
- item.funcargs[argname] = self.getfuncargvalue(argname)
+ item.funcargs[argname] = self.getfixturevalue(argname)
def cached_setup(self, setup, teardown=None, scope="module", extrakey=None):
""" (deprecated) Return a testing resource managed by ``setup`` &
@@ -1984,17 +1985,23 @@ def finalizer():
self._addfinalizer(finalizer, scope=scope)
return val
- def getfuncargvalue(self, argname):
- """ Dynamically retrieve a named fixture function argument.
+ def getfixturevalue(self, argname):
+ """ Dynamically run a named fixture function.
- As of pytest-2.3, it is easier and usually better to access other
- fixture values by stating it as an input argument in the fixture
- function. If you only can decide about using another fixture at test
+ Declaring fixtures via function argument is recommended where possible.
+ But if you can only decide whether to use another fixture at test
setup time, you may use this function to retrieve it inside a fixture
- function body.
+ or test function body.
"""
return self._get_active_fixturedef(argname).cached_result[0]
+ def getfuncargvalue(self, argname):
+ """ Deprecated, use getfixturevalue. """
+ warnings.warn(
+ "use of getfuncargvalue is deprecated, use getfixturevalue",
+ DeprecationWarning)
+ return self.getfixturevalue(argname)
+
def _get_active_fixturedef(self, argname):
try:
return self._fixturedefs[argname]
@@ -2010,7 +2017,7 @@ class PseudoFixtureDef:
raise
# remove indent to prevent the python3 exception
# from leaking into the call
- result = self._getfuncargvalue(fixturedef)
+ result = self._getfixturevalue(fixturedef)
self._funcargs[argname] = result
self._fixturedefs[argname] = fixturedef
return fixturedef
@@ -2026,7 +2033,7 @@ def _get_fixturestack(self):
l.append(fixturedef)
current = current._parent_request
- def _getfuncargvalue(self, fixturedef):
+ def _getfixturevalue(self, fixturedef):
# prepare a subrequest object before calling fixture function
# (latter managed by fixturedef)
argname = fixturedef.argname
diff --git a/doc/en/_templates/layout.html b/doc/en/_templates/layout.html
index 0ce480be300..2fc8e2a7fb4 100644
--- a/doc/en/_templates/layout.html
+++ b/doc/en/_templates/layout.html
@@ -1,19 +1,5 @@
{% extends "!layout.html" %}
{% block header %}
-
{{super()}}
{% endblock %}
{% block footer %}
diff --git a/doc/en/_templates/links.html b/doc/en/_templates/links.html
index 200258e165f..56486a750b8 100644
--- a/doc/en/_templates/links.html
+++ b/doc/en/_templates/links.html
@@ -1,10 +1,5 @@
Useful Links
- -
-
- Sprint funding campaign
-
-
- The pytest Website
- Contribution Guide
- pytest @ PyPI
diff --git a/doc/en/announce/sprint2016.rst b/doc/en/announce/sprint2016.rst
index 86dd499c9c4..8e706589876 100644
--- a/doc/en/announce/sprint2016.rst
+++ b/doc/en/announce/sprint2016.rst
@@ -4,9 +4,9 @@ python testing sprint June 20th-26th 2016
.. image:: ../img/freiburg2.jpg
:width: 400
-The pytest core group is heading towards the biggest sprint
-in its history, to take place in the black forest town Freiburg
-in Germany. As of February 2016 we have started a `funding
+The pytest core group held the biggest sprint
+in its history in June 2016, taking place in the black forest town Freiburg
+in Germany. In February 2016 we started a `funding
campaign on Indiegogo to cover expenses
`_ The page also mentions
some preliminary topics:
@@ -35,73 +35,30 @@ some preliminary topics:
Participants
--------------
-Here are preliminary participants who said they are likely to come,
-given some expenses funding::
-
- Anatoly Bubenkoff, Netherlands
- Ana Ribeiro, Brazil
- Andreas Pelme, Personalkollen, Sweden
- Anthony Wang, Splunk, US
- Brianna Laugher, Australia
- Bruno Oliveira, Brazil
- Danielle Jenkins, Splunk, US
- Dave Hunt, UK
- Florian Bruhin, Switzerland
- Floris Bruynooghe, Cobe.io, UK
- Holger Krekel, merlinux, Germany
- Oliver Bestwalter, Avira, Germany
- Omar Kohl, Germany
- Raphael Pierzina, FanDuel, UK
- Ronny Pfannschmidt, Germany
- Tom Viner, UK
-
-
-
-Other contributors and experienced newcomers are invited to join as well
-but please send a mail to the pytest-dev mailing list if you intend to
-do so somewhat soon, also how much funding you need if so. And if you
-are working for a company and using pytest heavily you are welcome to
-join and we encourage your company to provide some funding for the
-sprint. They may see it, and rightfully so, as a very cheap and deep
-training which brings you together with the experts in the field :)
+Over 20 participants took part from 4 continents, including employees
+from Splunk, Personalkollen, Cobe.io, FanDuel and Dolby. Some newcomers
+mixed with developers who have worked on pytest since its beginning, and
+of course everyone in between.
Sprint organisation, schedule
-------------------------------
-tentative schedule:
+People arrived in Freiburg on the 19th, with sprint development taking
+place on 20th, 21st, 22nd, 24th and 25th. On the 23rd we took a break
+day for some hot hiking in the Black Forest.
-- 19/20th arrival in Freiburg
-- 20th social get together, initial hacking
-- 21/22th full sprint days
-- 23rd break day, hiking
-- 24/25th full sprint days
-- 26th departure
+Sprint activity was organised heavily around pairing, with plenty of group
+discusssions to take advantage of the high bandwidth, and lightning talks
+as well.
-We might adjust according to weather to make sure that if
-we do some hiking or excursion we'll have good weather.
-Freiburg is one of the sunniest places in Germany so
-it shouldn't be too much of a constraint.
-
-
-Accomodation
-----------------
-
-We'll see to arrange for renting a flat with multiple
-beds/rooms. Hotels are usually below 100 per night.
-The earlier we book the better.
Money / funding
---------------
-The Indiegogo campaign asks for 11000 USD which should cover
-the costs for flights and accomodation, renting a sprint place
-and maybe a bit of food as well.
-If your organisation wants to support the sprint but prefers
-to give money according to an invoice, get in contact with
-holger at http://merlinux.eu who can invoice your organisation
-properly.
+The Indiegogo campaign aimed for 11000 USD and in the end raised over
+12000, to reimburse travel costs, pay for a sprint venue and catering.
-If we have excess money we'll use for further sprint/travel
-funding for pytest/tox contributors.
+Excess money is reserved for further sprint/travel funding for pytest/tox
+contributors.
diff --git a/doc/en/genapi.py b/doc/en/genapi.py
index f8cdda6cfbf..89ddc873169 100644
--- a/doc/en/genapi.py
+++ b/doc/en/genapi.py
@@ -32,7 +32,7 @@ def docmethod(self, method):
def pytest_funcarg__a(request):
with Writer("request") as writer:
- writer.docmethod(request.getfuncargvalue)
+ writer.docmethod(request.getfixturevalue)
writer.docmethod(request.cached_setup)
writer.docmethod(request.addfinalizer)
writer.docmethod(request.applymarker)
diff --git a/testing/code/test_excinfo.py b/testing/code/test_excinfo.py
index 59756645a9e..19efe2d6c59 100644
--- a/testing/code/test_excinfo.py
+++ b/testing/code/test_excinfo.py
@@ -384,7 +384,7 @@ class TestFormattedExcinfo:
def pytest_funcarg__importasmod(self, request):
def importasmod(source):
source = _pytest._code.Source(source)
- tmpdir = request.getfuncargvalue("tmpdir")
+ tmpdir = request.getfixturevalue("tmpdir")
modpath = tmpdir.join("mod.py")
tmpdir.ensure("__init__.py")
modpath.write(source)
@@ -1077,4 +1077,4 @@ def test(tmpdir):
""")
result = testdir.runpytest()
result.stdout.fnmatch_lines(['* 1 failed in *'])
- assert 'INTERNALERROR' not in result.stdout.str() + result.stderr.str()
\ No newline at end of file
+ assert 'INTERNALERROR' not in result.stdout.str() + result.stderr.str()
diff --git a/testing/cx_freeze/runtests_setup.py b/testing/cx_freeze/runtests_setup.py
index ee11d885486..2e208984326 100644
--- a/testing/cx_freeze/runtests_setup.py
+++ b/testing/cx_freeze/runtests_setup.py
@@ -6,9 +6,9 @@
import pytest
setup(
- name="runtests",
- version="0.1",
- description="exemple of how embedding pytest into an executable using cx_freeze",
+ name="runtests",
+ version="0.1",
+ description="example of how embedding pytest into an executable using cx_freeze",
executables=[Executable("runtests_script.py")],
options={"build_exe": {'includes': pytest.freeze_includes()}},
)
diff --git a/testing/python/fixture.py b/testing/python/fixture.py
index 83ec29cb502..4c8963926b4 100644
--- a/testing/python/fixture.py
+++ b/testing/python/fixture.py
@@ -93,12 +93,12 @@ def test_conftest_funcargs_only_available_in_subdir(self, testdir):
sub1.join("conftest.py").write(_pytest._code.Source("""
import pytest
def pytest_funcarg__arg1(request):
- pytest.raises(Exception, "request.getfuncargvalue('arg2')")
+ pytest.raises(Exception, "request.getfixturevalue('arg2')")
"""))
sub2.join("conftest.py").write(_pytest._code.Source("""
import pytest
def pytest_funcarg__arg2(request):
- pytest.raises(Exception, "request.getfuncargvalue('arg1')")
+ pytest.raises(Exception, "request.getfixturevalue('arg1')")
"""))
sub1.join("test_in_sub1.py").write("def test_1(arg1): pass")
@@ -435,21 +435,23 @@ def test_method(self, something):
assert len(arg2fixturedefs) == 1
assert arg2fixturedefs[0].__name__ == "pytest_funcarg__something"
- def test_getfuncargvalue_recursive(self, testdir):
+ def test_getfixturevalue_recursive(self, testdir):
testdir.makeconftest("""
def pytest_funcarg__something(request):
return 1
""")
testdir.makepyfile("""
def pytest_funcarg__something(request):
- return request.getfuncargvalue("something") + 1
+ return request.getfixturevalue("something") + 1
def test_func(something):
assert something == 2
""")
reprec = testdir.inline_run()
reprec.assertoutcome(passed=1)
- def test_getfuncargvalue(self, testdir):
+ @pytest.mark.parametrize(
+ 'getfixmethod', ('getfixturevalue', 'getfuncargvalue'))
+ def test_getfixturevalue(self, testdir, getfixmethod):
item = testdir.getitem("""
l = [2]
def pytest_funcarg__something(request): return 1
@@ -458,14 +460,15 @@ def pytest_funcarg__other(request):
def test_func(something): pass
""")
req = item._request
- pytest.raises(FixtureLookupError, req.getfuncargvalue, "notexists")
- val = req.getfuncargvalue("something")
+ fixture_fetcher = getattr(req, getfixmethod)
+ pytest.raises(FixtureLookupError, fixture_fetcher, "notexists")
+ val = fixture_fetcher("something")
assert val == 1
- val = req.getfuncargvalue("something")
+ val = fixture_fetcher("something")
assert val == 1
- val2 = req.getfuncargvalue("other")
+ val2 = fixture_fetcher("other")
assert val2 == 2
- val2 = req.getfuncargvalue("other") # see about caching
+ val2 = fixture_fetcher("other") # see about caching
assert val2 == 2
pytest._fillfuncargs(item)
assert item.funcargs["something"] == 1
@@ -812,10 +815,10 @@ def test_two_different_setups(arg1, arg2):
"*1 passed*"
])
- def test_request_cached_setup_getfuncargvalue(self, testdir):
+ def test_request_cached_setup_getfixturevalue(self, testdir):
testdir.makepyfile("""
def pytest_funcarg__arg1(request):
- arg1 = request.getfuncargvalue("arg2")
+ arg1 = request.getfixturevalue("arg2")
return request.cached_setup(lambda: arg1 + 1)
def pytest_funcarg__arg2(request):
return request.cached_setup(lambda: 10)
@@ -1118,7 +1121,7 @@ def test_2(arg2):
class TestFixtureManagerParseFactories:
def pytest_funcarg__testdir(self, request):
- testdir = request.getfuncargvalue("testdir")
+ testdir = request.getfixturevalue("testdir")
testdir.makeconftest("""
def pytest_funcarg__hello(request):
return "conftest"
@@ -1804,9 +1807,9 @@ def test_4(arg, created, finalized):
reprec.assertoutcome(passed=4)
@pytest.mark.parametrize("method", [
- 'request.getfuncargvalue("arg")',
+ 'request.getfixturevalue("arg")',
'request.cached_setup(lambda: None, scope="function")',
- ], ids=["getfuncargvalue", "cached_setup"])
+ ], ids=["getfixturevalue", "cached_setup"])
def test_scope_mismatch_various(self, testdir, method):
testdir.makeconftest("""
import pytest
@@ -2718,6 +2721,8 @@ def test_1(meow):
""".format(flavor=flavor))
result = testdir.runpytest("-s")
result.stdout.fnmatch_lines("*mew*")
+
+
class TestParameterizedSubRequest:
def test_call_from_fixture(self, testdir):
testfile = testdir.makepyfile("""
@@ -2729,7 +2734,7 @@ def fix_with_param(request):
@pytest.fixture
def get_named_fixture(request):
- return request.getfuncargvalue('fix_with_param')
+ return request.getfixturevalue('fix_with_param')
def test_foo(request, get_named_fixture):
pass
@@ -2754,7 +2759,7 @@ def fix_with_param(request):
return request.param
def test_foo(request):
- request.getfuncargvalue('fix_with_param')
+ request.getfixturevalue('fix_with_param')
""")
result = testdir.runpytest()
result.stdout.fnmatch_lines("""
@@ -2778,7 +2783,7 @@ def fix_with_param(request):
testfile = testdir.makepyfile("""
def test_foo(request):
- request.getfuncargvalue('fix_with_param')
+ request.getfixturevalue('fix_with_param')
""")
result = testdir.runpytest()
result.stdout.fnmatch_lines("""
@@ -2808,7 +2813,7 @@ def fix_with_param(request):
from fix import fix_with_param
def test_foo(request):
- request.getfuncargvalue('fix_with_param')
+ request.getfixturevalue('fix_with_param')
"""))
tests_dir.chdir()
@@ -2823,3 +2828,7 @@ def test_foo(request):
E*{1}:5
*1 failed*
""".format(fixfile.strpath, testfile.basename))
+
+
+def test_getfuncargvalue_is_deprecated(request):
+ pytest.deprecated_call(request.getfuncargvalue, 'tmpdir')
diff --git a/testing/python/metafunc.py b/testing/python/metafunc.py
index 0c07dca36f6..046e1371f8c 100644
--- a/testing/python/metafunc.py
+++ b/testing/python/metafunc.py
@@ -749,14 +749,14 @@ def test_hello(arg1, arg2):
"*4 failed*",
])
- def test_parametrize_and_inner_getfuncargvalue(self, testdir):
+ def test_parametrize_and_inner_getfixturevalue(self, testdir):
p = testdir.makepyfile("""
def pytest_generate_tests(metafunc):
metafunc.parametrize("arg1", [1], indirect=True)
metafunc.parametrize("arg2", [10], indirect=True)
def pytest_funcarg__arg1(request):
- x = request.getfuncargvalue("arg2")
+ x = request.getfixturevalue("arg2")
return x + request.param
def pytest_funcarg__arg2(request):
diff --git a/testing/test_assertrewrite.py b/testing/test_assertrewrite.py
index 8d16bfc66d1..4209613a620 100644
--- a/testing/test_assertrewrite.py
+++ b/testing/test_assertrewrite.py
@@ -213,10 +213,12 @@ def x():
return False
def f():
assert x() and x()
- assert getmsg(f, {"x" : x}) == "assert (x())"
+ assert getmsg(f, {"x" : x}) == """assert (False)
+ + where False = x()"""
def f():
assert False or x()
- assert getmsg(f, {"x" : x}) == "assert (False or x())"
+ assert getmsg(f, {"x" : x}) == """assert (False or False)
+ + where False = x()"""
def f():
assert 1 in {} and 2 in {}
assert getmsg(f) == "assert (1 in {})"
@@ -299,27 +301,34 @@ def g(a=42, *args, **kwargs):
ns = {"g" : g}
def f():
assert g()
- assert getmsg(f, ns) == """assert g()"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g()"""
def f():
assert g(1)
- assert getmsg(f, ns) == """assert g(1)"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(1)"""
def f():
assert g(1, 2)
- assert getmsg(f, ns) == """assert g(1, 2)"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(1, 2)"""
def f():
assert g(1, g=42)
- assert getmsg(f, ns) == """assert g(1, g=42)"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(1, g=42)"""
def f():
assert g(1, 3, g=23)
- assert getmsg(f, ns) == """assert g(1, 3, g=23)"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(1, 3, g=23)"""
def f():
seq = [1, 2, 3]
assert g(*seq)
- assert getmsg(f, ns) == """assert g(*[1, 2, 3])"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(*[1, 2, 3])"""
def f():
x = "a"
assert g(**{x : 2})
- assert getmsg(f, ns) == """assert g(**{'a': 2})"""
+ assert getmsg(f, ns) == """assert False
+ + where False = g(**{'a': 2})"""
def test_attribute(self):
class X(object):
@@ -332,7 +341,8 @@ def f():
def f():
x.a = False # noqa
assert x.a # noqa
- assert getmsg(f, ns) == """assert x.a"""
+ assert getmsg(f, ns) == """assert False
+ + where False = x.a"""
def test_comparisons(self):
def f():
@@ -744,7 +754,3 @@ def test_long_repr():
""")
result = testdir.runpytest()
assert 'unbalanced braces' not in result.stdout.str()
-
-
-def test_collapse_false_unbalanced_braces():
- util._collapse_false('some text{ False\n{False = some more text\n}')
diff --git a/testing/test_config.py b/testing/test_config.py
index db007c2d174..84b14db4ecc 100644
--- a/testing/test_config.py
+++ b/testing/test_config.py
@@ -391,6 +391,23 @@ class PseudoPlugin:
plugin = config.pluginmanager.getplugin("mytestplugin")
assert plugin.x == 42
+
+def test_setuptools_importerror_issue1479(testdir, monkeypatch):
+ pkg_resources = pytest.importorskip("pkg_resources")
+ def my_iter(name):
+ assert name == "pytest11"
+ class EntryPoint:
+ name = "mytestplugin"
+ dist = None
+ def load(self):
+ raise ImportError("Don't hide me!")
+ return iter([EntryPoint()])
+
+ monkeypatch.setattr(pkg_resources, 'iter_entry_points', my_iter)
+ with pytest.raises(ImportError):
+ testdir.parseconfig()
+
+
def test_plugin_preparse_prevents_setuptools_loading(testdir, monkeypatch):
pkg_resources = pytest.importorskip("pkg_resources")
def my_iter(name):
@@ -671,4 +688,4 @@ def test_multiple_options(pytestconfig):
"ini2:url=/tmp/user2?a=b&d=e",
"ini3:True",
"ini4:False"
- ])
\ No newline at end of file
+ ])
diff --git a/testing/test_genscript.py b/testing/test_genscript.py
index 1260a5a6b26..1d51c6e8d78 100644
--- a/testing/test_genscript.py
+++ b/testing/test_genscript.py
@@ -8,7 +8,7 @@ def standalone(request):
class Standalone:
def __init__(self, request):
- self.testdir = request.getfuncargvalue("testdir")
+ self.testdir = request.getfixturevalue("testdir")
script = "mypytest"
result = self.testdir.runpytest("--genscript=%s" % script)
assert result.ret == 0
diff --git a/testing/test_parseopt.py b/testing/test_parseopt.py
index afec1114cd8..cc9aa23cd6d 100644
--- a/testing/test_parseopt.py
+++ b/testing/test_parseopt.py
@@ -29,6 +29,9 @@ def test_argument(self):
assert argument.dest == 'test'
argument = parseopt.Argument('-t', '--test', dest='abc')
assert argument.dest == 'abc'
+ assert str(argument) == (
+ "Argument(_short_opts: ['-t'], _long_opts: ['--test'], dest: 'abc')"
+ )
def test_argument_type(self):
argument = parseopt.Argument('-t', dest='abc', type='int')
diff --git a/testing/test_pdb.py b/testing/test_pdb.py
index eeddcf0ae80..44163a2040f 100644
--- a/testing/test_pdb.py
+++ b/testing/test_pdb.py
@@ -13,11 +13,11 @@ def runpdb_and_get_report(testdir, source):
class TestPDB:
def pytest_funcarg__pdblist(self, request):
- monkeypatch = request.getfuncargvalue("monkeypatch")
+ monkeypatch = request.getfixturevalue("monkeypatch")
pdblist = []
def mypdb(*args):
pdblist.append(args)
- plugin = request.config.pluginmanager.getplugin('pdb')
+ plugin = request.config.pluginmanager.getplugin('debugging')
monkeypatch.setattr(plugin, 'post_mortem', mypdb)
return pdblist