summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBernát Gábor <gaborjbernat@gmail.com>2022-12-09 19:46:00 -0800
committerGitHub <noreply@github.com>2022-12-09 19:46:00 -0800
commit8dff35790cd809d5707103cf78c223970075a2c9 (patch)
tree9ae6343548b5319ebdd951419f028ed4c0c347e2
parent17950f439e25f66c5c85ef4c56d82052abde50f1 (diff)
downloadtox-git-8dff35790cd809d5707103cf78c223970075a2c9.tar.gz
Normalize extra names passed in (#2668)
Resolves https://github.com/tox-dev/tox/issues/2655
-rw-r--r--docs/changelog/2655.bugfix.rst1
-rw-r--r--src/tox/tox_env/python/runner.py9
-rw-r--r--tests/tox_env/python/test_python_runner.py22
3 files changed, 32 insertions, 0 deletions
diff --git a/docs/changelog/2655.bugfix.rst b/docs/changelog/2655.bugfix.rst
new file mode 100644
index 00000000..88fa3003
--- /dev/null
+++ b/docs/changelog/2655.bugfix.rst
@@ -0,0 +1 @@
+Normalize extra names passed in (fixes extra groups not being picked up during installation) - by :user:`gaborbernat`.
diff --git a/src/tox/tox_env/python/runner.py b/src/tox/tox_env/python/runner.py
index 591633d7..785c4698 100644
--- a/src/tox/tox_env/python/runner.py
+++ b/src/tox/tox_env/python/runner.py
@@ -6,6 +6,8 @@ from __future__ import annotations
from functools import partial
from typing import Set
+from packaging.utils import canonicalize_name
+
from tox.report import HandledError
from tox.tox_env.errors import Skip
from tox.tox_env.package import Package
@@ -65,11 +67,18 @@ class PythonRun(Python, RunToxEnv):
pkg_type = self.pkg_type
if pkg_type == "skip":
return False
+
+ def _normalize_extras(values: set[str]) -> set[str]:
+ # although _ and . is allowed this will be normalized during packaging to -
+ # https://packaging.python.org/en/latest/specifications/dependency-specifiers/#grammar
+ return {canonicalize_name(v) for v in values}
+
self.conf.add_config(
keys=["extras"],
of_type=Set[str],
default=set(),
desc="extras to install of the target package",
+ post_process=_normalize_extras,
)
return True
diff --git a/tests/tox_env/python/test_python_runner.py b/tests/tox_env/python/test_python_runner.py
index 797ad638..93d5e497 100644
--- a/tests/tox_env/python/test_python_runner.py
+++ b/tests/tox_env/python/test_python_runner.py
@@ -2,6 +2,8 @@ from __future__ import annotations
from pathlib import Path
+import pytest
+
from tox.journal import EnvJournal
from tox.pytest import ToxProjectCreator
from tox.tox_env.package import PathPackage
@@ -99,3 +101,23 @@ def test_package_temp_dir_view(tox_project: ToxProjectCreator, demo_pkg_inline:
msg = f" D package {session_path} links to {Path('.pkg') / 'dist'/ wheel_name} ({project.path/ '.tox'}) "
assert msg in result.out
assert f" D delete package {project.path / '.tox' / session_path}" in result.out
+
+
+@pytest.mark.parametrize(
+ ("extra", "used_extra"),
+ [
+ ("d_oc", "d-oc"),
+ ("d-oc", "d-oc"),
+ ("d.oc", "d-oc"),
+ ],
+)
+def test_extras_are_normalized(
+ tox_project: ToxProjectCreator,
+ demo_pkg_inline: Path,
+ extra: str,
+ used_extra: str,
+) -> None:
+ project = tox_project({"tox.ini": f"[testenv]\nextras={extra}"})
+ result = project.run("c", "-e", "py", "--root", str(demo_pkg_inline), "-k", "extras")
+ result.assert_success()
+ assert result.out == f"[testenv:py]\nextras = {used_extra}\n"