Skip to content

Commit

Permalink
fix addmarker - extract mark from markdecorator
Browse files Browse the repository at this point in the history
  • Loading branch information
RonnyPfannschmidt committed Jun 12, 2018
1 parent 1b5322d commit 282b5b8
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 4 deletions.
9 changes: 8 additions & 1 deletion src/_pytest/mark/structures.py
Original file line number Diff line number Diff line change
Expand Up @@ -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(
Expand Down
6 changes: 4 additions & 2 deletions src/_pytest/nodes.py
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand All @@ -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):
"""
Expand Down
11 changes: 10 additions & 1 deletion testing/test_mark.py
Original file line number Diff line number Diff line change
@@ -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"
Expand Down Expand Up @@ -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 282b5b8

Please sign in to comment.