From b3eb86a6450de6d2f2dc41d3bbcb0421b2d2e752 Mon Sep 17 00:00:00 2001 From: "Curt J. Sampson" <cjs@cynic.net> Date: Sat, 27 Jan 2024 02:16:59 +0900 Subject: [PATCH] Add tests for CliEnv (#3204) --- tests/session/test_env_select.py | 52 +++++++++++++++++++++++++++----- 1 file changed, 44 insertions(+), 8 deletions(-) diff --git a/tests/session/test_env_select.py b/tests/session/test_env_select.py index 8b96d2837..6b3d744fe 100644 --- a/tests/session/test_env_select.py +++ b/tests/session/test_env_select.py @@ -16,6 +16,50 @@ CURRENT_PY_ENV = f"py{sys.version_info[0]}{sys.version_info[1]}" # e.g. py310 +@pytest.mark.parametrize( + ("user_input", "env_names", "is_all", "is_default"), + [ + (None, (), False, True), + ("", (), False, True), + ("a1", ("a1",), False, False), + ("a1,b2,c3", ("a1", "b2", "c3"), False, False), + # If the user gives "ALL" as any envname, this becomes an "is_all" and other envnames are ignored. + ("ALL", (), True, False), + ("a1,ALL,b2", (), True, False), + # Zero-length envnames are ignored as being not present. This is not intentional. + (",,a1,,,b2,,", ("a1", "b2"), False, False), + (",,", (), False, True), + # Environment names with "invalid" characters are accepted here; the client is expected to deal with this. + ("\x01.-@\x02,xxx", ("\x01.-@\x02", "xxx"), False, False), + ], +) +def test_clienv(user_input: str, env_names: tuple[str], is_all: bool, is_default: bool) -> None: + ce = CliEnv(user_input) + assert (ce.is_all, ce.is_default_list, tuple(ce)) == (is_all, is_default, tuple(env_names)) + + +@pytest.mark.parametrize( + ("user_input", "expected"), + [ + ("", False), + ("all", False), + ("All", False), + ("ALL", True), + ("a,ALL,b", True), + ], +) +def test_clienv_is_all(user_input: str, expected: bool) -> None: + assert CliEnv(user_input).is_all is expected + + +def test_env_select_lazily_looks_at_envs() -> None: + state = State(get_options(), []) + env_selector = EnvSelector(state) + # late-assigning env should be reflected in env_selector + state.conf.options.env = CliEnv("py") + assert set(env_selector.iter()) == {"py"} + + def test_label_core_can_define(tox_project: ToxProjectCreator) -> None: ini = """ [tox] @@ -130,14 +174,6 @@ def test_tox_skip_env_logs(tox_project: ToxProjectCreator, monkeypatch: MonkeyPa outcome.assert_out_err("ROOT: skip environment mypy, matches filter 'm[y]py'\npy310\npy39\n", "") -def test_env_select_lazily_looks_at_envs() -> None: - state = State(get_options(), []) - env_selector = EnvSelector(state) - # late-assigning env should be reflected in env_selector - state.conf.options.env = CliEnv("py") - assert set(env_selector.iter()) == {"py"} - - def test_cli_env_can_be_specified_in_default(tox_project: ToxProjectCreator) -> None: proj = tox_project({"tox.ini": "[tox]\nenv_list=exists"}) outcome = proj.run("r", "-e", "exists")