diff options
Diffstat (limited to 'tests/integration/conftest.py')
-rw-r--r-- | tests/integration/conftest.py | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/integration/conftest.py b/tests/integration/conftest.py new file mode 100644 index 00000000..e83f690c --- /dev/null +++ b/tests/integration/conftest.py @@ -0,0 +1,51 @@ +import isort +from hypothesis import strategies as st +from typing import get_type_hints + + +def _as_config(kw) -> isort.Config: + if "wrap_length" in kw and "line_length" in kw: + kw["wrap_length"], kw["line_length"] = sorted([kw["wrap_length"], kw["line_length"]]) + try: + return isort.Config(**kw) + except ValueError: + kw["wrap_length"] = 0 + return isort.Config(**kw) + + +def configs(**force_strategies: st.SearchStrategy) -> st.SearchStrategy[isort.Config]: + """Generate arbitrary Config objects.""" + skip = { + "line_ending", + "sections", + "known_future_library", + "forced_separate", + "lines_after_imports", + "lines_between_sections", + "lines_between_types", + "sources", + "virtual_env", + "conda_env", + "directory", + "formatter", + "formatting_function", + } + inferred_kwargs = { + k: st.from_type(v) + for k, v in get_type_hints(isort.settings._Config).items() + if k not in skip + } + specific = { + "line_length": st.integers(0, 200), + "wrap_length": st.integers(0, 200), + "indent": st.integers(0, 20).map(lambda n: n * " "), + "default_section": st.sampled_from(sorted(isort.settings.KNOWN_SECTION_MAPPING)), + "force_grid_wrap": st.integers(0, 20), + "profile": st.sampled_from(sorted(isort.settings.profiles)), + "py_version": st.sampled_from(("auto",) + isort.settings.VALID_PY_TARGETS), + } + kwargs = {**inferred_kwargs, **specific, **force_strategies} + return st.fixed_dictionaries({}, optional=kwargs).map(_as_config) + + +st.register_type_strategy(isort.Config, configs()) |