diff --git a/src/_pytest/mark/structures.py b/src/_pytest/mark/structures.py index 2cab96d675a..18ebc506abb 100644 --- a/src/_pytest/mark/structures.py +++ b/src/_pytest/mark/structures.py @@ -2,7 +2,6 @@ import warnings from collections import namedtuple from collections.abc import MutableMapping -from operator import attrgetter from typing import Set import attr @@ -17,16 +16,6 @@ EMPTY_PARAMETERSET_OPTION = "empty_parameter_set_mark" -def alias(name, warning=None): - getter = attrgetter(name) - - def warned(self): - warnings.warn(warning, stacklevel=2) - return getter(self) - - return property(getter if warning is None else warned, doc="alias for " + name) - - def istestfunc(func): return ( hasattr(func, "__call__") @@ -205,17 +194,25 @@ def test_function(): mark = attr.ib(validator=attr.validators.instance_of(Mark)) - name = alias("mark.name") - args = alias("mark.args") - kwargs = alias("mark.kwargs") + @property + def name(self): + """alias for mark.name""" + return self.mark.name + + @property + def args(self): + """alias for mark.args""" + return self.mark.args + + @property + def kwargs(self): + """alias for mark.kwargs""" + return self.mark.kwargs @property def markname(self): return self.name # for backward-compat (2.4.1 had this attr) - def __eq__(self, other): - return self.mark == other.mark if isinstance(other, MarkDecorator) else False - def __repr__(self): return "".format(self.mark) diff --git a/testing/test_mark.py b/testing/test_mark.py index 2c12c0451c0..071775aefba 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -831,6 +831,12 @@ class TestMarkDecorator: def test__eq__(self, lhs, rhs, expected): assert (lhs == rhs) == expected + def test_aliases(self) -> None: + md = pytest.mark.foo(1, "2", three=3) + assert md.name == "foo" + assert md.args == (1, "2") + assert md.kwargs == {"three": 3} + @pytest.mark.parametrize("mark", [None, "", "skip", "xfail"]) def test_parameterset_for_parametrize_marks(testdir, mark):