diff options
| author | Bernát Gábor <bgabor8@bloomberg.net> | 2021-01-21 09:42:45 +0000 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-01-21 09:42:45 +0000 |
| commit | 1476fa617aca7563201b62df495767fa7bf40b70 (patch) | |
| tree | 1369506b9bb58a75fccf3c58a602d1df3b066514 /tests/tox_env/python | |
| parent | 5f172bc47b85dc24c706a2f33c3917089e0554f4 (diff) | |
| download | tox-git-1476fa617aca7563201b62df495767fa7bf40b70.tar.gz | |
Add support for virtualenv configuration options (#1862)
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Diffstat (limited to 'tests/tox_env/python')
| -rw-r--r-- | tests/tox_env/python/virtual_env/test_package.py | 4 | ||||
| -rw-r--r-- | tests/tox_env/python/virtual_env/test_virtualenv_api.py | 107 |
2 files changed, 109 insertions, 2 deletions
diff --git a/tests/tox_env/python/virtual_env/test_package.py b/tests/tox_env/python/virtual_env/test_package.py index 378a6fb7..9ba1f14e 100644 --- a/tests/tox_env/python/virtual_env/test_package.py +++ b/tests/tox_env/python/virtual_env/test_package.py @@ -23,9 +23,9 @@ def test_tox_ini_package_type_valid(tox_project: ToxProjectCreator, pkg_type: st proj = tox_project({"tox.ini": f"[testenv]\npackage={pkg_type}"}) result = proj.run("c", "-k", "package_tox_env_type") result.assert_success() - res = result.state.tox_env("py").conf["package"] + res = result.env_conf("py")["package"] assert res is getattr(PackageType, pkg_type) - got_type = result.state.tox_env("py").conf["package_tox_env_type"] + got_type = result.env_conf("py")["package_tox_env_type"] assert got_type == "virtualenv-pep-517" diff --git a/tests/tox_env/python/virtual_env/test_virtualenv_api.py b/tests/tox_env/python/virtual_env/test_virtualenv_api.py new file mode 100644 index 00000000..8320b9dc --- /dev/null +++ b/tests/tox_env/python/virtual_env/test_virtualenv_api.py @@ -0,0 +1,107 @@ +import os + +import pytest +from pytest_mock import MockerFixture +from virtualenv import session_via_cli +from virtualenv.config.cli.parser import VirtualEnvOptions + +from tox.pytest import MonkeyPatch, ToxProject, ToxProjectCreator + + +@pytest.fixture() +def virtualenv_opt(monkeypatch: MonkeyPatch, mocker: MockerFixture) -> VirtualEnvOptions: + for key in os.environ: + if key.startswith("VIRTUALENV_"): # pragma: no cover + monkeypatch.delenv(key) # pragma: no cover + opts = VirtualEnvOptions() + mocker.patch( + "tox.tox_env.python.virtual_env.api.session_via_cli", + side_effect=lambda args, options, setup_logging, env: session_via_cli(args, opts, setup_logging, env), + ) + return opts + + +def test_virtualenv_default_settings(tox_project: ToxProjectCreator, virtualenv_opt: VirtualEnvOptions) -> None: + proj = tox_project({"tox.ini": "[testenv]\npackage=skip"}) + result = proj.run("r", "-e", "py") + result.assert_success() + + conf = result.env_conf("py") + assert conf["system_site_packages"] is False + assert conf["always_copy"] is False + assert conf["download"] is False + + assert virtualenv_opt.clear is True + assert virtualenv_opt.system_site is False + assert virtualenv_opt.download is False + assert virtualenv_opt.copies is False + assert virtualenv_opt.no_periodic_update is True + assert virtualenv_opt.python == ["py"] + + +def test_virtualenv_flipped_settings( + tox_project: ToxProjectCreator, virtualenv_opt: VirtualEnvOptions, monkeypatch: MonkeyPatch +) -> None: + proj = tox_project( + {"tox.ini": "[testenv]\npackage=skip\nsystem_site_packages=True\nalways_copy=True\ndownload=True"} + ) + monkeypatch.setenv("VIRTUALENV_CLEAR", "0") + + result = proj.run("r", "-e", "py") + result.assert_success() + + conf = result.env_conf("py") + assert conf["system_site_packages"] is True + assert conf["always_copy"] is True + assert conf["download"] is True + + assert virtualenv_opt.clear is False + assert virtualenv_opt.system_site is True + assert virtualenv_opt.download is True + assert virtualenv_opt.copies is True + assert virtualenv_opt.python == ["py"] + + +def test_virtualenv_env_ignored_if_set( + tox_project: ToxProjectCreator, virtualenv_opt: VirtualEnvOptions, monkeypatch: MonkeyPatch +) -> None: + ini = "[testenv]\npackage=skip\nsystem_site_packages=True\nalways_copy=True\ndownload=True" + proj = tox_project({"tox.ini": ini}) + monkeypatch.setenv("VIRTUALENV_COPIES", "0") + monkeypatch.setenv("VIRTUALENV_DOWNLOAD", "0") + monkeypatch.setenv("VIRTUALENV_SYSTEM_SITE_PACKAGES", "0") + run_and_check_set(proj, virtualenv_opt) + + +def test_virtualenv_env_used_if_not_set( + tox_project: ToxProjectCreator, virtualenv_opt: VirtualEnvOptions, monkeypatch: MonkeyPatch +) -> None: + proj = tox_project({"tox.ini": "[testenv]\npackage=skip"}) + monkeypatch.setenv("VIRTUALENV_COPIES", "1") + monkeypatch.setenv("VIRTUALENV_DOWNLOAD", "1") + monkeypatch.setenv("VIRTUALENV_SYSTEM_SITE_PACKAGES", "1") + run_and_check_set(proj, virtualenv_opt) + + +def run_and_check_set(proj: ToxProject, virtualenv_opt: VirtualEnvOptions) -> None: + result = proj.run("r", "-e", "py") + result.assert_success() + conf = result.env_conf("py") + assert conf["system_site_packages"] is True + assert conf["always_copy"] is True + assert conf["download"] is True + assert virtualenv_opt.system_site is True + assert virtualenv_opt.download is True + assert virtualenv_opt.copies is True + + +def test_honor_set_env_for_clear_periodic_update( + tox_project: ToxProjectCreator, virtualenv_opt: VirtualEnvOptions, monkeypatch: MonkeyPatch +) -> None: + ini = "[testenv]\npackage=skip\nset_env=\n VIRTUALENV_CLEAR=0\n VIRTUALENV_NO_PERIODIC_UPDATE=0" + proj = tox_project({"tox.ini": ini}) + result = proj.run("r", "-e", "py") + result.assert_success() + + assert virtualenv_opt.clear is False + assert virtualenv_opt.no_periodic_update is False |
