Merge branch 'tomviner-issue-1496-xfail-cond-kw'

fixes  #1496
This commit is contained in:
Ronny Pfannschmidt 2016-05-31 11:25:15 +02:00
commit 357a7c79ef
3 changed files with 23 additions and 1 deletions

View File

@ -6,6 +6,10 @@
* fix `#510`_: skip tests where one parameterize dimension was empty * fix `#510`_: skip tests where one parameterize dimension was empty
thanks Alex Stapleton for the Report and `@RonnyPfannschmidt`_ for the PR thanks Alex Stapleton for the Report and `@RonnyPfannschmidt`_ for the PR
* Fix Xfail does not work with condition keyword argument.
Thanks `@astraw38`_ for reporting the issue (`#1496`_) and `@tomviner`_
for PR the (`#1524`_).
* Fix win32 path issue when puttinging custom config file with absolute path * Fix win32 path issue when puttinging custom config file with absolute path
in ``pytest.main("-c your_absolute_path")``. in ``pytest.main("-c your_absolute_path")``.
@ -22,8 +26,11 @@
.. _#510: https://github.com/pytest-dev/pytest/issues/510 .. _#510: https://github.com/pytest-dev/pytest/issues/510
.. _#1506: https://github.com/pytest-dev/pytest/pull/1506 .. _#1506: https://github.com/pytest-dev/pytest/pull/1506
.. _#1496: https://github.com/pytest-dev/pytest/issue/1496
.. _#1524: https://github.com/pytest-dev/pytest/issue/1524
.. _@prusse-martin: https://github.com/prusse-martin .. _@prusse-martin: https://github.com/prusse-martin
.. _@astraw38: https://github.com/astraw38
2.9.1 2.9.1

View File

@ -120,7 +120,7 @@ class MarkEvaluator:
return self.result return self.result
if self.holder: if self.holder:
d = self._getglobals() d = self._getglobals()
if self.holder.args: if self.holder.args or 'condition' in self.holder.kwargs:
self.result = False self.result = False
# "holder" might be a MarkInfo or a MarkDecorator; only # "holder" might be a MarkInfo or a MarkDecorator; only
# MarkInfo keeps track of all parameters it received in an # MarkInfo keeps track of all parameters it received in an
@ -130,6 +130,8 @@ class MarkEvaluator:
else: else:
arglist = [(self.holder.args, self.holder.kwargs)] arglist = [(self.holder.args, self.holder.kwargs)]
for args, kwargs in arglist: for args, kwargs in arglist:
if 'condition' in kwargs:
args = (kwargs['condition'],)
for expr in args: for expr in args:
self.expr = expr self.expr = expr
if isinstance(expr, py.builtin._basestring): if isinstance(expr, py.builtin._basestring):

View File

@ -405,6 +405,19 @@ class TestXFail:
result.stdout.fnmatch_lines('*1 passed*') result.stdout.fnmatch_lines('*1 passed*')
assert result.ret == 0 assert result.ret == 0
@pytest.mark.parametrize('strict', [True, False])
def test_xfail_condition_keyword(self, testdir, strict):
p = testdir.makepyfile("""
import pytest
@pytest.mark.xfail(condition=False, reason='unsupported feature', strict=%s)
def test_foo():
pass
""" % strict)
result = testdir.runpytest(p, '-rxX')
result.stdout.fnmatch_lines('*1 passed*')
assert result.ret == 0
@pytest.mark.parametrize('strict_val', ['true', 'false']) @pytest.mark.parametrize('strict_val', ['true', 'false'])
def test_strict_xfail_default_from_file(self, testdir, strict_val): def test_strict_xfail_default_from_file(self, testdir, strict_val):
testdir.makeini(''' testdir.makeini('''