Skip to content
Permalink
Browse files

fix addmarker - extract mark from markdecorator

  • Loading branch information...
RonnyPfannschmidt committed Jun 12, 2018
1 parent 1b5322d commit 37793d4cdbf71f597a3c69c827e0c010528d53a5
Showing with 23 additions and 4 deletions.
  1. +1 −0 changelog/3555.bugfix.rst
  2. +8 −1 src/_pytest/mark/structures.py
  3. +4 −2 src/_pytest/nodes.py
  4. +10 −1 testing/test_mark.py
@@ -0,0 +1 @@
Fix regression in Node.add_marker by extracting the mark object of a markdecorator.
@@ -281,7 +281,14 @@ def _marked(func, mark):
class MarkInfo(object):
""" Marking object created by :class:`MarkDecorator` instances. """

_marks = attr.ib()
_marks = attr.ib(convert=list)

@_marks.validator
def validate_marks(self, attribute, value):
for item in value:
if not isinstance(item, Mark):
raise ValueError(item)

combined = attr.ib(
repr=False,
default=attr.Factory(
@@ -173,10 +173,12 @@ def listchain(self):
chain.reverse()
return chain

def add_marker(self, marker):
def add_marker(self, marker, append=True):
""" dynamically add a marker object to the node.
``marker`` can be a string or pytest.mark.* instance.
``append=True`` whether to append the marker,
if false insert at position 0
"""
from _pytest.mark import MarkDecorator, MARK_GEN

@@ -185,7 +187,7 @@ def add_marker(self, marker):
elif not isinstance(marker, MarkDecorator):
raise ValueError("is not a string or pytest.mark.* Marker")
self.keywords[marker.name] = marker
self.own_markers.append(marker)
self.own_markers.append(marker.mark)

def iter_markers(self, name=None):
"""
@@ -1,14 +1,15 @@
from __future__ import absolute_import, division, print_function
import os
import sys

import mock
import pytest
from _pytest.mark import (
MarkGenerator as Mark,
ParameterSet,
transfer_markers,
EMPTY_PARAMETERSET_OPTION,
)
from _pytest.nodes import Node

ignore_markinfo = pytest.mark.filterwarnings(
"ignore:MarkInfo objects:_pytest.deprecated.RemovedInPytest4Warning"
@@ -1123,3 +1124,11 @@ class TestBarClass(BaseTests):
passed_k, skipped_k, failed_k = reprec_keywords.countoutcomes()
assert passed_k == 2
assert skipped_k == failed_k == 0


def test_addmarker_getmarker():
node = Node("Test", config=mock.Mock(), session=mock.Mock(), nodeid="Test")
node.add_marker(pytest.mark.a(1))
node.add_marker("b")
node.get_marker("a").combined
node.get_marker("b").combined

0 comments on commit 37793d4

Please sign in to comment.
You can’t perform that action at this time.