Browse Source

New unittest utility decorators: @skip(reason), @skip_if(predicate, reason)

Ask Solem 15 years ago
parent
commit
cdcf4bc7b4
1 changed files with 26 additions and 2 deletions
  1. 26 2
      celery/tests/utils.py

+ 26 - 2
celery/tests/utils.py

@@ -7,18 +7,42 @@ import sys
 import __builtin__
 
 
-def todo(reason):
+def _skip_test(reason, sign):
 
     def _wrap_test(fun):
 
         @wraps(fun)
         def _skipped_test(*args, **kwargs):
-            sys.stderr.write("(TODO: %s) " % reason)
+            sys.stderr.write("(%s: %s) " % (sign, reason))
 
         return _skipped_test
     return _wrap_test
 
 
+def todo(reason):
+    """TODO test decorator."""
+    return _skip_test(reason, "TODO")
+
+
+def skip(reason):
+    """Skip test decorator."""
+    return _skip_test(reason, "SKIP")
+
+
+def skip_if(predicate, reason):
+    """Skip test if predicate is ``True``."""
+
+    def _inner(fun):
+        return skip(reason)(fun) if predicate else fun
+
+    return _inner
+
+
+def skip_unless(predicate, reason):
+    """Skip test if predicate is ``False``."""
+    return skip_if(not predicate, reason)
+
+
 @contextmanager
 def mask_modules(*modnames):
     """Ban some modules from being importable inside the context