summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/testing/util.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2019-11-22 10:54:22 -0500
committerMike Bayer <mike_mp@zzzcomputing.com>2019-11-22 10:54:22 -0500
commit431b019c435654162b0d61b8131a170c5b858fb0 (patch)
treef8371cb38b04f5c9898a5330bc423559f6ea3c14 /lib/sqlalchemy/testing/util.py
parentd933ddd503a1ca0a7c562c51c503139c541e707e (diff)
downloadsqlalchemy-431b019c435654162b0d61b8131a170c5b858fb0.tar.gz
Introduce flag combinations fixture
A helper for @testing.combinations when we just have lots of true/false combinations as is the case with some ORM tests. Change-Id: I9f2de97ce5b2487411ed610b8d41169c1052bd8f
Diffstat (limited to 'lib/sqlalchemy/testing/util.py')
-rw-r--r--lib/sqlalchemy/testing/util.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/util.py b/lib/sqlalchemy/testing/util.py
index 64738ad2f..87c461fd2 100644
--- a/lib/sqlalchemy/testing/util.py
+++ b/lib/sqlalchemy/testing/util.py
@@ -211,6 +211,56 @@ def provide_metadata(fn, *args, **kw):
self.metadata = prev_meta
+def flag_combinations(*combinations):
+ """A facade around @testing.combinations() oriented towards boolean
+ keyword-based arguments.
+
+ Basically generates a nice looking identifier based on the keywords
+ and also sets up the argument names.
+
+ E.g.::
+
+ @testing.flag_combinations(
+ dict(lazy=False, passive=False),
+ dict(lazy=True, passive=False),
+ dict(lazy=False, passive=True),
+ dict(lazy=False, passive=True, raiseload=True),
+ )
+
+
+ would result in::
+
+ @testing.combinations(
+ ('', False, False, False),
+ ('lazy', True, False, False),
+ ('lazy_passive', True, True, False),
+ ('lazy_passive', True, True, True),
+ id_='iaaa',
+ argnames='lazy,passive,raiseload'
+ )
+
+ """
+
+ from . import config
+
+ keys = set()
+
+ for d in combinations:
+ keys.update(d)
+
+ keys = sorted(keys)
+
+ return config.combinations(
+ *[
+ ("_".join(k for k in keys if d.get(k, False)),)
+ + tuple(d.get(k, False) for k in keys)
+ for d in combinations
+ ],
+ id_="i" + ("a" * len(keys)),
+ argnames=",".join(keys)
+ )
+
+
def metadata_fixture(ddl="function"):
"""Provide MetaData for a pytest fixture."""