diff --git a/_pytest/mark/evaluate.py b/_pytest/mark/evaluate.py index f84d7455d..295373e17 100644 --- a/_pytest/mark/evaluate.py +++ b/_pytest/mark/evaluate.py @@ -1,6 +1,7 @@ import os import six import sys +import platform import traceback from . import MarkDecorator, MarkInfo @@ -67,7 +68,7 @@ class MarkEvaluator(object): pytrace=False) def _getglobals(self): - d = {'os': os, 'sys': sys, 'config': self.item.config} + d = {'os': os, 'sys': sys, 'platform': platform, 'config': self.item.config} if hasattr(self.item, 'obj'): d.update(self.item.obj.__globals__) return d diff --git a/changelog/3236.trivial.rst b/changelog/3236.trivial.rst new file mode 100644 index 000000000..0fd9c9b58 --- /dev/null +++ b/changelog/3236.trivial.rst @@ -0,0 +1 @@ +The builtin module ``platform`` is now available for use in expressions in ``pytest.mark``. diff --git a/testing/test_skipping.py b/testing/test_skipping.py index db4e6d3f7..fc9230eda 100644 --- a/testing/test_skipping.py +++ b/testing/test_skipping.py @@ -156,6 +156,21 @@ class TestXFail(object): assert callreport.passed assert callreport.wasxfail == "this is an xfail" + def test_xfail_using_platform(self, testdir): + """ + Verify that platform can be used with xfail statements. + """ + item = testdir.getitem(""" + import pytest + @pytest.mark.xfail("platform.platform() == platform.platform()") + def test_func(): + assert 0 + """) + reports = runtestprotocol(item, log=False) + assert len(reports) == 3 + callreport = reports[1] + assert callreport.wasxfail + def test_xfail_xpassed_strict(self, testdir): item = testdir.getitem(""" import pytest @@ -612,6 +627,16 @@ class TestSkipif(object): ]) assert result.ret == 0 + def test_skipif_using_platform(self, testdir): + item = testdir.getitem(""" + import pytest + @pytest.mark.skipif("platform.platform() == platform.platform()") + def test_func(): + pass + """) + pytest.raises(pytest.skip.Exception, lambda: + pytest_runtest_setup(item)) + @pytest.mark.parametrize('marker, msg1, msg2', [ ('skipif', 'SKIP', 'skipped'), ('xfail', 'XPASS', 'xpassed'),