11from __future__ import annotations
22
33from pathlib import Path
4- from typing import TYPE_CHECKING , Any
4+ from typing import TYPE_CHECKING , Any , Literal
55from unittest .mock import ANY
66
77import pytest
@@ -51,19 +51,31 @@ def test_set_env_bad_line() -> None:
5151 SetEnv ("A" , "py" , "py" , Path ())
5252
5353
54+ _ConfType = Literal ["ini" , "toml" ]
55+
56+
5457class EvalSetEnv (Protocol ):
5558 def __call__ (
5659 self ,
57- tox_ini : str ,
60+ config : str ,
61+ conf_type : _ConfType = "ini" ,
5862 extra_files : dict [str , Any ] | None = ...,
5963 from_cwd : Path | None = ...,
6064 ) -> SetEnv : ...
6165
6266
6367@pytest .fixture
6468def 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 {})})
6779 result = prj .run ("c" , "-k" , "set_env" , "-e" , "py" , from_cwd = None if from_cwd is None else prj .path / from_cwd )
6880 result .assert_success ()
6981 set_env : SetEnv = result .env_conf ("py" )["set_env" ]
@@ -149,7 +161,19 @@ def test_set_env_honor_override(eval_set_env: EvalSetEnv) -> None:
149161 assert set_env .load ("PIP_DISABLE_PIP_VERSION_CHECK" ) == "0"
150162
151163
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 :
153177 env_file = """
154178 A=1
155179 B= 2
@@ -158,9 +182,11 @@ def test_set_env_environment_file(eval_set_env: EvalSetEnv) -> None:
158182 E = "1"
159183 F =
160184 """
185+ # Monkeypatch only used for some of the parameters
186+ monkeypatch .setenv ("myenvfile" , "A{/}a.txt" )
187+
161188 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" ))
164190 content = {k : set_env .load (k ) for k in set_env }
165191 assert content == {
166192 "PIP_DISABLE_PIP_VERSION_CHECK" : "1" ,
0 commit comments