diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-11-22 10:54:22 -0500 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2019-11-22 10:54:22 -0500 |
commit | 431b019c435654162b0d61b8131a170c5b858fb0 (patch) | |
tree | f8371cb38b04f5c9898a5330bc423559f6ea3c14 /lib/sqlalchemy/testing/util.py | |
parent | d933ddd503a1ca0a7c562c51c503139c541e707e (diff) | |
download | sqlalchemy-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.py | 50 |
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.""" |