11from __future__ import annotations
22
3+ from pathlib import Path
4+
35import pytest
46from pytest_mock import MockerFixture
57
@@ -22,7 +24,77 @@ def test_re_raises_on_unexpected_exit(mocker: MockerFixture) -> None:
2224 run ()
2325
2426
25- def test_custom_work_dir (tox_project : ToxProjectCreator ) -> None :
27+ def test_custom_work_dir (tox_project : ToxProjectCreator , tmp_path : Path ) -> None :
28+ project = tox_project ({})
29+
30+ expected_tox_root = project .path
31+ expected_work_dir = tmp_path
32+
33+ outcome = project .run ("c" , "--workdir" , str (expected_work_dir ))
34+ outcome .assert_success ()
35+
36+ assert outcome .state .conf .options .work_dir == expected_work_dir , "should parse the --workdir argument"
37+
38+ assert outcome .state .conf .core ["work_dir" ], f"should set work_dir to { expected_work_dir } "
39+
40+ assert outcome .state .conf .core ["tox_root" ] == expected_tox_root , "should not update the value of tox_root"
41+ assert outcome .state .conf .core ["work_dir" ] != (
42+ expected_tox_root / ".tox"
43+ ), "should explicitly demonstrate that tox_root and work_dir are decoupled"
44+
45+ # should update config values that depend on work_dir
46+ assert outcome .state .conf .core ["temp_dir" ] == expected_work_dir / ".tmp"
47+
48+ env_conf = outcome .state .conf .get_env ("py" )
49+
50+ assert env_conf ["env_dir" ] == expected_work_dir / "py"
51+ assert env_conf ["env_log_dir" ] == expected_work_dir / "py" / "log"
52+ assert env_conf ["env_tmp_dir" ] == expected_work_dir / "py" / "tmp"
53+
54+
55+ def test_custom_root_dir (tox_project : ToxProjectCreator , tmp_path : Path ) -> None :
56+ project = tox_project ({})
57+
58+ expected_tox_root = tmp_path
59+ expected_work_dir = expected_tox_root / ".tox"
60+
61+ outcome = project .run ("c" , "--root" , str (expected_tox_root ))
62+ outcome .assert_success ()
63+
64+ assert outcome .state .conf .options .root_dir == expected_tox_root , "should parse the --root argument"
65+
66+ assert outcome .state .conf .core ["tox_root" ] == expected_tox_root , f"should set tox_root to { expected_tox_root } "
67+
68+ # values that depend on tox_root should also be updated
69+
70+ assert outcome .state .conf .core ["work_dir" ] == expected_work_dir
71+ assert outcome .state .conf .core ["temp_dir" ] == expected_work_dir / ".tmp"
72+
73+ env_conf = outcome .state .conf .get_env ("py" )
74+
75+ assert env_conf ["env_dir" ] == expected_work_dir / "py"
76+ assert env_conf ["env_log_dir" ] == expected_work_dir / "py" / "log"
77+ assert env_conf ["env_tmp_dir" ] == expected_work_dir / "py" / "tmp"
78+
79+
80+ def test_custom_root_dir_and_work_dir (tox_project : ToxProjectCreator , tmp_path : Path ) -> None :
2681 project = tox_project ({})
27- outcome = project .run ("c" , "--workdir" , str (project .path .parent ))
28- assert outcome .state .conf .options .work_dir == project .path .parent
82+
83+ expected_tox_root = tmp_path / "tox_root"
84+ expected_work_dir = tmp_path / "work_dir"
85+
86+ outcome = project .run ("c" , "--root" , str (expected_tox_root ), "--workdir" , str (expected_work_dir ))
87+ outcome .assert_success ()
88+
89+ assert outcome .state .conf .core ["tox_root" ] == expected_tox_root , f"should set tox_root to { expected_tox_root } "
90+ assert outcome .state .conf .core ["work_dir" ] == expected_work_dir , f"should set work_dir to { expected_work_dir } "
91+
92+ # values that depend on work_dir should also be updated
93+
94+ assert outcome .state .conf .core ["temp_dir" ] == expected_work_dir / ".tmp"
95+
96+ env_conf = outcome .state .conf .get_env ("py" )
97+
98+ assert env_conf ["env_dir" ] == expected_work_dir / "py"
99+ assert env_conf ["env_log_dir" ] == expected_work_dir / "py" / "log"
100+ assert env_conf ["env_tmp_dir" ] == expected_work_dir / "py" / "tmp"
0 commit comments