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,14 @@ 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+ ],
170+ )
171+ def test_set_env_environment_file (conf_type : _ConfType , config : str , eval_set_env : EvalSetEnv ) -> None :
153172 env_file = """
154173 A=1
155174 B= 2
@@ -159,8 +178,7 @@ def test_set_env_environment_file(eval_set_env: EvalSetEnv) -> None:
159178 F =
160179 """
161180 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" ))
181+ set_env = eval_set_env (config , conf_type = conf_type , extra_files = extra , from_cwd = Path ("B" ))
164182 content = {k : set_env .load (k ) for k in set_env }
165183 assert content == {
166184 "PIP_DISABLE_PIP_VERSION_CHECK" : "1" ,
0 commit comments