From 39158957f4b31da51c42dd131bb95f712a5eaeec Mon Sep 17 00:00:00 2001 From: holger krekel Date: Mon, 6 Oct 2014 12:11:48 +0200 Subject: [PATCH] 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 --- CHANGELOG | 4 ++++ _pytest/mark.py | 6 +++++- testing/test_mark.py | 7 ++++--- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index ea677994e..b3e4010ee 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -9,6 +9,10 @@ Unreleased - 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 ----------- diff --git a/_pytest/mark.py b/_pytest/mark.py index 6b66b1876..b9dbe6a7c 100644 --- a/_pytest/mark.py +++ b/_pytest/mark.py @@ -56,6 +56,11 @@ def pytest_collection_modifyitems(items, config): matchexpr = config.option.markexpr if not keywordexpr and not matchexpr: 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 if keywordexpr[-1:] == ":": selectuntil = True @@ -122,7 +127,6 @@ def matchkeyword(colitem, keywordexpr): Additionally, matches on names in the 'extra_keyword_matches' set of any item, as well as names directly assigned to test functions. """ - keywordexpr = keywordexpr.replace("-", "not ") mapped_names = set() # Add the names of the current item and any parent items diff --git a/testing/test_mark.py b/testing/test_mark.py index 75e28541c..af0b748b6 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -234,12 +234,13 @@ def test_keyword_option_custom(spec, testdir): @pytest.mark.parametrize("spec", [ ("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): testdir.makepyfile(""" import pytest - @pytest.mark.parametrize("arg", [None, 1.3]) + @pytest.mark.parametrize("arg", [None, 1.3, "2-3"]) def test_func(arg): pass """) @@ -497,7 +498,7 @@ class TestKeywordSelection: check('TestClass and test', 'test_method_one') @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']) def test_select_extra_keywords(self, testdir, keyword): p = testdir.makepyfile(test_select="""