summaryrefslogtreecommitdiff
path: root/tests/test_run.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/test_run.py')
-rw-r--r--tests/test_run.py78
1 files changed, 75 insertions, 3 deletions
diff --git a/tests/test_run.py b/tests/test_run.py
index ca36f41f..bcb2be34 100644
--- a/tests/test_run.py
+++ b/tests/test_run.py
@@ -1,5 +1,7 @@
from __future__ import annotations
+from pathlib import Path
+
import pytest
from pytest_mock import MockerFixture
@@ -22,7 +24,77 @@ def test_re_raises_on_unexpected_exit(mocker: MockerFixture) -> None:
run()
-def test_custom_work_dir(tox_project: ToxProjectCreator) -> None:
+def test_custom_work_dir(tox_project: ToxProjectCreator, tmp_path: Path) -> None:
+ project = tox_project({})
+
+ expected_tox_root = project.path
+ expected_work_dir = tmp_path
+
+ outcome = project.run("c", "--workdir", str(expected_work_dir))
+ outcome.assert_success()
+
+ assert outcome.state.conf.options.work_dir == expected_work_dir, "should parse the --workdir argument"
+
+ assert outcome.state.conf.core["work_dir"], f"should set work_dir to {expected_work_dir}"
+
+ assert outcome.state.conf.core["tox_root"] == expected_tox_root, "should not update the value of tox_root"
+ assert outcome.state.conf.core["work_dir"] != (
+ expected_tox_root / ".tox"
+ ), "should explicitly demonstrate that tox_root and work_dir are decoupled"
+
+ # should update config values that depend on work_dir
+ assert outcome.state.conf.core["temp_dir"] == expected_work_dir / ".tmp"
+
+ env_conf = outcome.state.conf.get_env("py")
+
+ assert env_conf["env_dir"] == expected_work_dir / "py"
+ assert env_conf["env_log_dir"] == expected_work_dir / "py" / "log"
+ assert env_conf["env_tmp_dir"] == expected_work_dir / "py" / "tmp"
+
+
+def test_custom_root_dir(tox_project: ToxProjectCreator, tmp_path: Path) -> None:
+ project = tox_project({})
+
+ expected_tox_root = tmp_path
+ expected_work_dir = expected_tox_root / ".tox"
+
+ outcome = project.run("c", "--root", str(expected_tox_root))
+ outcome.assert_success()
+
+ assert outcome.state.conf.options.root_dir == expected_tox_root, "should parse the --root argument"
+
+ assert outcome.state.conf.core["tox_root"] == expected_tox_root, f"should set tox_root to {expected_tox_root}"
+
+ # values that depend on tox_root should also be updated
+
+ assert outcome.state.conf.core["work_dir"] == expected_work_dir
+ assert outcome.state.conf.core["temp_dir"] == expected_work_dir / ".tmp"
+
+ env_conf = outcome.state.conf.get_env("py")
+
+ assert env_conf["env_dir"] == expected_work_dir / "py"
+ assert env_conf["env_log_dir"] == expected_work_dir / "py" / "log"
+ assert env_conf["env_tmp_dir"] == expected_work_dir / "py" / "tmp"
+
+
+def test_custom_root_dir_and_work_dir(tox_project: ToxProjectCreator, tmp_path: Path) -> None:
project = tox_project({})
- outcome = project.run("c", "--workdir", str(project.path.parent))
- assert outcome.state.conf.options.work_dir == project.path.parent
+
+ expected_tox_root = tmp_path / "tox_root"
+ expected_work_dir = tmp_path / "work_dir"
+
+ outcome = project.run("c", "--root", str(expected_tox_root), "--workdir", str(expected_work_dir))
+ outcome.assert_success()
+
+ assert outcome.state.conf.core["tox_root"] == expected_tox_root, f"should set tox_root to {expected_tox_root}"
+ assert outcome.state.conf.core["work_dir"] == expected_work_dir, f"should set work_dir to {expected_work_dir}"
+
+ # values that depend on work_dir should also be updated
+
+ assert outcome.state.conf.core["temp_dir"] == expected_work_dir / ".tmp"
+
+ env_conf = outcome.state.conf.get_env("py")
+
+ assert env_conf["env_dir"] == expected_work_dir / "py"
+ assert env_conf["env_log_dir"] == expected_work_dir / "py" / "log"
+ assert env_conf["env_tmp_dir"] == expected_work_dir / "py" / "tmp"