summaryrefslogtreecommitdiff
path: root/tests/tox_env/python
diff options
context:
space:
mode:
authorBernát Gábor <bgabor8@bloomberg.net>2021-01-21 09:42:45 +0000
committerGitHub <noreply@github.com>2021-01-21 09:42:45 +0000
commit1476fa617aca7563201b62df495767fa7bf40b70 (patch)
tree1369506b9bb58a75fccf3c58a602d1df3b066514 /tests/tox_env/python
parent5f172bc47b85dc24c706a2f33c3917089e0554f4 (diff)
downloadtox-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.py4
-rw-r--r--tests/tox_env/python/virtual_env/test_virtualenv_api.py107
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