fix issue557: with "-k" we only allow the old style "-" for negation

at the beginning of strings and even that is deprecated.  Use "not" instead.
This should allow to pick parametrized tests where "-" appeared in the parameter.

--HG--
branch : issue557
This commit is contained in:
holger krekel 2014-10-06 12:11:48 +02:00
parent dfda9acd6d
commit 39158957f4
3 changed files with 13 additions and 4 deletions

View File

@ -9,6 +9,10 @@ Unreleased
- updated plugin index docs. Thanks Bruno Oliveira. - updated plugin index docs. Thanks Bruno Oliveira.
- fix issue557: with "-k" we only allow the old style "-" for negation
at the beginning of strings and even that is deprecated. Use "not" instead.
This should allow to pick parametrized tests where "-" appeared in the parameter.
2.6.3 2.6.3
----------- -----------

View File

@ -56,6 +56,11 @@ def pytest_collection_modifyitems(items, config):
matchexpr = config.option.markexpr matchexpr = config.option.markexpr
if not keywordexpr and not matchexpr: if not keywordexpr and not matchexpr:
return return
# pytest used to allow "-" for negating
# but today we just allow "-" at the beginning, use "not" instead
# we probably remove "-" alltogether soon
if keywordexpr.startswith("-"):
keywordexpr = "not " + keywordexpr[1:]
selectuntil = False selectuntil = False
if keywordexpr[-1:] == ":": if keywordexpr[-1:] == ":":
selectuntil = True selectuntil = True
@ -122,7 +127,6 @@ def matchkeyword(colitem, keywordexpr):
Additionally, matches on names in the 'extra_keyword_matches' set of Additionally, matches on names in the 'extra_keyword_matches' set of
any item, as well as names directly assigned to test functions. any item, as well as names directly assigned to test functions.
""" """
keywordexpr = keywordexpr.replace("-", "not ")
mapped_names = set() mapped_names = set()
# Add the names of the current item and any parent items # Add the names of the current item and any parent items

View File

@ -234,12 +234,13 @@ def test_keyword_option_custom(spec, testdir):
@pytest.mark.parametrize("spec", [ @pytest.mark.parametrize("spec", [
("None", ("test_func[None]",)), ("None", ("test_func[None]",)),
("1.3", ("test_func[1.3]",)) ("1.3", ("test_func[1.3]",)),
("2-3", ("test_func[2-3]",))
]) ])
def test_keyword_option_parametrize(spec, testdir): def test_keyword_option_parametrize(spec, testdir):
testdir.makepyfile(""" testdir.makepyfile("""
import pytest import pytest
@pytest.mark.parametrize("arg", [None, 1.3]) @pytest.mark.parametrize("arg", [None, 1.3, "2-3"])
def test_func(arg): def test_func(arg):
pass pass
""") """)
@ -497,7 +498,7 @@ class TestKeywordSelection:
check('TestClass and test', 'test_method_one') check('TestClass and test', 'test_method_one')
@pytest.mark.parametrize("keyword", [ @pytest.mark.parametrize("keyword", [
'xxx', 'xxx and test_2', 'TestClass', 'xxx and -test_1', 'xxx', 'xxx and test_2', 'TestClass', 'xxx and not test_1',
'TestClass and test_2', 'xxx and TestClass and test_2']) 'TestClass and test_2', 'xxx and TestClass and test_2'])
def test_select_extra_keywords(self, testdir, keyword): def test_select_extra_keywords(self, testdir, keyword):
p = testdir.makepyfile(test_select=""" p = testdir.makepyfile(test_select="""