From 5363ea0c4d84c8ff464ce0b77638c50b0db5713d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Bern=C3=A1t=20G=C3=A1bor?= Date: Thu, 8 Dec 2022 08:23:07 -0800 Subject: [PATCH] Set always PYTHONIOENCODING to utf-8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Bernát Gábor --- docs/changelog/2422.bugfix.rst | 2 ++ src/tox/config/sets.py | 1 + tests/config/test_set_env.py | 7 ++++--- tests/session/cmd/test_show_config.py | 2 +- 4 files changed, 8 insertions(+), 4 deletions(-) create mode 100644 docs/changelog/2422.bugfix.rst diff --git a/docs/changelog/2422.bugfix.rst b/docs/changelog/2422.bugfix.rst new file mode 100644 index 000000000..09f6b3e64 --- /dev/null +++ b/docs/changelog/2422.bugfix.rst @@ -0,0 +1,2 @@ +Always set environment variable ``PYTHONIOENCODING`` to ``utf-8`` to ensure tox works under Windows custom encodings +- by :user:`gaborbernat`. diff --git a/src/tox/config/sets.py b/src/tox/config/sets.py index 0315369a7..ac75c9aad 100644 --- a/src/tox/config/sets.py +++ b/src/tox/config/sets.py @@ -217,6 +217,7 @@ def __init__(self, conf: Config, section: Section, env_name: str) -> None: def register_config(self) -> None: def set_env_post_process(values: SetEnv) -> SetEnv: values.update(self.default_set_env_loader(), override=False) + values.update({"PYTHONIOENCODING": "utf-8"}, override=True) return values def set_env_factory(raw: object) -> SetEnv: diff --git a/tests/config/test_set_env.py b/tests/config/test_set_env.py index 17f925276..fd4b07f47 100644 --- a/tests/config/test_set_env.py +++ b/tests/config/test_set_env.py @@ -60,9 +60,9 @@ def func(tox_ini: str, extra_files: dict[str, Any] | None = None, from_cwd: Path def test_set_env_default(eval_set_env: EvalSetEnv) -> None: set_env = eval_set_env("") keys = list(set_env) - assert keys == ["PIP_DISABLE_PIP_VERSION_CHECK"] + assert keys == ["PIP_DISABLE_PIP_VERSION_CHECK", "PYTHONIOENCODING"] values = [set_env.load(k) for k in keys] - assert values == ["1"] + assert values == ["1", "utf-8"] def test_set_env_self_key(eval_set_env: EvalSetEnv, monkeypatch: MonkeyPatch) -> None: @@ -120,7 +120,7 @@ def test_set_env_replacer(eval_set_env: EvalSetEnv, monkeypatch: MonkeyPatch) -> monkeypatch.setenv("MAGIC", "\nb=2\n") set_env = eval_set_env("[testenv]\npackage=skip\nset_env=a=1\n {env:MAGIC}") env = {k: set_env.load(k) for k in set_env} - assert env == {"PIP_DISABLE_PIP_VERSION_CHECK": "1", "a": "1", "b": "2"} + assert env == {"PIP_DISABLE_PIP_VERSION_CHECK": "1", "a": "1", "b": "2", "PYTHONIOENCODING": "utf-8"} def test_set_env_honor_override(eval_set_env: EvalSetEnv) -> None: @@ -148,6 +148,7 @@ def test_set_env_environment_file(eval_set_env: EvalSetEnv) -> None: "C": "1", "E": '"1"', "F": "", + "PYTHONIOENCODING": "utf-8", } diff --git a/tests/session/cmd/test_show_config.py b/tests/session/cmd/test_show_config.py index 0fa430291..16d61347b 100644 --- a/tests/session/cmd/test_show_config.py +++ b/tests/session/cmd/test_show_config.py @@ -160,7 +160,7 @@ def test_show_config_select_only(tox_project: ToxProjectCreator) -> None: def test_show_config_alias(tox_project: ToxProjectCreator) -> None: outcome = tox_project({"tox.ini": ""}).run("c", "-e", "py", "-k", "setenv") outcome.assert_success() - assert "set_env = " in outcome.out + assert "set_env =" in outcome.out def test_show_config_description_normalize(tox_project: ToxProjectCreator) -> None: