1
1
from __future__ import annotations
2
2
3
+ from pathlib import Path
4
+
3
5
import pytest
4
6
from pytest_mock import MockerFixture
5
7
@@ -22,7 +24,77 @@ def test_re_raises_on_unexpected_exit(mocker: MockerFixture) -> None:
22
24
run ()
23
25
24
26
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 :
26
81
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