diff options
Diffstat (limited to 'lib/sqlalchemy/testing/exclusions.py')
-rw-r--r-- | lib/sqlalchemy/testing/exclusions.py | 19 |
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)]) |