diff test/pytest_patcher.py @ 5109:43a1f7fe39f5

Improved work-around for pytest markers bug The previous fix was only a partial solution. Any test class sharing a parent with, and appearing after, a skipped test class was being skipped (not just other test classes using the skip/skipif marker). Now only tests that should be skipped will be skipped, the rest should run as normal.
author John Kristensen <john@jerrykan.com>
date Tue, 28 Jun 2016 15:39:38 +1000
parents
children 1c94afabb2cb
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/test/pytest_patcher.py	Tue Jun 28 15:39:38 2016 +1000
@@ -0,0 +1,32 @@
+"""
+The following code was taken from:
+
+    https://github.com/pytest-dev/pytest/issues/568#issuecomment-216569420
+
+to resolve a bug with using pytest.mark.skip(). Once the bug is resolved in
+pytest this file can be removed along with all the wrapper mark_class()
+references in the other test files.
+"""
+import types
+
+
+def mark_class(marker):
+    '''Workaround for https://github.com/pytest-dev/pytest/issues/568'''
+    def copy_func(f):
+        try:
+            return types.FunctionType(f.__code__, f.__globals__,
+                                      name=f.__name__, argdefs=f.__defaults__,
+                                      closure=f.__closure__)
+        except AttributeError:
+            return types.FunctionType(f.func_code, f.func_globals,
+                                      name=f.func_name,
+                                      argdefs=f.func_defaults,
+                                      closure=f.func_closure)
+
+    def mark(cls):
+        for method in dir(cls):
+            if method.startswith('test_'):
+                f = copy_func(getattr(cls, method))
+                setattr(cls, method, marker(f))
+        return cls
+    return mark

Roundup Issue Tracker: http://roundup-tracker.org/