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 | |
| 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')
| -rw-r--r-- | lib/sqlalchemy/testing/__init__.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/testing/util.py | 50 |
2 files changed, 51 insertions, 0 deletions
diff --git a/lib/sqlalchemy/testing/__init__.py b/lib/sqlalchemy/testing/__init__.py index 1e506ccb1..a1f4b12ba 100644 --- a/lib/sqlalchemy/testing/__init__.py +++ b/lib/sqlalchemy/testing/__init__.py @@ -52,6 +52,7 @@ from .exclusions import skip # noqa from .exclusions import skip_if # noqa from .util import adict # noqa from .util import fail # noqa +from .util import flag_combinations # noqa from .util import force_drop_names # noqa from .util import metadata_fixture # noqa from .util import provide_metadata # noqa 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.""" |
