1
1
from __future__ import annotations
2
2
3
3
from pathlib import Path
4
- from typing import TYPE_CHECKING , Any
4
+ from typing import TYPE_CHECKING , Any , Literal
5
5
from unittest .mock import ANY
6
6
7
7
import pytest
@@ -51,19 +51,31 @@ def test_set_env_bad_line() -> None:
51
51
SetEnv ("A" , "py" , "py" , Path ())
52
52
53
53
54
+ _ConfType = Literal ["ini" , "toml" ]
55
+
56
+
54
57
class EvalSetEnv (Protocol ):
55
58
def __call__ (
56
59
self ,
57
- tox_ini : str ,
60
+ config : str ,
61
+ conf_type : _ConfType = "ini" ,
58
62
extra_files : dict [str , Any ] | None = ...,
59
63
from_cwd : Path | None = ...,
60
64
) -> SetEnv : ...
61
65
62
66
63
67
@pytest .fixture
64
68
def eval_set_env (tox_project : ToxProjectCreator ) -> EvalSetEnv :
65
- def func (tox_ini : str , extra_files : dict [str , Any ] | None = None , from_cwd : Path | None = None ) -> SetEnv :
66
- prj = tox_project ({"tox.ini" : tox_ini , ** (extra_files or {})})
69
+ def func (
70
+ config : str ,
71
+ conf_type : _ConfType = "ini" ,
72
+ extra_files : dict [str , Any ] | None = None ,
73
+ from_cwd : Path | None = None ,
74
+ ) -> SetEnv :
75
+ if conf_type == "ini" :
76
+ prj = tox_project ({"tox.ini" : config , ** (extra_files or {})})
77
+ else :
78
+ prj = tox_project ({"tox.toml" : config , ** (extra_files or {})})
67
79
result = prj .run ("c" , "-k" , "set_env" , "-e" , "py" , from_cwd = None if from_cwd is None else prj .path / from_cwd )
68
80
result .assert_success ()
69
81
set_env : SetEnv = result .env_conf ("py" )["set_env" ]
@@ -149,7 +161,19 @@ def test_set_env_honor_override(eval_set_env: EvalSetEnv) -> None:
149
161
assert set_env .load ("PIP_DISABLE_PIP_VERSION_CHECK" ) == "0"
150
162
151
163
152
- def test_set_env_environment_file (eval_set_env : EvalSetEnv ) -> None :
164
+ @pytest .mark .parametrize (
165
+ ("conf_type" , "config" ),
166
+ [
167
+ ("ini" , "[testenv]\n package=skip\n set_env=file|A{/}a.txt\n change_dir=C" ),
168
+ ("toml" , '[env_run_base]\n package="skip"\n set_env="file|A{/}a.txt"\n change_dir="C"' ),
169
+ # Using monkeypatched env setting as a reference
170
+ ("ini" , "[testenv]\n package=skip\n set_env=file|{env:myenvfile}\n change_dir=C" ),
171
+ ("toml" , '[env_run_base]\n package="skip"\n set_env="file|{env:myenvfile}"\n change_dir="C"' ),
172
+ ],
173
+ )
174
+ def test_set_env_environment_file (
175
+ conf_type : _ConfType , config : str , eval_set_env : EvalSetEnv , monkeypatch : MonkeyPatch
176
+ ) -> None :
153
177
env_file = """
154
178
A=1
155
179
B= 2
@@ -158,9 +182,11 @@ def test_set_env_environment_file(eval_set_env: EvalSetEnv) -> None:
158
182
E = "1"
159
183
F =
160
184
"""
185
+ # Monkeypatch only used for some of the parameters
186
+ monkeypatch .setenv ("myenvfile" , "A{/}a.txt" )
187
+
161
188
extra = {"A" : {"a.txt" : env_file }, "B" : None , "C" : None }
162
- ini = "[testenv]\n package=skip\n set_env=file|A{/}a.txt\n change_dir=C"
163
- set_env = eval_set_env (ini , extra_files = extra , from_cwd = Path ("B" ))
189
+ set_env = eval_set_env (config , conf_type = conf_type , extra_files = extra , from_cwd = Path ("B" ))
164
190
content = {k : set_env .load (k ) for k in set_env }
165
191
assert content == {
166
192
"PIP_DISABLE_PIP_VERSION_CHECK" : "1" ,
0 commit comments