Skip to content

Commit

Permalink
Merge pull request #7210 from bluetech/minus-k-deprecations
Browse files Browse the repository at this point in the history
mark: deprecate a couple undocumented -k syntaxes
  • Loading branch information
bluetech committed May 11, 2020
2 parents 0ba6e1f + c4f9eaa commit 15d5e8c
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 0 deletions.
5 changes: 5 additions & 0 deletions changelog/7210.deprecation.rst
@@ -0,0 +1,5 @@
The special ``-k '-expr'`` syntax to ``-k`` is deprecated. Use ``-k 'not expr'``
instead.

The special ``-k 'expr:'`` syntax to ``-k`` is deprecated. Please open an issue
if you use this and want a replacement.
10 changes: 10 additions & 0 deletions src/_pytest/deprecated.py
Expand Up @@ -75,3 +75,13 @@
"The TerminalReporter.writer attribute is deprecated, use TerminalReporter._tw instead at your own risk.\n"
"See https://docs.pytest.org/en/latest/deprecations.html#terminalreporter-writer for more information."
)


MINUS_K_DASH = PytestDeprecationWarning(
"The `-k '-expr'` syntax to -k is deprecated.\nUse `-k 'not expr'` instead."
)

MINUS_K_COLON = PytestDeprecationWarning(
"The `-k 'expr:'` syntax to -k is deprecated.\n"
"Please open an issue if you use this and want a replacement."
)
7 changes: 7 additions & 0 deletions src/_pytest/mark/__init__.py
@@ -1,4 +1,5 @@
""" generic mechanism for marking and selecting python functions. """
import warnings
from typing import Optional

from .legacy import matchkeyword
Expand All @@ -13,6 +14,8 @@
from _pytest.config import Config
from _pytest.config import hookimpl
from _pytest.config import UsageError
from _pytest.deprecated import MINUS_K_COLON
from _pytest.deprecated import MINUS_K_DASH
from _pytest.store import StoreKey

__all__ = ["Mark", "MarkDecorator", "MarkGenerator", "get_empty_parameterset_mark"]
Expand Down Expand Up @@ -107,9 +110,13 @@ def deselect_by_keyword(items, config):
return

if keywordexpr.startswith("-"):
# To be removed in pytest 7.0.0.
warnings.warn(MINUS_K_DASH, stacklevel=2)
keywordexpr = "not " + keywordexpr[1:]
selectuntil = False
if keywordexpr[-1:] == ":":
# To be removed in pytest 7.0.0.
warnings.warn(MINUS_K_COLON, stacklevel=2)
selectuntil = True
keywordexpr = keywordexpr[:-1]

Expand Down
24 changes: 24 additions & 0 deletions testing/deprecated_test.py
Expand Up @@ -164,3 +164,27 @@ def test__fillfuncargs_is_deprecated() -> None:
match="The `_fillfuncargs` function is deprecated",
):
pytest._fillfuncargs(mock.Mock())


def test_minus_k_dash_is_deprecated(testdir) -> None:
threepass = testdir.makepyfile(
test_threepass="""
def test_one(): assert 1
def test_two(): assert 1
def test_three(): assert 1
"""
)
result = testdir.runpytest("-k=-test_two", threepass)
result.stdout.fnmatch_lines(["*The `-k '-expr'` syntax*deprecated*"])


def test_minus_k_colon_is_deprecated(testdir) -> None:
threepass = testdir.makepyfile(
test_threepass="""
def test_one(): assert 1
def test_two(): assert 1
def test_three(): assert 1
"""
)
result = testdir.runpytest("-k", "test_two:", threepass)
result.stdout.fnmatch_lines(["*The `-k 'expr:'` syntax*deprecated*"])

0 comments on commit 15d5e8c

Please sign in to comment.