summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing/exclusions.py
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/testing/exclusions.py')
-rw-r--r--lib/sqlalchemy/testing/exclusions.py19
1 files changed, 19 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/exclusions.py b/lib/sqlalchemy/testing/exclusions.py
index 3c70ec8d9..f105c8b6a 100644
--- a/lib/sqlalchemy/testing/exclusions.py
+++ b/lib/sqlalchemy/testing/exclusions.py
@@ -61,6 +61,7 @@ class skip_if(object):
self._fails_on = skip_if(other, reason)
return self
+
class fails_if(skip_if):
def __call__(self, fn):
@decorator
@@ -69,14 +70,17 @@ class fails_if(skip_if):
return fn(*args, **kw)
return decorate(fn)
+
def only_if(predicate, reason=None):
predicate = _as_predicate(predicate)
return skip_if(NotPredicate(predicate), reason)
+
def succeeds_if(predicate, reason=None):
predicate = _as_predicate(predicate)
return fails_if(NotPredicate(predicate), reason)
+
class Predicate(object):
@classmethod
def as_predicate(cls, predicate):
@@ -93,6 +97,7 @@ class Predicate(object):
else:
assert False, "unknown predicate type: %s" % predicate
+
class BooleanPredicate(Predicate):
def __init__(self, value, description=None):
self.value = value
@@ -110,6 +115,7 @@ class BooleanPredicate(Predicate):
def __str__(self):
return self._as_string()
+
class SpecPredicate(Predicate):
def __init__(self, db, op=None, spec=None, description=None):
self.db = db
@@ -177,6 +183,7 @@ class SpecPredicate(Predicate):
def __str__(self):
return self._as_string()
+
class LambdaPredicate(Predicate):
def __init__(self, lambda_, description=None, args=None, kw=None):
self.lambda_ = lambda_
@@ -201,6 +208,7 @@ class LambdaPredicate(Predicate):
def __str__(self):
return self._as_string()
+
class NotPredicate(Predicate):
def __init__(self, predicate):
self.predicate = predicate
@@ -211,6 +219,7 @@ class NotPredicate(Predicate):
def __str__(self):
return self.predicate._as_string(True)
+
class OrPredicate(Predicate):
def __init__(self, predicates, description=None):
self.predicates = predicates
@@ -256,9 +265,11 @@ class OrPredicate(Predicate):
_as_predicate = Predicate.as_predicate
+
def _is_excluded(db, op, spec):
return SpecPredicate(db, op, spec)()
+
def _server_version(engine):
"""Return a server_version_info tuple."""
@@ -268,24 +279,30 @@ def _server_version(engine):
conn.close()
return version
+
def db_spec(*dbs):
return OrPredicate(
Predicate.as_predicate(db) for db in dbs
)
+
def open():
return skip_if(BooleanPredicate(False, "mark as execute"))
+
def closed():
return skip_if(BooleanPredicate(True, "marked as skip"))
+
@decorator
def future(fn, *args, **kw):
return fails_if(LambdaPredicate(fn, *args, **kw), "Future feature")
+
def fails_on(db, reason=None):
return fails_if(SpecPredicate(db), reason)
+
def fails_on_everything_except(*dbs):
return succeeds_if(
OrPredicate([
@@ -293,9 +310,11 @@ def fails_on_everything_except(*dbs):
])
)
+
def skip(db, reason=None):
return skip_if(SpecPredicate(db), reason)
+
def only_on(dbs, reason=None):
return only_if(
OrPredicate([SpecPredicate(db) for db in util.to_list(dbs)])