From 19b12b22e7e5c23bb9a9a0e74ca36d441481973f Mon Sep 17 00:00:00 2001 From: Ronny Pfannschmidt Date: Thu, 22 Jun 2017 10:48:45 +0200 Subject: [PATCH] store pristine marks on function.pytestmark fixes #2516 --- _pytest/mark.py | 1 + testing/test_mark.py | 24 +++++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/_pytest/mark.py b/_pytest/mark.py index 4a3694049..08a0bd164 100644 --- a/_pytest/mark.py +++ b/_pytest/mark.py @@ -333,6 +333,7 @@ class MarkDecorator: apply_mark(func, self.mark) else: apply_legacy_mark(func, self.mark) + apply_mark(func, self.mark) return func mark = Mark(self.name, args, kwargs) diff --git a/testing/test_mark.py b/testing/test_mark.py index 0792b04fd..dff04f407 100644 --- a/testing/test_mark.py +++ b/testing/test_mark.py @@ -3,7 +3,7 @@ import os import sys import pytest -from _pytest.mark import MarkGenerator as Mark, ParameterSet +from _pytest.mark import MarkGenerator as Mark, ParameterSet, transfer_markers class TestMark(object): def test_markinfo_repr(self): @@ -772,3 +772,25 @@ class TestKeywordSelection(object): def test_parameterset_extractfrom(argval, expected): extracted = ParameterSet.extract_from(argval) assert extracted == expected + + +def test_legacy_transfer(): + + class FakeModule(object): + pytestmark = [] + + class FakeClass(object): + pytestmark = pytest.mark.nofun + + @pytest.mark.fun + def fake_method(self): + pass + + + transfer_markers(fake_method, FakeClass, FakeModule) + + # legacy marks transfer smeared + assert fake_method.nofun + assert fake_method.fun + # pristine marks dont transfer + assert fake_method.pytestmark == [pytest.mark.fun.mark] \ No newline at end of file